From: Martin Quinson Date: Sat, 27 Jan 2018 04:44:13 +0000 (+0100) Subject: Revert "sanitize our way to find and load libunwind" X-Git-Tag: v3.19~300 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/4c4e598644034fc1cc7498d70dc0b42bd6c4e744 Revert "sanitize our way to find and load libunwind" This reverts commit 2a8f06bcb45d972f49b0661754fac0d51772f02f. It was doing more harm (to java, to centos, etc) than good (possibly to stampede, not even sure) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e22357c33f..961bd16b24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -378,17 +378,24 @@ else() endif() include(FindLibunwind) -if(LIBUNWIND_FOUND) +if(HAVE_LIBUNWIND) if(NOT APPLE) - foreach(lib ${LIBUNWIND_LIBRARIES}) - SET(SIMGRID_DEP "${SIMGRID_DEP} ${lib}") - endforeach() - unset(lib) + SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind") else() # Apple forbids to link directly against its libunwind implementation # So let's comply and link against the System framework SET(SIMGRID_DEP "${SIMGRID_DEP} -lSystem") endif() + if("${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD") + set(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-ptrace") + # This supposes that the host machine is either an AMD or a X86. + # This is deeply wrong, and should be fixed by manually loading -lunwind-PLAT (FIXME) + if(SIMGRID_PROCESSOR_x86_64) + SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86_64") + else() + SET(SIMGRID_DEP "${SIMGRID_DEP} -lunwind-x86") + endif() + endif() else() if(enable_model-checking) message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.") 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)