Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

CMakeLists.txt

Blame
  • CMakeLists.txt 5.89 KiB
    cmake_minimum_required(VERSION 2.6.2)
    
    PROJECT(dOSEK)
    
    # Include the configuration
    include(${PROJECT_BINARY_DIR}/config.cmake)
    
    # ASM language defaults to the clang assembler in the Bellolabs.
    # It is required since arch/i386/idt.S uses macros that do not
    # work with gnu assembler without any changes.
    enable_language(ASM)
    
    # ASM-ATT language defaults to gnu assembler. It only matches
    # assembler files with a lower case ".s" as file extension.
    # Upper case "*.S" is still matched by the ASM language and is
    # therefore compiled with clang.
    if (NOT(${CONFIG_ARCH} STREQUAL "patmos"))
      enable_language(ASM-ATT)
    endif()
    
    # Generate the toolchain configuration (toolchain.cmake, etc.)
    execute_process(COMMAND ${PROJECT_SOURCE_DIR}/toolchain/detect ${CONFIG_ARCH} ${PROJECT_BINARY_DIR}/)
    
    include(${PROJECT_BINARY_DIR}/toolchain.cmake)
    
    # Set the default compiler toolchain to target
    SET(CMAKE_C_COMPILER ${TC_TARGET_CC})
    set(CMAKE_C_FLAGS "${TC_TARGET_CFLAGS} -g -c -emit-llvm -include ${PROJECT_BINARY_DIR}/dosek_config.h")
    
    SET(CMAKE_CXX_COMPILER ${TC_TARGET_CXX})
    set(CMAKE_CXX_FLAGS "${TC_TARGET_CXXFLAGS} -std=c++11 -g -c -emit-llvm  -include ${PROJECT_BINARY_DIR}/dosek_config.h")
    
    SET(CMAKE_ASM_COMPILER ${TC_TARGET_AS})
    set(CMAKE_ASM_FLAGS "${TC_TARGET_ASMFLAGS} -include ${PROJECT_BINARY_DIR}/dosek_config.h")
    set(CMAKE_ASM-ATT_FLAGS "${TC_TARGET_ASM_ATTFLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${TC_TARGET_LDFLAGS}")
    set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
    
    # we use our own linker (python) script, that calls llvm-link, llc and the system linker
    # setting CMAKE_*_LINK_EXECUTABLE at this point in the CMake run seems a bit unusual, but works as intended
    set(LINK_EXECUTABLE "${PROJECT_SOURCE_DIR}/toolchain/llvm-link.py --toolchain-file ${PROJECT_BINARY_DIR}/toolchain.pydict  <LINK_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")
    set(CMAKE_C_LINK_EXECUTABLE_HOST "${CMAKE_C_LINK_EXECUTABLE}")
    set(CMAKE_CXX_LINK_EXECUTABLE_HOST "${CMAKE_CXX_LINK_EXECUTABLE}")
    set(CMAKE_C_LINK_EXECUTABLE "${LINK_EXECUTABLE}")
    set(CMAKE_CXX_LINK_EXECUTABLE "${LINK_EXECUTABLE}")
    
    
    # Subdirectories can use this macro to use the host compiler
    macro(USE_HOST_COMPILER)
      SET(CMAKE_C_COMPILER ${TC_HOST_CC})
      SET(CMAKE_CXX_COMPILER ${TC_HOST_CXX})
      set(CMAKE_C_FLAGS "")
      set(CMAKE_CXX_FLAGS "-std=c++11")
      set(CMAKE_EXE_LINKER_FLAGS "")
      set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "")
      set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE_HOST}")
      set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE_HOST}")
    endmacro()
    
    set(PROJECT_VERSION "1.1" CACHE STRING "Project version number")
    set(PROJECT_RELEASE "stable" CACHE STRING "Project release")
    
    # Enable CTest
    enable_testing()
    
    # Set DEBUG flag when debugging
    OPTION(DEBUGGING "Debug mode" OFF)
    if(DEBUGGING)
    	message(STATUS "[${PROJECT_NAME}] Enabling debug mode")
    	add_definitions(-DDEBUG=1)