X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a379f8a8381c6acf5ef1b29bca69cd758410c4c6..4c4e598644034fc1cc7498d70dc0b42bd6c4e744:/tools/cmake/Modules/FindLibunwind.cmake diff --git a/tools/cmake/Modules/FindLibunwind.cmake b/tools/cmake/Modules/FindLibunwind.cmake index f0d47867d7..87adb1b994 100644 --- a/tools/cmake/Modules/FindLibunwind.cmake +++ b/tools/cmake/Modules/FindLibunwind.cmake @@ -1,95 +1,75 @@ -# Find the libunwind library -# -# LIBUNWIND_FOUND - True if libunwind was found. -# LIBUNWIND_LIBRARIES - The libraries needed to use libunwind -# LIBUNWIND_INCLUDE_DIR - Location of unwind.h and libunwind.h - -# This file was downloaded from https://github.com/cmccabe/lksmith/blob/master/cmake_modules/FindLibunwind.cmake -# Copyright (c) 2011-2012, the Locksmith authors. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Modified by the SimGrid team for: -# - Survive the fact that libunwind cannot be found (setting LIBUNWIND_FOUND correctly) -# - Also search for the unwind-ptrace component (but survive when it's not here) - -set(LIBUNWIND_FOUND "1") +if(SIMGRID_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 lib/system + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr) +endif() -FIND_PATH(LIBUNWIND_INCLUDE_DIR libunwind.h) -if(NOT LIBUNWIND_INCLUDE_DIR) - message(WARNING "failed to find libunwind.h") - set(LIBUNWIND_FOUND "") -elseif(NOT EXISTS "${LIBUNWIND_INCLUDE_DIR}/unwind.h") - message(WARNING "libunwind.h was found, but unwind.h was not found in that directory.") - set(LIBUNWIND_FOUND "") - SET(LIBUNWIND_INCLUDE_DIR "") +if(NOT PATH_LIBUNWIND_LIB) + 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 lib/system + PATHS + /opt + /opt/local + /opt/csw + /sw + /usr + /usr/lib/) endif() -FIND_LIBRARY(LIBUNWIND_GENERIC_LIBRARY "unwind") -if (LIBUNWIND_GENERIC_LIBRARY) - MESSAGE(STATUS "Found libunwind library: ${LIBUNWIND_GENERIC_LIBRARY}") -else() - set(LIBUNWIND_FOUND "") - MESSAGE(WARNING "failed to find unwind generic library") -endif () -SET(LIBUNWIND_LIBRARIES ${LIBUNWIND_GENERIC_LIBRARY}) -unset(LIBUNWIND_GENERIC_LIBRARY) +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) -FIND_LIBRARY(LIBUNWIND_PTRACE_LIBRARY "unwind-ptrace") -if (LIBUNWIND_PTRACE_LIBRARY) - MESSAGE(STATUS "Found libunwind-ptrace library: ${LIBUNWIND_PTRACE_LIBRARY}") - SET(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ${LIBUNWIND_PTRACE_LIBRARY}) +message(STATUS "Looking for libunwind.h") +if(PATH_LIBUNWIND_H) + message(STATUS "Looking for libunwind.h - found") else() - MESSAGE(WARNING "Failed to find unwind-ptrace library. Proceeding anyway.") -endif () -unset(LIBUNWIND_PTRACE_LIBRARY) - -# For some reason, we have to link to two libunwind shared object files: -# one arch-specific and one not. -if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") - SET(LIBUNWIND_ARCH "arm") -elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") - SET(LIBUNWIND_ARCH "x86_64") -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") - SET(LIBUNWIND_ARCH "x86") + message(STATUS "Looking for libunwind.h - not found") endif() -if (LIBUNWIND_FOUND AND LIBUNWIND_ARCH) - FIND_LIBRARY(LIBUNWIND_SPECIFIC_LIBRARY "unwind-${LIBUNWIND_ARCH}") - if (LIBUNWIND_SPECIFIC_LIBRARY) - MESSAGE(STATUS "Found libunwind-${LIBUNWIND_ARCH} library: ${LIBUNWIND_SPECIFIC_LIBRARY}") - else() - MESSAGE(FATAL_ERROR "failed to find unwind-${LIBUNWIND_ARCH}") - set(LIBUNWIND_FOUND "") - endif () - SET(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARIES} ${LIBUNWIND_SPECIFIC_LIBRARY}) - unset(LIBUNWIND_SPECIFIC_LIBRARY) +message(STATUS "Looking for libunwind") +if(PATH_LIBUNWIND_LIB) + message(STATUS "Looking for libunwind - found") +else() + message(STATUS "Looking for libunwind - not found") endif() -if (LIBUNWIND_FOUND) - MESSAGE(STATUS "Found all required libunwind components.") +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}) + SET(HAVE_LIBUNWIND 1) +else() + SET(HAVE_LIBUNWIND 0) endif() -MARK_AS_ADVANCED(LIBUNWIND_LIBRARIES LIBUNWIND_INCLUDE_DIR) +mark_as_advanced(PATH_LIBDW_H) +mark_as_advanced(PATH_LIBDW_LIB) +mark_as_advanced(PATH_LIBUNWIND_LIB) +mark_as_advanced(PATH_LIBUNWIND_H)