cmake_minimum_required(VERSION 2.8.7) project(engine) set(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Root dir") set(SCRIPTS_CMAKE_DIR ${PROJECT_SOURCE_DIR}/cmake) include(${SCRIPTS_CMAKE_DIR}/common.cmake) include(${SCRIPTS_CMAKE_DIR}/macros.cmake) include(${SCRIPTS_CMAKE_DIR}/pack.cmake) include(CPack) option(UNITTESTS "Builds with tests" ON) option(UNITTESTS_SANITIZER_THREADS "Builds tests with thread sanitizer" OFF) option(UNITTESTS_SANITIZER_UNDEFINED "Builds tests with undefined behaviour sanitizer" OFF) option(UNITTESTS_SANITIZER_LEAK "Builds tests with leak sanitizer" OFF) option(UNITTESTS_SANITIZER_ADDRESS "Builds tests with address sanitizer" OFF) option(TOOLS "Builds with tools" ON) option(USE_CCACHE "Use ccache" ON) if (NOT CMAKE_TOOLCHAIN_FILE) if (WINDOWS) include(${SCRIPTS_CMAKE_DIR}/toolchains/windows-toolchain.cmake) elseif (DARWIN) include(${SCRIPTS_CMAKE_DIR}/toolchains/darwin-toolchain.cmake) else() include(${SCRIPTS_CMAKE_DIR}/toolchains/linux-toolchain.cmake) endif() endif() if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Compile Type" FORCE) endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo) if (${CMAKE_BUILD_TYPE} MATCHES "Debug") set(RELEASE False) else() set(RELEASE True) endif() message(STATUS "Place binaries in ${CMAKE_BINARY_DIR}") # First for the generic no-config case (e.g. with mingw) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib) # Second, for multi-config builds (e.g. msvc) foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/lib) endforeach() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SCRIPTS_CMAKE_DIR}) set(CMAKE_VERBOSE_MAKEFILE ${VERBOSE}) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if (${CMAKE_GENERATOR} MATCHES "Eclipse CDT4") message(STATUS "Generate eclipse projects") set(CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES OFF) set(CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT ON) set(CMAKE_ECLIPSE_VERSION "4.3" CACHE STRING "Eclipse version") set(CMAKE_CXX_COMPILER_ARG1 "-std=c++11" CACHE STRING "C++ version for Eclipse") endif() find_host_program(CCACHE "ccache") if (CCACHE) if (USE_CCACHE) message(STATUS "Using ccache") set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE}) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE}) endif() else() message(STATUS "ccache not found") endif() configure_file(${ROOT_DIR}/src/config.h.in ${CMAKE_BINARY_DIR}/config.h) include_directories(${CMAKE_BINARY_DIR}) include_directories(src/modules) include_directories(src/modules/ui) add_subdirectory(contrib/libs) if (UNITTESTS) enable_testing() gtest_suite_begin(tests TEMPLATE src/modules/core/tests/main.cpp.in) endif() add_subdirectory(src) if (UNITTESTS) gtest_suite_end(tests) if (UNITTESTS_SANITIZER_THREADS) set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_THREAD_FLAG}") set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_THREAD_FLAG}") endif() if (UNITTESTS_SANITIZER_UNDEFINED) set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_UNDEFINED_FLAG}") set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_UNDEFINED_FLAG}") endif() if (UNITTESTS_SANITIZER_LEAK) set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_LEAK_FLAG}") set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_LEAK_FLAG}") endif() if (UNITTESTS_SANITIZER_ADDRESS) set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_ADDRESS_FLAG}") set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_ADDRESS_FLAG}") endif() endif() copy_data_files(shared)