From ac2162b716c1a99ffb3f8defa67d37e7c748d629 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Mon, 15 Oct 2012 23:57:55 +0200 Subject: [PATCH] search libunwind with cmake and die at config time if not found --- buildtools/Cmake/CompleteInFiles.cmake | 1 + buildtools/Cmake/DefinePackages.cmake | 1 + buildtools/Cmake/MakeLib.cmake | 2 + buildtools/Cmake/Modules/FindLibunwind.cmake | 70 ++++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100644 buildtools/Cmake/Modules/FindLibunwind.cmake diff --git a/buildtools/Cmake/CompleteInFiles.cmake b/buildtools/Cmake/CompleteInFiles.cmake index 5f1d02ea3b..199fa68cae 100644 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@ -206,6 +206,7 @@ endif(enable_mallocators) if(enable_model-checking AND HAVE_MMAP) SET(HAVE_MC 1) SET(MMALLOC_WANT_OVERRIDE_LEGACY 1) + include(FindLibunwind) else(enable_model-checking AND HAVE_MMAP) SET(HAVE_MC 0) SET(MMALLOC_WANT_OVERRIDE_LEGACY 0) diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index 9c8456df00..5f609b06d8 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -786,6 +786,7 @@ set(CMAKE_SOURCE_FILES buildtools/Cmake/Modules/FindRubySimgrid.cmake buildtools/Cmake/Modules/FindSimGrid.cmake buildtools/Cmake/Modules/FindValgrind.cmake + buildtools/Cmake/Modules/FindLibunwind.cmake buildtools/Cmake/Option.cmake buildtools/Cmake/Pipol.cmake buildtools/Cmake/PrintArgs.cmake diff --git a/buildtools/Cmake/MakeLib.cmake b/buildtools/Cmake/MakeLib.cmake index 96b330efa9..8e71f41d64 100644 --- a/buildtools/Cmake/MakeLib.cmake +++ b/buildtools/Cmake/MakeLib.cmake @@ -115,6 +115,8 @@ if(HAVE_GTNETS) endif(HAVE_GTNETS) if(HAVE_MC) + # The availability of libunwind was checked in CompleteInFiles.cmake + # (that includes FindLibunwind.cmake), so simply load it now. if(PROCESSOR_x86_64) SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86_64") else(PROCESSOR_x86_64) diff --git a/buildtools/Cmake/Modules/FindLibunwind.cmake b/buildtools/Cmake/Modules/FindLibunwind.cmake new file mode 100644 index 0000000000..101a9df300 --- /dev/null +++ b/buildtools/Cmake/Modules/FindLibunwind.cmake @@ -0,0 +1,70 @@ +if(PROCESSOR_x86_64) + find_library(PATH_LIBUNWIND_LIB + NAMES unwind-x86_64 + HINTS + $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH} + $ENV{LD_LIBRARY_PATH} + $ENV{LIBUNWIND_LIBRARY_PATH} + PATH_SUFFIXES lib/ GnuWin32/lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr) +else(PROCESSOR_x86_64) + find_library(PATH_LIBUNWIND_LIB + NAMES unwind + HINTS + $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH} + $ENV{LD_LIBRARY_PATH} + $ENV{LIBUNWIND_LIBRARY_PATH} + PATH_SUFFIXES lib/ GnuWin32/lib + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr) +endif(PROCESSOR_x86_64) + +find_path(PATH_LIBUNWIND_H "libunwind.h" + HINTS + $ENV{SIMGRID_LIBUNWIND_LIBRARY_PATH} + $ENV{LD_LIBRARY_PATH} + $ENV{LIBUNWIND_LIBRARY_PATH} + PATH_SUFFIXES include/ GnuWin32/include + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr) + +message(STATUS "Looking for libunwind.h") +if(PATH_LIBUNWIND_H) + message(STATUS "Looking for libunwind.h - found") +else(PATH_LIBUNWIND_H) + message(STATUS "Looking for libunwind.h - not found") +endif(PATH_LIBUNWIND_H) + +message(STATUS "Looking for libunwind") +if(PATH_LIBUNWIND_LIB) + message(STATUS "Looking for libunwind - found") +else(PATH_LIBUNWIND_LIB) + message(STATUS "Looking for libunwind - not found") +endif(PATH_LIBUNWIND_LIB) + +if(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H) + string(REGEX REPLACE "/libunwind.*[.]${LIB_EXE}$" "" PATH_LIBUNWIND_LIB "${PATH_LIBUNWIND_LIB}") + string(REGEX REPLACE "/libunwind.h" "" PATH_LIBUNWIND_H "${PATH_LIBUNWIND_H}") + + include_directories(${PATH_LIBUNWIND_H}) + link_directories(${PATH_LIBUNWIND_LIB}) + +else(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H) + message(FATAL_ERROR "Please either install the libunwind7-dev package (or equivalent) or turn off the model-checking option of SimGrid.") +endif(PATH_LIBUNWIND_LIB AND PATH_LIBUNWIND_H) + +mark_as_advanced(PATH_LIBUNWIND_H) +mark_as_advanced(PATH_LIBUNWIND_LIB) \ No newline at end of file -- 2.20.1