--- CMakeLists.txt.orig 2018-08-07 21:23:18 UTC +++ CMakeLists.txt @@ -5,7 +5,35 @@ project (Bloaty VERSION 1.0) # Options we define for users. option(BLOATY_ENABLE_ASAN "Enable address sanitizer." OFF) option(BLOATY_ENABLE_UBSAN "Enable undefined behavior sanitizer." OFF) +option(BLOATY_ENABLE_CMAKETARGETS "Enable installing cmake target files." ON) +option(BLOATY_ENABLE_BUILDID "Enable build id." ON) +if(UNIX) +find_package(PkgConfig) +if(${PKG_CONFIG_FOUND}) +pkg_search_module(RE2 re2) +pkg_search_module(CAPSTONE capstone) +pkg_search_module(PROTOBUF protobuf) +if(${RE2_FOUND}) + MESSAGE(STATUS "System re2 found, using") +else(${RE2_FOUND}) + MESSAGE(STATUS "System re2 not found, using bundled version") +endif(${RE2_FOUND}) +if(${CAPSTONE_FOUND}) + MESSAGE(STATUS "System capstone found, using") +else(${CAPSTONE_FOUND}) + MESSAGE(STATUS "System capstone not found, using bundled version") +endif(${CAPSTONE_FOUND}) +if(${PROTOBUF_FOUND}) + MESSAGE(STATUS "System protobuf found, using") +else(${PROTOBUF_FOUND}) + MESSAGE(STATUS "System protobuf not found, using bundled version") +endif(${PROTOBUF_FOUND}) +else(${PKG_CONFIG_FOUND}) + MESSAGE(STATUS "pkg-config not found, using bundled dependencies") +endif(${PKG_CONFIG_FOUND}) +endif(UNIX) + # Set default build type. if(NOT CMAKE_BUILD_TYPE) message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") @@ -21,19 +49,42 @@ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.gitmodules") endif() # Add third_party libraries, disabling as much as we can of their builds. -set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE) -set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE) -set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE) -set(protobuf_BUILD_TESTS OFF CACHE BOOL "enable tests for proto2" FORCE) -set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "enable shared libs for proto2" FORCE) + add_definitions(-D_LIBCXXABI_FUNC_VIS=) # For Demumble. -add_subdirectory(third_party/re2) -add_subdirectory(third_party/capstone) -add_subdirectory(third_party/protobuf/cmake) -include_directories(third_party/capstone/include) -include_directories(third_party/re2) -include_directories(third_party/protobuf/src) +if(UNIX) + if(${RE2_FOUND}) + include_directories(${RE2_INCLUDE_DIRS}) + else(${RE2_FOUND}) + set(RE2_BUILD_TESTING OFF CACHE BOOL "enable testing for RE2" FORCE) + add_subdirectory(third_party/re2) + include_directories(third_party/re2) + endif(${RE2_FOUND}) + if(${CAPSTONE_FOUND}) + include_directories(${CAPSTONE_INCLUDE_DIRS}) + else(${CAPSTONE_FOUND}) + set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Build shared library" FORCE) + set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Build tests" FORCE) + add_subdirectory(third_party/capstone) + include_directories(third_party/capstone/include) + endif(${CAPSTONE_FOUND}) + if(${PROTOBUF_FOUND}) + include_directories(${PROTOBUF_INCLUDE_DIRS}) + else(${PROTOBUF_FOUND}) + set(protobuf_BUILD_TESTS OFF CACHE BOOL "enable tests for proto2" FORCE) + set(protobuf_BUILD_SHARED_LIBS OFF CACHE BOOL "enable shared libs for proto2" FORCE) + add_subdirectory(third_party/protobuf/cmake) + include_directories(third_party/protobuf/src) + endif(${PROTOBUF_FOUND}) +else(UNIX) + add_subdirectory(third_party/re2) + add_subdirectory(third_party/capstone) + add_subdirectory(third_party/protobuf/cmake) + include_directories(third_party/re2) + include_directories(third_party/capstone/include) + include_directories(third_party/protobuf/src) +endif(UNIX) + include_directories(.) include_directories(src) include_directories(third_party/abseil-cpp) @@ -47,7 +98,9 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g1") if(APPLE) elseif(UNIX) - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--build-id") + if(BLOATY_ENABLE_BUILDID) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id") + endif(BLOATY_ENABLE_BUILDID) endif() # When using Ninja, compiler output won't be colorized without this. @@ -73,6 +126,7 @@ if(DEFINED ENV{CXXFLAGS}) endif() file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src) +if(${PROTOC_FOUND}) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc DEPENDS protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto @@ -80,6 +134,14 @@ add_custom_command( --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src -I${CMAKE_CURRENT_SOURCE_DIR}/src ) +else(${PROTOC_FOUND}) +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/bloaty.pb.cc + COMMAND protoc ${CMAKE_CURRENT_SOURCE_DIR}/src/bloaty.proto + --cpp_out=${CMAKE_CURRENT_BINARY_DIR}/src + -I${CMAKE_CURRENT_SOURCE_DIR}/src +) +endif(${PROTOC_FOUND}) add_library(libbloaty src/bloaty.cc @@ -112,10 +174,39 @@ add_library(libbloaty third_party/demumble/third_party/libcxxabi/cxa_demangle.cpp ) +if(UNIX) + set(LIBBLOATY_LIBS libbloaty) + if(${PROTOBUF_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${PROTOBUF_LIBRARIES}) + else(${PROTOBUF_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} libprotoc) + endif(${PROTOBUF_FOUND}) + if(${RE2_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${RE2_LIBRARIES}) + else(${RE2_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} re2) + endif(${RE2_FOUND}) + if(${CAPSTONE_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} ${CAPSTONE_LIBRARIES}) + else(${CAPSTONE_FOUND}) + set(LIBBLOATY_LIBS ${LIBBLOATY_LIBS} capstone-static) + endif(${CAPSTONE_FOUND}) +else(UNIX) + set(LIBBLOATY_LIBS libbloaty libprotoc re2 capstone-static) +endif(UNIX) -set(LIBBLOATY_LIBS libbloaty libprotoc re2 capstone-static) +if(UNIX) + if(${RE2_FOUND}) + link_directories(${RE2_LIBRARY_DIRS}) + endif(${RE2_FOUND}) + if(${CAPSTONE_FOUND}) + link_directories(${CAPSTONE_LIBRARY_DIRS}) + endif(${CAPSTONE_FOUND}) + if(${PROTOBUF_FOUND}) + link_directories(${PROTOBUF_LIBRARY_DIRS}) + endif(${PROTOBUF_FOUND}) +endif(UNIX) - if(DEFINED ENV{LIB_FUZZING_ENGINE}) message("LIB_FUZZING_ENGINE set, building fuzz_target instead of Bloaty") add_executable(fuzz_target tests/fuzz_target.cc) @@ -134,11 +225,18 @@ else() target_link_libraries(bloaty "${CMAKE_THREAD_LIBS_INIT}") endif() - install( - TARGETS bloaty - EXPORT ${PROJECT_NAME}Targets - RUNTIME DESTINATION bin - ) + if(BLOATY_ENABLE_CMAKETARGETS) + install( + TARGETS bloaty + EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION bin + ) + else(BLOATY_ENABLE_CMAKETARGETS) + install( + TARGETS bloaty + RUNTIME DESTINATION bin + ) + endif(BLOATY_ENABLE_CMAKETARGETS) if (IS_DIRECTORY "${PROJECT_SOURCE_DIR}/tests") enable_testing() @@ -172,5 +270,7 @@ else() endif() endif() - install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME}) + if(BLOATY_ENABLE_CMAKETARGETS) + install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME} DESTINATION lib/${PROJECT_NAME}) + endif(BLOATY_ENABLE_CMAKETARGETS) endif()