Commit a94f6b2e authored by Dominik Charousset's avatar Dominik Charousset

Suppress flag and compiler setup in subdir mode

Avoid touching compiler flags if CAF builds as a sub directory of
another CMake project. Further, check whether the parent project has
already select an OpenSSL version for us and use that rather than trying
to locate it ourselves.
parent b05a4b7b
...@@ -204,8 +204,11 @@ endif() ...@@ -204,8 +204,11 @@ endif()
# compiler setup # # compiler setup #
################################################################################ ################################################################################
# check for g++ >= 4.8 or clang++ > = 3.2 # leave compiler flags alone when building as subdirectory
if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK AND NOT CMAKE_CROSSCOMPILING)
if (NOT caf_is_subproject)
# check for g++ >= 4.8 or clang++ > = 3.2
if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK AND NOT CMAKE_CROSSCOMPILING)
try_run(ProgramResult try_run(ProgramResult
CompilationSucceeded CompilationSucceeded
"${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
...@@ -229,36 +232,36 @@ if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK AND NOT CMAKE_CROSSCOMPILING) ...@@ -229,36 +232,36 @@ if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK AND NOT CMAKE_CROSSCOMPILING)
message(FATAL_ERROR "Your C++ compiler does not support C++11 " message(FATAL_ERROR "Your C++ compiler does not support C++11 "
"or is not supported") "or is not supported")
endif() endif()
endif() endif()
# set optional build flags # set optional build flags
# increase max. template depth on GCC and Clang # increase max. template depth on GCC and Clang
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" if(CMAKE_CXX_COMPILER_ID MATCHES "Clang"
OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
build_string("EXTRA_FLAGS" "-ftemplate-depth=512 -ftemplate-backtrace-limit=0") build_string("EXTRA_FLAGS" "-ftemplate-depth=512 -ftemplate-backtrace-limit=0")
endif() endif()
# explicitly disable obnoxious GCC warnings # explicitly disable obnoxious GCC warnings
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
build_string("EXTRA_FLAGS" "-Wno-missing-field-initializers") build_string("EXTRA_FLAGS" "-Wno-missing-field-initializers")
endif() endif()
# add "-Werror" flag if --pedantic-build is used # add "-Werror" flag if --pedantic-build is used
if(CAF_CXX_WARNINGS_AS_ERRORS) if(CAF_CXX_WARNINGS_AS_ERRORS)
build_string("EXTRA_FLAGS" "-Werror") build_string("EXTRA_FLAGS" "-Werror")
endif() endif()
# set compiler flags for GCOV if requested # set compiler flags for GCOV if requested
if(CAF_ENABLE_GCOV) if(CAF_ENABLE_GCOV)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(NO_INLINE "-fno-inline") set(NO_INLINE "-fno-inline")
else() else()
set(NO_INLINE "-fno-inline -fno-inline-small-functions -fno-default-inline") set(NO_INLINE "-fno-inline -fno-inline-small-functions -fno-default-inline")
endif() endif()
build_string("EXTRA_FLAGS" "-fprofile-arcs -ftest-coverage ${NO_INLINE}") build_string("EXTRA_FLAGS" "-fprofile-arcs -ftest-coverage ${NO_INLINE}")
endif() endif()
# set -fno-exception if requested # set -fno-exception if requested
if(CAF_FORCE_NO_EXCEPTIONS) if(CAF_FORCE_NO_EXCEPTIONS)
build_string("EXTRA_FLAGS" "-fno-exceptions") build_string("EXTRA_FLAGS" "-fno-exceptions")
endif() endif()
# enable a ton of warnings if --more-clang-warnings is used # enable a ton of warnings if --more-clang-warnings is used
if(CAF_MORE_WARNINGS) if(CAF_MORE_WARNINGS)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(WFLAGS "-Weverything -Wno-c++98-compat -Wno-padded " set(WFLAGS "-Weverything -Wno-c++98-compat -Wno-padded "
"-Wno-documentation-unknown-command -Wno-exit-time-destructors " "-Wno-documentation-unknown-command -Wno-exit-time-destructors "
...@@ -291,11 +294,11 @@ if(CAF_MORE_WARNINGS) ...@@ -291,11 +294,11 @@ if(CAF_MORE_WARNINGS)
# convert CMake list to a single string, erasing the ";" separators # convert CMake list to a single string, erasing the ";" separators
string(REPLACE ";" "" WFLAGS_STR ${WFLAGS}) string(REPLACE ";" "" WFLAGS_STR ${WFLAGS})
build_string("EXTRA_FLAGS" "${WFLAGS_STR}") build_string("EXTRA_FLAGS" "${WFLAGS_STR}")
endif() endif()
# allow enabling IPO on gcc/clang # allow enabling IPO on gcc/clang
if(POLICY CMP0069) if(POLICY CMP0069)
cmake_policy(SET CMP0069 NEW) cmake_policy(SET CMP0069 NEW)
else() else()
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION) if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
build_string("EXTRA_FLAGS" "-flto") build_string("EXTRA_FLAGS" "-flto")
...@@ -303,10 +306,10 @@ else() ...@@ -303,10 +306,10 @@ else()
build_string("EXTRA_FLAGS" "-flto -fno-fat-lto-objects") build_string("EXTRA_FLAGS" "-flto -fno-fat-lto-objects")
endif() endif()
endif() endif()
endif() endif()
# add -stdlib=libc++ when using Clang if possible # add -stdlib=libc++ when using Clang if possible
if(NOT CAF_NO_AUTO_LIBCPP AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") if(NOT CAF_NO_AUTO_LIBCPP AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}") set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++") set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++")
try_run(ProgramResult try_run(ProgramResult
...@@ -323,9 +326,9 @@ if(NOT CAF_NO_AUTO_LIBCPP AND CMAKE_CXX_COMPILER_ID MATCHES "Clang") ...@@ -323,9 +326,9 @@ if(NOT CAF_NO_AUTO_LIBCPP AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif() endif()
# restore CXX flags # restore CXX flags
set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}")
endif() endif()
# enable address sanitizer if requested by the user # enable address sanitizer if requested by the user
if(CAF_ENABLE_ADDRESS_SANITIZER AND NOT WIN32) if(CAF_ENABLE_ADDRESS_SANITIZER AND NOT WIN32)
# check whether address sanitizer is available # check whether address sanitizer is available
set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}") set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS "-fsanitize=address -fno-omit-frame-pointer")
...@@ -341,32 +344,32 @@ if(CAF_ENABLE_ADDRESS_SANITIZER AND NOT WIN32) ...@@ -341,32 +344,32 @@ if(CAF_ENABLE_ADDRESS_SANITIZER AND NOT WIN32)
endif() endif()
# restore CXX flags # restore CXX flags
set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}")
endif() endif()
# -pthread is ignored on MacOSX but required on other platforms # -pthread is ignored on MacOSX but required on other platforms
if(NOT APPLE AND NOT WIN32) if(NOT APPLE AND NOT WIN32)
build_string("EXTRA_FLAGS" "-pthread") build_string("EXTRA_FLAGS" "-pthread")
endif() endif()
# -fPIC generates warnings on MinGW and Cygwin plus extra setup steps needed on MinGW # -fPIC generates warnings on MinGW and Cygwin plus extra setup steps needed on MinGW
if(MINGW) if(MINGW)
add_definitions(-D_WIN32_WINNT=0x0600) add_definitions(-D_WIN32_WINNT=0x0600)
add_definitions(-DWIN32) add_definitions(-DWIN32)
include(GenerateExportHeader) include(GenerateExportHeader)
list(APPEND CAF_EXTRA_LDFLAGS -lws2_32 -liphlpapi -lpsapi) list(APPEND CAF_EXTRA_LDFLAGS -lws2_32 -liphlpapi -lpsapi)
# build static to avoid runtime dependencies to GCC libraries # build static to avoid runtime dependencies to GCC libraries
build_string("EXTRA_FLAGS" "-static") build_string("EXTRA_FLAGS" "-static")
elseif(CYGWIN) elseif(CYGWIN)
build_string("EXTRA_FLAGS" "-U__STRICT_ANSI__") build_string("EXTRA_FLAGS" "-U__STRICT_ANSI__")
else() else()
build_string("EXTRA_FLAGS" "-fPIC") build_string("EXTRA_FLAGS" "-fPIC")
endif() endif()
if (WIN32) if (WIN32)
list(APPEND CAF_EXTRA_LDFLAGS ws2_32 iphlpapi) list(APPEND CAF_EXTRA_LDFLAGS ws2_32 iphlpapi)
endif() endif()
# iOS support # iOS support
if(CAF_OSX_SYSROOT) if(CAF_OSX_SYSROOT)
set(CMAKE_OSX_SYSROOT "${CAF_OSX_SYSROOT}") set(CMAKE_OSX_SYSROOT "${CAF_OSX_SYSROOT}")
endif() endif()
if(CAF_IOS_DEPLOYMENT_TARGET) if(CAF_IOS_DEPLOYMENT_TARGET)
if(CAF_OSX_SYSROOT STREQUAL "iphonesimulator") if(CAF_OSX_SYSROOT STREQUAL "iphonesimulator")
build_string("EXTRA_FLAGS" build_string("EXTRA_FLAGS"
"-mios-simulator-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") "-mios-simulator-version-min=${CAF_IOS_DEPLOYMENT_TARGET}")
...@@ -374,34 +377,35 @@ if(CAF_IOS_DEPLOYMENT_TARGET) ...@@ -374,34 +377,35 @@ if(CAF_IOS_DEPLOYMENT_TARGET)
build_string("EXTRA_FLAGS" build_string("EXTRA_FLAGS"
"-miphoneos-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") "-miphoneos-version-min=${CAF_IOS_DEPLOYMENT_TARGET}")
endif() endif()
endif() endif()
# check if the user provided CXXFLAGS, set defaults otherwise # check if the user provided CXXFLAGS, set defaults otherwise
if(NOT CMAKE_CXX_FLAGS) if(NOT CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "-std=c++11 -Wextra -Wall -pedantic ${EXTRA_FLAGS}") set(CMAKE_CXX_FLAGS "-std=c++11 -Wextra -Wall -pedantic ${EXTRA_FLAGS}")
endif() endif()
if (NOT "${CMAKE_CXX_FLAGS}" MATCHES "-std=") if (NOT "${CMAKE_CXX_FLAGS}" MATCHES "-std=")
message(STATUS "Supplied CXXFLAGS do not contain a C++ standard, setting std to c++11") message(STATUS "Supplied CXXFLAGS do not contain a C++ standard, setting std to c++11")
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}") set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
endif() endif()
if(NOT CMAKE_CXX_FLAGS_DEBUG) if(NOT CMAKE_CXX_FLAGS_DEBUG)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
endif() endif()
if(NOT CMAKE_CXX_FLAGS_MINSIZEREL) if(NOT CMAKE_CXX_FLAGS_MINSIZEREL)
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os") set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")
endif() endif()
if(NOT CMAKE_CXX_FLAGS_RELEASE) if(NOT CMAKE_CXX_FLAGS_RELEASE)
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif() endif()
if(NOT CMAKE_CXX_FLAGS_RELWITHDEBINFO) if(NOT CMAKE_CXX_FLAGS_RELWITHDEBINFO)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -fno-omit-frame-pointer")
endif() endif()
# set build default build type to RelWithDebInfo if not set # set build default build type to RelWithDebInfo if not set
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo) set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif() endif()
# needed by subprojects # needed by subprojects
if (DEFINED CMAKE_LD_LIBS) if (DEFINED CMAKE_LD_LIBS)
list(APPEND ${CMAKE_LD_LIBS}) list(APPEND ${CMAKE_LD_LIBS})
endif()
endif() endif()
################################################################################ ################################################################################
...@@ -447,14 +451,15 @@ add_custom_command(TARGET uninstall ...@@ -447,14 +451,15 @@ add_custom_command(TARGET uninstall
################################################################################ ################################################################################
# path to caf core & io headers # path to caf core & io headers
set(LIBCAF_INCLUDE_DIRS set(CAF_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/libcaf_core" "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_core"
"${CMAKE_CURRENT_SOURCE_DIR}/libcaf_io" "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_io"
"${CMAKE_CURRENT_SOURCE_DIR}/libcaf_openssl"
"${CMAKE_CURRENT_SOURCE_DIR}/libcaf_test") "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_test")
# path to caf opencl headers # path to caf opencl headers
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/CMakeLists.txt") if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/CMakeLists.txt")
set(LIBCAF_INCLUDE_DIRS set(CAF_INCLUDE_DIRS
"${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/" "${LIBCAF_INCLUDE_DIRS}") "${CMAKE_CURRENT_SOURCE_DIR}/libcaf_opencl/" "${CAF_INCLUDE_DIRS}")
endif() endif()
# enable tests if not disabled # enable tests if not disabled
if(NOT CAF_NO_UNIT_TESTS) if(NOT CAF_NO_UNIT_TESTS)
...@@ -469,7 +474,7 @@ else() ...@@ -469,7 +474,7 @@ else()
endmacro() endmacro()
endif() endif()
# all projects need the headers of the core components # all projects need the headers of the core components
include_directories("${LIBCAF_INCLUDE_DIRS}") include_directories("${CAF_INCLUDE_DIRS}")
################################################################################ ################################################################################
...@@ -539,8 +544,12 @@ endmacro() ...@@ -539,8 +544,12 @@ endmacro()
add_caf_lib(core) add_caf_lib(core)
add_optional_caf_lib(io) add_optional_caf_lib(io)
# build SSL module if OpenSSL library is available # build SSL module if OpenSSL library is available or if a parent project
if(NOT CAF_NO_OPENSSL) # defined OPENSSL_LIBRARIES for us
if(DEFINED OPENSSL_LIBRARIES)
message(STATUS "use OPENSSL_LIBRARIES provided by parent: ${OPENSSL_LIBRARIES}")
add_optional_caf_lib(openssl)
elseif(NOT CAF_NO_OPENSSL)
find_package(OpenSSL) find_package(OpenSSL)
if(OPENSSL_FOUND) if(OPENSSL_FOUND)
# Check OpenSSL version >= 1.0.1 # Check OpenSSL version >= 1.0.1
...@@ -668,6 +677,14 @@ add_subdirectory(doc) ...@@ -668,6 +677,14 @@ add_subdirectory(doc)
file(GLOB_RECURSE script_files "scripts/*") file(GLOB_RECURSE script_files "scripts/*")
add_custom_target(gui_dummy SOURCES configure ${script_files}) add_custom_target(gui_dummy SOURCES configure ${script_files})
# -- Export important variables to the parent scope ----------------------------
if(caf_is_subproject)
set(CAF_VERSION "${CAF_VERSION}" PARENT_SCOPE)
set(CAF_INCLUDE_DIRS "${CAF_INCLUDE_DIRS}" PARENT_SCOPE)
set(CAF_LIBRARIES "${CAF_LIBRARIES}" PARENT_SCOPE)
endif()
################################################################################ ################################################################################
# print summary # # print summary #
################################################################################ ################################################################################
......
...@@ -2,7 +2,7 @@ project(caf_examples CXX) ...@@ -2,7 +2,7 @@ project(caf_examples CXX)
add_custom_target(all_examples) add_custom_target(all_examples)
include_directories(${LIBCAF_INCLUDE_DIRS}) include_directories(${CAF_INCLUDE_DIRS})
macro(add folder name) macro(add folder name)
add_executable(${name} ${folder}/${name}.cpp ${ARGN}) add_executable(${name} ${folder}/${name}.cpp ${ARGN})
......
...@@ -3,7 +3,7 @@ project(caf_examples_opencl CXX) ...@@ -3,7 +3,7 @@ project(caf_examples_opencl CXX)
if(OpenCL_LIBRARIES AND NOT CAF_NO_EXAMPLES) if(OpenCL_LIBRARIES AND NOT CAF_NO_EXAMPLES)
add_custom_target(opencl_examples) add_custom_target(opencl_examples)
include_directories(${LIBCAF_INCLUDE_DIRS}) include_directories(${CAF_INCLUDE_DIRS})
if(${CMAKE_SYSTEM_NAME} MATCHES "Window") if(${CMAKE_SYSTEM_NAME} MATCHES "Window")
set(WSLIB -lws2_32) set(WSLIB -lws2_32)
else() else()
......
...@@ -2,7 +2,7 @@ project(caf_tools CXX) ...@@ -2,7 +2,7 @@ project(caf_tools CXX)
add_custom_target(all_tools) add_custom_target(all_tools)
include_directories(${LIBCAF_INCLUDE_DIRS}) include_directories(${CAF_INCLUDE_DIRS})
macro(add name) macro(add name)
add_executable(${name} ${name}.cpp ${ARGN}) add_executable(${name} ${name}.cpp ${ARGN})
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment