Select Git revision
CMakeLists.txt
-
Hans-Peter Deifel authoredHans-Peter Deifel authored
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)