diff --git a/CMakeLists.txt b/CMakeLists.txt index 443a7295f..a61ed99df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -212,6 +212,17 @@ if(UNIX AND NOT APPLE) find_library(IRRLICHT_XF86VM_LIBRARY Xxf86vm) mark_as_advanced(IRRLICHT_XF86VM_LIBRARY) endif() + + if(USE_LIBBFD) + find_package(Libbfd) + if(LIBBFD_FOUND) + add_definitions(-DENABLE_LIBBFD) + include_directories(${LIBBFD_INCLUDE_DIRS}) + else() + set(USE_LIBBFD OFF CACHE BOOL "Use libbfd for crash reporting and leak check" FORCE) + message(WARNING "Libbfd not found, disable integrated stack trace.") + endif() + endif() endif() # Set some compiler options @@ -361,14 +372,13 @@ if(UNIX AND NOT APPLE) else() target_link_libraries(supertuxkart ${IRRLICHT_XF86VM_LIBRARY}) endif() + if(USE_LIBBFD) + target_link_libraries(supertuxkart ${LIBBFD_LIBRARIES}) + endif() if(USE_ASAN) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") target_link_libraries(supertuxkart "-fsanitize=address") endif() - if(USE_LIBBFD) - add_definitions(-DENABLE_LIBBFD) - target_link_libraries(supertuxkart "-lbfd") - endif() endif() # FreeBSD does not search in /usr/local/lib, but at least Freetype is installed there :( diff --git a/cmake/FindLibbfd.cmake b/cmake/FindLibbfd.cmake new file mode 100644 index 000000000..1a610a474 --- /dev/null +++ b/cmake/FindLibbfd.cmake @@ -0,0 +1,89 @@ +# - Try to find libbfd +# Once done this will define +# +# LIBBFD_FOUND - system has libbfd +# LIBBFD_INCLUDE_DIRS - the libbfd include directory +# LIBBFD_LIBRARIES - Link these to use libbfd +# LIBBFD_DEFINITIONS - Compiler switches required for using libbfd +# +# Based on: +# +# Copyright (c) 2008 Bernhard Walle +# +# Redistribution and use is allowed according to the terms of the New +# BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# + + +if (LIBBFD_LIBRARIES AND LIBBFD_INCLUDE_DIRS) + set (LIBBFD_FIND_QUIETLY TRUE) +endif () + +find_path (LIBBFD_INCLUDE_DIRS + NAMES + bfd.h + dis-asm.h + PATHS + /usr/include + /usr/local/include + /opt/local/include + /opt/include + ENV CPATH) + +# Ugly, yes ugly... +find_library (LIBBFD_BFD_LIBRARY + NAMES + bfd + PATHS + /usr/lib + /usr/lib64 + /usr/local/lib + /usr/local/lib64 + /usr/include + /opt/local/lib + /opt/usr/lib64 + ENV LIBRARY_PATH + ENV LD_LIBRARY_PATH) + +#find_library (LIBBFD_IBERTY_LIBRARY +# NAMES +# iberty +# PATHS +# /usr/lib +# /usr/lib64 +# /usr/local/lib +# /usr/local/lib64 +# /usr/include +# /opt/local/lib +# /opt/usr/lib64 +# ENV LIBRARY_PATH +# ENV LD_LIBRARY_PATH) + +#find_library (LIBBFD_OPCODES_LIBRARY +# NAMES +# opcodes +# PATHS +# /usr/lib +# /usr/lib64 +# /usr/local/lib +# /usr/local/lib64 +# /usr/include +# /opt/local/lib +# /opt/usr/lib64 +# ENV LIBRARY_PATH +# ENV LD_LIBRARY_PATH) + + +include (FindPackageHandleStandardArgs) + + +# handle the QUIETLY and REQUIRED arguments and set LIBBFD_FOUND to TRUE if all listed variables are TRUE +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBBFD DEFAULT_MSG + LIBBFD_BFD_LIBRARY +# LIBBFD_IBERTY_LIBRARY +# LIBBFD_OPCODES_LIBRARY + LIBBFD_INCLUDE_DIRS) + +set(LIBBFD_LIBRARIES "${LIBBFD_BFD_LIBRARY}") +mark_as_advanced(LIBBFD_INCLUDE_DIRS LIBBFD_LIBRARIES LIBBFD_BFD_LIBRARY)