Re-thinking the build system to bring it more into line with the conventions.
We removed that implementation where the build directory isn't set up to build with exactly one configuration of the project but potentially several variants: the same build directory can/must be used for debug and release builds, for full or compact profile versions, etc. So we reworked the CMakeLists, and now one build dir deal with exactly one configuration of the project's libraries and tools. JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com JerryScript-DCO-1.0-Signed-off-by: Robert Sipka rsipka.uszeged@partner.samsung.com
This commit is contained in:
+28
-129
@@ -1,4 +1,5 @@
|
||||
# Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
# Copyright 2016 University of Szeged.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -13,140 +14,38 @@
|
||||
# limitations under the License.
|
||||
|
||||
cmake_minimum_required (VERSION 2.8.12)
|
||||
project (Jerry_LibC C ASM)
|
||||
|
||||
# Compiler / linker flags
|
||||
set(COMPILE_FLAGS_LIBC "${COMPILE_FLAGS_JERRY} ${C_FLAGS_JERRY}")
|
||||
|
||||
# Definitions
|
||||
set(DEFINES_LIBC )
|
||||
|
||||
# Debug
|
||||
set(DEFINES_LIBC_DEBUG )
|
||||
|
||||
# Release
|
||||
set(DEFINES_LIBC_RELEASE NDEBUG)
|
||||
|
||||
# Architecture-specific
|
||||
# x86_64
|
||||
set(DEFINES_LIBC_X86_64 __TARGET_HOST_x64)
|
||||
# ARMv7-hf
|
||||
set(DEFINES_LIBC_ARMV7_HF __TARGET_HOST_ARMv7 __TARGET_HOST_ARMv7_HARD_FLOAT)
|
||||
# ARMv7-el
|
||||
set(DEFINES_LIBC_ARMV7_EL __TARGET_HOST_ARMv7 __TARGET_HOST_ARMv7_SOFT_FLOAT)
|
||||
# x86
|
||||
set(DEFINES_LIBC_X86 __TARGET_HOST_x86)
|
||||
|
||||
# Platform-specific
|
||||
# Linux
|
||||
set(DEFINES_LIBC_LINUX __TARGET_HOST)
|
||||
# Darwin
|
||||
set(DEFINES_LIBC_DARWIN __TARGET_HOST)
|
||||
# MCU
|
||||
set(DEFINES_LIBC_MCU __TARGET_MCU)
|
||||
# stm32f3
|
||||
set(DEFINES_LIBC_MCU_STM32F3 __TARGET_MCU_STM32F3)
|
||||
# stm32f4
|
||||
set(DEFINES_LIBC_MCU_STM32F4 __TARGET_MCU_STM32F4)
|
||||
|
||||
# Include directories
|
||||
set(INCLUDE_LIBC ${CMAKE_SOURCE_DIR}/jerry-libc)
|
||||
set(INCLUDE_LIBC_INTERFACE ${CMAKE_SOURCE_DIR}/jerry-libc/include)
|
||||
set(INCLUDE_LIBC_INTERFACE ${INCLUDE_LIBC_INTERFACE} PARENT_SCOPE)
|
||||
|
||||
# Third-party
|
||||
# Platform-specific
|
||||
# Linux
|
||||
set(INCLUDE_THIRD_PARTY_LINUX )
|
||||
|
||||
# Darwin
|
||||
set(INCLUDE_THIRD_PARTY_DARWIN )
|
||||
|
||||
# MCU
|
||||
# STM32F3
|
||||
set(INCLUDE_THIRD_PARTY_MCU_STM32F3
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Include
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Include)
|
||||
# STM32F4
|
||||
set(INCLUDE_THIRD_PARTY_MCU_STM32F4
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Include
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/Include)
|
||||
|
||||
# Sources
|
||||
file(GLOB SOURCE_LIBC *.c)
|
||||
|
||||
# Platform-specific
|
||||
# Linux
|
||||
file(GLOB SOURCE_LIBC_LINUX target/posix/*.c target/posix/*.S)
|
||||
|
||||
# Darwin
|
||||
file(GLOB SOURCE_LIBC_DARWIN target/posix/*.c target/posix/*.S)
|
||||
|
||||
# MCU
|
||||
# stm32f3
|
||||
file(GLOB SOURCE_LIBC_MCU_STM32F3 target/mcu-stubs/*.c target/mcu-stubs/*.S)
|
||||
# stm32f4
|
||||
file(GLOB SOURCE_LIBC_MCU_STM32F4 target/mcu-stubs/*.c target/mcu-stubs/*.S)
|
||||
|
||||
# Third-party
|
||||
# Platform-specific
|
||||
# MCU
|
||||
# stm32f3
|
||||
set(SOURCE_THIRD_PARTY_MCU_STM32F3
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/system_stm32f30x.c
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/gcc_ride7/startup_stm32f30x.s)
|
||||
# stm32f4
|
||||
set(SOURCE_THIRD_PARTY_MCU_STM32F4
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
|
||||
${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f4xx.s)
|
||||
set(JERRY_LIBC_NAME jerry-libc)
|
||||
project (${JERRY_LIBC_NAME} C ASM)
|
||||
|
||||
# Architecture-specific configuration
|
||||
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_X86_64})
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l-hf")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_ARMV7_HF})
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l-el")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_ARMV7_EL})
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_X86})
|
||||
else()
|
||||
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} __TARGET_HOST_x64)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l-hf")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} __TARGET_HOST_ARMv7 __TARGET_HOST_ARMv7_HARD_FLOAT)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l-el")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} __TARGET_HOST_ARMv7 __TARGET_HOST_ARMv7_SOFT_FLOAT)
|
||||
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} __TARGET_HOST_x86)
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported machine architecture")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Platform-specific configuration
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_${PLATFORM}})
|
||||
# Include directories
|
||||
set(INCLUDE_LIBC "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
# Targets declaration
|
||||
add_custom_target (jerry-libc-all)
|
||||
# Sources
|
||||
file(GLOB SOURCE_LIBC *.c)
|
||||
|
||||
string(TOLOWER ${PLATFORM_EXT} PLATFORM_L)
|
||||
set(TARGET_NAME jerry-libc.${PLATFORM_L})
|
||||
# Platform-specific
|
||||
# Linux
|
||||
if(DEFINED PLATFORM AND ((PLATFORM STREQUAL "LINUX") OR (PLATFORM STREQUAL "DARWIN")))
|
||||
file(GLOB TARGET_SPECIFIC_LIBC_SOURCE target/posix/*.c target/posix/*.S)
|
||||
set(INCLUDE_LIBC ${INCLUDE_LIBC} __TARGET_HOST)
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} __TARGET_HOST)
|
||||
endif()
|
||||
|
||||
function(declare_targets_for_build_mode BUILD_MODE)
|
||||
set(TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.${TARGET_NAME})
|
||||
set(DEFINES_LIBC ${DEFINES_LIBC} ${DEFINES_LIBC_${BUILD_MODE}})
|
||||
set(INCLUDE_LIBC ${INCLUDE_LIBC} ${INCLUDE_LIBC_${PLATFORM_EXT}})
|
||||
add_library(${JERRY_LIBC_NAME} STATIC ${SOURCE_LIBC} ${TARGET_SPECIFIC_LIBC_SOURCE})
|
||||
|
||||
# Jerry
|
||||
add_library(${TARGET_NAME}.lib STATIC ${SOURCE_LIBC} ${SOURCE_LIBC_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}.lib
|
||||
PROPERTY COMPILE_FLAGS "${COMPILE_FLAGS_LIBC} ${FLAGS_COMMON_${BUILD_MODE}}")
|
||||
target_compile_definitions(${TARGET_NAME}.lib PRIVATE ${DEFINES_LIBC})
|
||||
target_include_directories(${TARGET_NAME}.lib PRIVATE ${INCLUDE_LIBC})
|
||||
target_include_directories(${TARGET_NAME}.lib SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
|
||||
add_dependencies(jerry-libc-all ${TARGET_NAME}.lib)
|
||||
|
||||
# Third-party MCU library
|
||||
if(DEFINED SOURCE_THIRD_PARTY_${PLATFORM_EXT})
|
||||
add_library(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} STATIC ${SOURCE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB}
|
||||
PROPERTY COMPILE_FLAGS "${FLAGS_COMMON_${BUILD_MODE}}")
|
||||
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} PRIVATE ${INCLUDE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
|
||||
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
declare_targets_for_build_mode(DEBUG)
|
||||
declare_targets_for_build_mode(RELEASE)
|
||||
declare_targets_for_build_mode(UNITTESTS)
|
||||
target_compile_definitions(${JERRY_LIBC_NAME} PRIVATE ${DEFINES_LIBC})
|
||||
target_include_directories(${JERRY_LIBC_NAME} PRIVATE ${INCLUDE_LIBC})
|
||||
target_include_directories(${JERRY_LIBC_NAME} SYSTEM PUBLIC "${CMAKE_SOURCE_DIR}/jerry-libc/include")
|
||||
|
||||
Reference in New Issue
Block a user