Skip to content
Snippets Groups Projects
CMakeLists_root.txt 3.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • cmake_minimum_required(VERSION 3.7)
    
    
    # Project name
    project(alib2)
    
    
    add_definitions(-DQT_NO_FOREACH)
    
    ################
    
    set ( CONFIGURE_HEADERS_SRC_DIR ${{CMAKE_SOURCE_DIR}}/CMake/headers )
    set ( CONFIGURE_HEADERS_DST_DIR ${{CMAKE_BINARY_DIR}}/generated )
    include_directories ( ${{CONFIGURE_HEADERS_DST_DIR}} )
    
    
    ################
    # Immediately fail if not UNIX
    # TODO: Add suport for other platforms
    # FIXME: Apple is subset of UNIX, check.
    if (NOT UNIX)
        message(FATAL_ERROR "Unavailable if not Unix")
    endif ()
    
    
    set(CMAKE_MODULE_PATH ${{CMAKE_SOURCE_DIR}}/CMake/Modules)
    
    # set(CMAKE_TEMPLATE_PATH ${{CMAKE_SOURCE_DIR}}/CMakeTemplates)
    
    #########################################################
    # If not specified whether Debug or Release, select debug
    # cmake -DCMAKE_BUILD_TYPE=Release
    # cmake -DCMAKE_BUILD_TYPE=Debug
    
    if (NOT CMAKE_BUILD_TYPE)
        set(CMAKE_BUILD_TYPE Debug)
    endif ()
    
    #################
    # versioning
    include(git)
    include(versioning)
    
    if ( CMAKE_BUILD_TYPE STREQUAL "Debug" )
    	set_git_version()
    endif ( )
    
    set_version({alib_versioning_major} {alib_versioning_minor} {alib_versioning_patch})
    
    ######################
    # Some Makefile tuning
    set(CMAKE_COLOR_MAKEFILE ON)
    # set(CMAKE_VERBOSE_MAKEFILE ON)
    
    ###########################################
    # Flags according to Debug/Release decision
    #  - CMake uses -g on Debug implicitly
    #  - fPIC for libraries will be enabled explicitly
    
    #  - add sanitizer? -DSANITIZE=<sanitizer>
    include(sanitizer)
    
    
    set(ALIB_BUILD_FLAGS_COMMON -Wall -pedantic -pipe -Wextra -Werror -Wshadow -Wpointer-arith -Wcast-qual -Wdelete-non-virtual-dtor -Wredundant-decls)
    
    set(ALIB_BUILD_FLAGS_DEBUG ${{ALIB_BUILD_FLAGS_COMMON}} -Og)
    set(ALIB_BUILD_FLAGS_RELEASE ${{ALIB_BUILD_FLAGS_COMMON}} -O3)
    
    
    set(CMAKE_EXE_LINKER_FLAGS "${{CMAKE_EXE_LINKER_FLAGS}} -Wl,-no-as-needed")
    
    
    if (${{CMAKE_CXX_COMPILER_ID}} STREQUAL "Clang")
        set(ALIB_BUILD_FLAGS_DEBUG ${{ALIB_BUILD_FLAGS_COMMON}} -O0)
    endif ()
    
    if (CMAKE_BUILD_TYPE STREQUAL "Debug")
        add_definitions(-DDEBUG)
        add_compile_options(${{ALIB_BUILD_FLAGS_DEBUG}})
    elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
        remove_definitions(-DNDEBUG)
        add_definitions(-DRELEASE)
        add_compile_options(${{ALIB_BUILD_FLAGS_RELEASE}})
    endif ()
    
    
    
    # TODO set CMAKE_INSTALL_PREFIX in release only
    
    if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
        set (CMAKE_INSTALL_PREFIX /usr)
    endif()
    message ( "[Install] Install directory prefix is ${{CMAKE_INSTALL_PREFIX}}" )
    
    set(CMAKE_INSTALL_RPATH "${{CMAKE_INSTALL_PREFIX}}/lib")
    set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
    
    
    set(ALIB_MODULES_LIB
            {alib_modules_lib}
            )
    
    set(ALIB_MODULES_EXE
            {alib_modules_exe}
            )
    
    set(ALIB_MODULES_TEST
            {alib_modules_test}
            )
    
    
    ##################
    # configure version
    configure_file (
    
        ${{CONFIGURE_HEADERS_SRC_DIR}}/version.hpp.in
        ${{CONFIGURE_HEADERS_DST_DIR}}/version.hpp
    
    #################
    # backtrace support
    find_package(Backtrace)
    if(BACKTRACE_EXISTS)
    	add_definitions(-DBACKTRACE)
    endif()
    
    
    Tomáš Pecka's avatar
    Tomáš Pecka committed
    enable_testing()
    add_subdirectory ( contrib/catch2 )
    
    
    ##################
    # Register modules
    
    foreach (module ${{ALIB_MODULES_LIB}} ${{ALIB_MODULES_EXE}} ${{ALIB_MODULES_TEST}})
    
        add_subdirectory(${{module}})
    endforeach ()