blob: 421cc7c7fb90618c1d757eb6932b2bddbd23d697 [file] [log] [blame]
Marco Poletticf798fa2014-06-21 15:05:15 +01001project(injection)
2cmake_minimum_required(VERSION 2.8)
3
Marco Polettieb92f9a2015-12-01 19:23:08 +01004# CMake on OSX likes to see this set explicitly, otherwise it outputs a warning.
5set(CMAKE_MACOSX_RPATH 1)
6
Marco Poletticf798fa2014-06-21 15:05:15 +01007if(NOT CMAKE_BUILD_TYPE)
8 set(CMAKE_BUILD_TYPE "Release")
9endif()
10
Marco Polettie769ce02015-12-07 17:02:00 +000011set(FRUIT_COMPILE_FLAGS "-std=c++11 -W -Wall")
12if((${CMAKE_BUILD_TYPE} STREQUAL "Debug"))
13 set(FRUIT_COMPILE_FLAGS "${FRUIT_COMPILE_FLAGS} -g -O0 -Werror -DFRUIT_EXTRA_DEBUG -D_GLIBCXX_DEBUG")
14 if((((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.99"))
Marco Poletti85dba842015-12-06 22:30:53 +000015 OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
Marco Polettie769ce02015-12-07 17:02:00 +000016 AND NOT ${RUN_TESTS_UNDER_VALGRIND})
17 set(FRUIT_COMPILE_FLAGS "${FRUIT_COMPILE_FLAGS} -fsanitize=undefined,address")
18 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined,address")
19 endif()
Marco Poletti71c36de2014-11-01 10:51:07 +000020endif()
Marco Polettie769ce02015-12-07 17:02:00 +000021add_definitions(${FRUIT_COMPILE_FLAGS})
Marco Poletticf798fa2014-06-21 15:05:15 +010022
Marco Poletti71c36de2014-11-01 10:51:07 +000023include_directories(${CMAKE_SOURCE_DIR}/include)
Marco Poletti06a1d1e2014-09-20 20:59:51 +010024
Marco Poletti81e03d52014-11-01 18:21:04 +000025# Unsafe, only for debugging/benchmarking.
Marco Poletti050d6002014-11-09 18:18:40 +000026#add_definitions(-DFRUIT_NO_LOOP_CHECK)
Marco Poletti81e03d52014-11-01 18:21:04 +000027
Marco Polettib9aca3f2015-05-31 10:06:45 +010028# (debug-only) compile switch to get deep template instantiation stacktraces for errors (instead
29# of the user-friendly default that hides Fruit internals).
30#add_definitions(-DFRUIT_DEEP_TEMPLATE_INSTANTIATION_STACKTRACES_FOR_ERRORS)
31
Marco Poletti81e03d52014-11-01 18:21:04 +000032
Marco Polettie66e1e72014-06-21 18:07:22 +010033set(INSTALL_LIBRARY_DIR lib CACHE PATH "Installation directory for libraries")
Marco Polettif86df382015-03-15 10:02:34 +000034set(INSTALL_INCLUDE_DIR include/fruit CACHE PATH "Installation directory for headers")
Marco Polettie66e1e72014-06-21 18:07:22 +010035
Marco Polettie267bc62015-02-28 19:34:13 +000036set(FRUIT_VERSION "1.0.2")
Marco Poletticc3a6232014-07-27 16:23:11 +010037
Marco Poletticf798fa2014-06-21 15:05:15 +010038enable_testing()
Marco Poletti34f50482015-12-01 23:14:12 +010039set(CTEST_TEST_TIMEOUT 20 CACHE STRING "Maximum test time, before CTest will kill the test." FORCE)
Marco Poletticf798fa2014-06-21 15:05:15 +010040
41add_subdirectory(src)
Marco Poletti1fb101f2014-10-12 16:18:17 +010042
43if(${CMAKE_BUILD_TYPE} STREQUAL "Debug")
44 # Do not exclude these from "make all" in debug mode, they must build.
45 add_subdirectory(extras)
46 add_subdirectory(examples)
47 add_subdirectory(tests)
48else()
49 add_subdirectory(extras EXCLUDE_FROM_ALL)
50 add_subdirectory(examples EXCLUDE_FROM_ALL)
51 add_subdirectory(tests EXCLUDE_FROM_ALL)
52endif()
53
Marco Polettid5dc2eb2014-07-05 17:07:57 +010054add_subdirectory(doc EXCLUDE_FROM_ALL)
Marco Poletticf798fa2014-06-21 15:05:15 +010055
Marco Polettif86df382015-03-15 10:02:34 +000056install(DIRECTORY include/fruit/
57 DESTINATION ${INSTALL_INCLUDE_DIR}
Marco Poletticf798fa2014-06-21 15:05:15 +010058 FILES_MATCHING PATTERN "*.h")