From f65170da5b15a77ddd8fb8948c72ab7b00170f06 Mon Sep 17 00:00:00 2001 From: Matthew Barr Date: Thu, 5 Nov 2015 14:49:04 +1100 Subject: [PATCH] cmake: improve build paths for nested builds If Hyperscan is built as a subproject of another cmake project, it helps to refer to PROJECT_xx_DIR instead of CMAKE_xx_DIR, etc. --- CMakeLists.txt | 24 +++++++++++++++++------- src/fdr/CMakeLists.txt | 10 +++++----- unit/CMakeLists.txt | 5 +++-- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67885c93..a1dfcaf2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set (HS_VERSION ${HS_MAJOR_VERSION}.${HS_MINOR_VERSION}.${HS_PATCH_VERSION}) string (TIMESTAMP BUILD_DATE "%Y-%m-%d") -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) INCLUDE (CheckFunctionExists) @@ -56,8 +56,9 @@ if(CMAKE_GENERATOR STREQUAL Xcode) set(XCODE TRUE) endif() -include_directories(src .) -include_directories(${CMAKE_BINARY_DIR}) +set(CMAKE_INCLUDE_CURRENT_DIR 1) +include_directories(${PROJECT_SOURCE_DIR}/src) +include_directories(${PROJECT_BINARY_DIR}) include_directories(SYSTEM include) set(BOOST_USE_STATIC_LIBS OFF) @@ -71,7 +72,7 @@ find_package(Boost ${BOOST_MINVERSION}) if(NOT Boost_FOUND) # we might have boost in tree, so provide a hint and try again message(STATUS "trying include dir for boost") - set(BOOST_INCLUDEDIR "${CMAKE_SOURCE_DIR}/include") + set(BOOST_INCLUDEDIR "${PROJECT_SOURCE_DIR}/include") find_package(Boost ${BOOST_MINVERSION}) if(NOT Boost_FOUND) message(FATAL_ERROR "Boost ${BOOST_MINVERSION} or later not found. Either install system pacakges if available, extract Boost headers to ${CMAKE_SOURCE_DIR}/include, or set the CMake BOOST_ROOT variable.") @@ -219,6 +220,15 @@ CHECK_FUNCTION_EXISTS(_aligned_malloc HAVE__ALIGNED_MALLOC) CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAS_C_HIDDEN) CHECK_CXX_COMPILER_FLAG(-fvisibility=hidden HAS_CXX_HIDDEN) +if (RELEASE_BUILD) + if (HAS_C_HIDDEN) + set(EXTRA_C_FLAGS "${EXTRA_C_FLAGS} -fvisibility=hidden") + endif() + if (HAS_CXX_HIDDEN) + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -fvisibility=hidden") + endif() +endif() + # testing a builtin takes a little more work CHECK_C_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CC_BUILTIN_ASSUME_ALIGNED) CHECK_CXX_SOURCE_COMPILES("void *aa_test(void *x) { return __builtin_assume_aligned(x, 16);}\nint main(void) { return 0; }" HAVE_CXX_BUILTIN_ASSUME_ALIGNED) @@ -327,8 +337,8 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/tools) endif() # do substitutions -configure_file(${CMAKE_MODULE_PATH}/config.h.in ${CMAKE_BINARY_DIR}/config.h) -configure_file(src/hs_version.h.in hs_version.h) +configure_file(${CMAKE_MODULE_PATH}/config.h.in ${PROJECT_BINARY_DIR}/config.h) +configure_file(src/hs_version.h.in ${PROJECT_BINARY_DIR}/hs_version.h) if (PKG_CONFIG_FOUND) # we really only need to do this if we have pkg-config @@ -345,7 +355,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXX_FLAGS}") # include the autogen targets add_subdirectory(src/fdr) -include_directories(${CMAKE_BINARY_DIR}/src/fdr) +include_directories(${PROJECT_BINARY_DIR}/src/fdr) if(NOT WIN32) set(RAGEL_C_FLAGS "-Wno-unused") diff --git a/src/fdr/CMakeLists.txt b/src/fdr/CMakeLists.txt index 25396689..1436c3fc 100644 --- a/src/fdr/CMakeLists.txt +++ b/src/fdr/CMakeLists.txt @@ -27,11 +27,11 @@ fdr_autogen(teddy_runtime teddy_autogen.c) fdr_autogen(teddy_compiler teddy_autogen_compiler.cpp) set(fdr_GENERATED_SRC -${CMAKE_BINARY_DIR}/src/fdr/fdr_autogen.c -${CMAKE_BINARY_DIR}/src/fdr/fdr_autogen_compiler.cpp -${CMAKE_BINARY_DIR}/src/fdr/teddy_autogen.c -${CMAKE_BINARY_DIR}/src/fdr/teddy_autogen_compiler.cpp -PARENT_SCOPE) + ${PROJECT_BINARY_DIR}/src/fdr/fdr_autogen.c + ${PROJECT_BINARY_DIR}/src/fdr/fdr_autogen_compiler.cpp + ${PROJECT_BINARY_DIR}/src/fdr/teddy_autogen.c + ${PROJECT_BINARY_DIR}/src/fdr/teddy_autogen_compiler.cpp + PARENT_SCOPE) set_source_files_properties(${fdr_GENERATED_SRC} PROPERTIES GENERATED TRUE) include_directories(${CMAKE_CURRENT_BINARY_DIR}) diff --git a/unit/CMakeLists.txt b/unit/CMakeLists.txt index 9bc74e23..a8925a3c 100644 --- a/unit/CMakeLists.txt +++ b/unit/CMakeLists.txt @@ -7,7 +7,8 @@ if(NOT XCODE) else() set(CMAKE_CXX_FLAGS "-isystem ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CXX_FLAGS}") endif() -include_directories(${CMAKE_SOURCE_DIR}/util) + +include_directories(${PROJECT_SOURCE_DIR}) # remove some warnings # cmake's scope means these only apply here @@ -26,7 +27,7 @@ endif() add_library(gtest ${gtest_SOURCES}) -add_definitions(-DGTEST_HAS_PTHREAD=0 -DSRCDIR=${CMAKE_SOURCE_DIR}) +add_definitions(-DGTEST_HAS_PTHREAD=0 -DSRCDIR=${PROJECT_SOURCE_DIR}) if (NOT RELEASE_BUILD) set(unit_internal_SOURCES