From 290eb2f9b0cc67df6d4efc7c6f6d51b5bf8b3a76 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Fri, 8 May 2015 19:09:28 +0300 Subject: [PATCH 1/2] Adding support to specify interfaces for external libraries other than libc. JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com --- CMakeLists.txt | 51 ++++++++++++++++++++++++++---------------- Makefile | 16 ++++++++----- plugins/CMakeLists.txt | 5 +++-- 3 files changed, 46 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c7161317de..60f563263f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,7 +80,8 @@ project (Jerry CXX C ASM) set(PLATFORM_EXT "NUTTX") set(EXTERNAL_BUILD TRUE) - set(EXTERNAL_LIBC_INTERFACE "UNDEFINED" CACHE STRING "Path to external libc's include directory") + set(EXTERNAL_LIBC_INTERFACE "UNDEFINED" CACHE STRING "Path to external libc include directory") + set(EXTERNAL_LIBS_INTERFACE "UNDEFINED" CACHE STRING "Path to external libraries' include directory") else() message(FATAL_ERROR "Platform is not supported") endif() @@ -91,17 +92,33 @@ project (Jerry CXX C ASM) # Should we use external libc? if(NOT DEFINED EXTERNAL_LIBC_INTERFACE OR EXTERNAL_LIBC_INTERFACE STREQUAL "UNDEFINED") - set(USE_EXTERNAL_LIBC FALSE) + set(USE_JERRY_LIBC TRUE) - if(${EXTERNAL_BUILD}) - message(FATAL_ERROR "Currently, external build with Jerry's libc is not supported") - endif() + # Jerry's libc doesn't support Nuttx platform + if(${PLATFORM} STREQUAL "NUTTX") + message(FATAL_ERROR "Nuttx build doesn't support Jerry's libc implementation") + endif() else() - if (NOT EXISTS "${EXTERNAL_LIBC_INTERFACE}") - message(FATAL_ERROR "External libc interface directory doesn't exist: ${EXTERNAL_LIBC_INTERFACE}") + set(USE_JERRY_LIBC FALSE) + + if(NOT EXISTS "${EXTERNAL_LIBC_INTERFACE}/stdlib.h") + message(FATAL_ERROR "It seems that external libc interface '${EXTERNAL_LIBC_INTERFACE}' doesn't provide stdlib.h header") endif() - set(USE_EXTERNAL_LIBC TRUE) + set(INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIBC_INTERFACE}) + endif() + +# Are there any interfaces for external libraries, other than libc, that should be registered? + if(DEFINED EXTERNAL_LIBS_INTERFACE AND NOT EXTERNAL_LIBS_INTERFACE STREQUAL "UNDEFINED") + set(INCLUDE_EXTERNAL_LIBS_INTERFACE ) + + foreach(EXTERNAL_LIB_INTERFACE ${EXTERNAL_LIBS_INTERFACE}) + if (NOT EXISTS "${EXTERNAL_LIB_INTERFACE}") + message(FATAL_ERROR "Interface directory of the external library doesn't exist: ${EXTERNAL_LIB_INTERFACE}") + endif() + + set(INCLUDE_EXTERNAL_LIBS_INTERFACE ${INCLUDE_EXTERNAL_LIBS_INTERFACE} ${EXTERNAL_LIB_INTERFACE}) + endforeach() endif() # Build modes @@ -163,9 +180,9 @@ project (Jerry CXX C ASM) "COMPACT_PROFILE" "COMPACT_PROFILE_MINIMAL") - # Nuttx - set(MODIFIERS_LISTS_NUTTX - ${MODIFIERS_LISTS_LINUX}) + # Nuttx + set(MODIFIERS_LISTS_NUTTX + ${MODIFIERS_LISTS_LINUX}) # Compiler / Linker flags set(COMPILE_FLAGS_JERRY "-fno-builtin") @@ -278,10 +295,8 @@ project (Jerry CXX C ASM) # Component targets # Jerry's libc - if(NOT ${USE_EXTERNAL_LIBC}) + if(${USE_JERRY_LIBC}) add_subdirectory(jerry-libc) - else() - set(INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIBC_INTERFACE}) endif() # Jerry's Core @@ -327,6 +342,7 @@ project (Jerry CXX C ASM) target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY}) target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE}) target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE}) + target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE}) target_link_libraries(${TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libgcc ${PREFIX_IMPORTED_LIB}libgcc_eh) @@ -357,6 +373,7 @@ project (Jerry CXX C ASM) target_compile_definitions(${MAIN_MODULE_TARGET_NAME} PRIVATE ${DEFINES_JERRY}) target_include_directories(${MAIN_MODULE_TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE}) target_include_directories(${MAIN_MODULE_TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE}) + target_include_directories(${MAIN_MODULE_TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE}) add_custom_target(${TARGET_NAME} ALL) add_dependencies(${TARGET_NAME} ${MAIN_MODULE_TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME}) @@ -369,11 +386,7 @@ project (Jerry CXX C ASM) $ $ > ${CMAKE_BINARY_DIR}/${TARGET_NAME}/list) - if(NOT ${USE_EXTERNAL_LIBC}) - if(${PLATFORM} STREQUAL "NUTTX") - message(Nuttx build doesn't support Jerry's libc implementation) - endif() - + if(${USE_JERRY_LIBC}) add_dependencies(${TARGET_NAME} ${LIBC_TARGET_NAME}) endif() diff --git a/Makefile b/Makefile index eec8d7fd86..5c77ad274a 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,11 @@ endif # External build configuration - EXTERNAL_LIBS_INTERFACE ?= $(shell pwd)/third-party/nuttx/include + # List of include paths for external libraries (semicolon-separated) + EXTERNAL_LIBS_INTERFACE ?= + # External libc interface + EXTERNAL_LIBC_INTERFACE ?= $(shell pwd)/third-party/nuttx/include + # Compiler to use for external build EXTERNAL_C_COMPILER ?= arm-none-eabi-gcc EXTERNAL_CXX_COMPILER ?= arm-none-eabi-g++ @@ -151,8 +155,9 @@ $(BUILD_DIRS_NATIVE): prerequisites (echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;) $(BUILD_DIRS_NUTTX): prerequisites - @ [ "$(EXTERNAL_LIBS_INTERFACE)" != "" ] && [ -x `which $(EXTERNAL_C_COMPILER)` ] && [ -x `which $(EXTERNAL_CXX_COMPILER)` ] || \ + @ [ "$(EXTERNAL_LIBC_INTERFACE)" != "" ] && [ -x `which $(EXTERNAL_C_COMPILER)` ] && [ -x `which $(EXTERNAL_CXX_COMPILER)` ] || \ (echo "Wrong external arguments."; \ + echo "EXTERNAL_LIBC_INTERFACE='$(EXTERNAL_LIBC_INTERFACE)'"; \ echo "EXTERNAL_LIBS_INTERFACE='$(EXTERNAL_LIBS_INTERFACE)'"; \ echo "EXTERNAL_C_COMPILER='$(EXTERNAL_C_COMPILER)'"; \ echo "EXTERNAL_CXX_COMPILER='$(EXTERNAL_CXX_COMPILER)'"; \ @@ -162,9 +167,10 @@ $(BUILD_DIRS_NUTTX): prerequisites cmake \ -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) \ -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_external.cmake \ - -DEXTERNAL_LIBC_INTERFACE=${EXTERNAL_LIBS_INTERFACE} \ - -DEXTERNAL_CMAKE_C_COMPILER=${EXTERNAL_C_COMPILER} \ - -DEXTERNAL_CMAKE_CXX_COMPILER=${EXTERNAL_CXX_COMPILER} \ + -DEXTERNAL_LIBC_INTERFACE="${EXTERNAL_LIBC_INTERFACE}" \ + -DEXTERNAL_LIBS_INTERFACE="${EXTERNAL_LIBS_INTERFACE}" \ + -DEXTERNAL_CMAKE_C_COMPILER="${EXTERNAL_C_COMPILER}" \ + -DEXTERNAL_CMAKE_CXX_COMPILER="${EXTERNAL_CXX_COMPILER}" \ ../../.. &>cmake.log || \ (echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 574defc87a..a26e7260d1 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -63,8 +63,7 @@ project (Jerry_Plugins CXX ASM) ${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0) # Nuttx - set(INCLUDE_THIRD_PARTY_NUTTX - ${EXTERNAL_LIBC_INTERFACE}) + set(INCLUDE_THIRD_PARTY_NUTTX ) # Sources file(GLOB SOURCE_PLUGINS @@ -108,6 +107,7 @@ project (Jerry_Plugins CXX ASM) target_compile_definitions(${TARGET_NAME}.lib PRIVATE ${DEFINES_PLUGINS}) target_include_directories(${TARGET_NAME}.lib PRIVATE ${INCLUDE_PLUGINS} ${INCLUDE_CORE_INTERFACE}) target_include_directories(${TARGET_NAME}.lib SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE}) + target_include_directories(${TARGET_NAME}.lib SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE}) add_dependencies(plugins-all ${TARGET_NAME}.lib) # Third-party MCU library @@ -117,6 +117,7 @@ project (Jerry_Plugins CXX ASM) PROPERTY COMPILE_FLAGS "${FLAGS_COMMON_${BUILD_MODE}}") target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} PRIVATE ${INCLUDE_PLUGINS}) target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE}) + target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE}) target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB}) endif() From 2852d93af60b4f3731c35451d419f874ba2e5fbd Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Fri, 8 May 2015 20:09:04 +0300 Subject: [PATCH 2/2] Fixing toolchain_external.cmake build configuration: generalizing it from Nuttx OS. JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com --- CMakeLists.txt | 6 +++--- Makefile | 1 + build/configs/toolchain_external.cmake | 3 ++- jerry-core/CMakeLists.txt | 10 +++++++--- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60f563263f..2b31bbd2a8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,8 +76,8 @@ project (Jerry CXX C ASM) option(STRIP_RELEASE_BINARY "Strip symbols from release binaries" OFF) set(MCU_SCRIPT_FILE "tests/blinky.js" CACHE STRING "Script to run on MCU") - elseif("${PLATFORM}" STREQUAL "NUTTX") - set(PLATFORM_EXT "NUTTX") + elseif("${PLATFORM}" STREQUAL "EXTERNAL") + set(PLATFORM_EXT "${CMAKE_SYSTEM_VERSION}") set(EXTERNAL_BUILD TRUE) set(EXTERNAL_LIBC_INTERFACE "UNDEFINED" CACHE STRING "Path to external libc include directory") @@ -95,7 +95,7 @@ project (Jerry CXX C ASM) set(USE_JERRY_LIBC TRUE) # Jerry's libc doesn't support Nuttx platform - if(${PLATFORM} STREQUAL "NUTTX") + if(${PLATFORM_EXT} STREQUAL "NUTTX") message(FATAL_ERROR "Nuttx build doesn't support Jerry's libc implementation") endif() else() diff --git a/Makefile b/Makefile index 5c77ad274a..1f81c7eb64 100644 --- a/Makefile +++ b/Makefile @@ -167,6 +167,7 @@ $(BUILD_DIRS_NUTTX): prerequisites cmake \ -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) \ -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_external.cmake \ + -DEXTERNAL_TARGET_NAME=NUTTX \ -DEXTERNAL_LIBC_INTERFACE="${EXTERNAL_LIBC_INTERFACE}" \ -DEXTERNAL_LIBS_INTERFACE="${EXTERNAL_LIBS_INTERFACE}" \ -DEXTERNAL_CMAKE_C_COMPILER="${EXTERNAL_C_COMPILER}" \ diff --git a/build/configs/toolchain_external.cmake b/build/configs/toolchain_external.cmake index 1bba1a3d73..5ad75cce1d 100644 --- a/build/configs/toolchain_external.cmake +++ b/build/configs/toolchain_external.cmake @@ -14,7 +14,8 @@ include(CMakeForceCompiler) -set(CMAKE_SYSTEM_NAME NUTTX) +set(CMAKE_SYSTEM_NAME EXTERNAL) +set(CMAKE_SYSTEM_VERSION ${EXTERNAL_TARGET_NAME}) CMAKE_FORCE_C_COMPILER(${EXTERNAL_CMAKE_C_COMPILER} GNU) CMAKE_FORCE_CXX_COMPILER(${EXTERNAL_CMAKE_CXX_COMPILER} GNU) diff --git a/jerry-core/CMakeLists.txt b/jerry-core/CMakeLists.txt index 9caead6d25..d24ac1b101 100644 --- a/jerry-core/CMakeLists.txt +++ b/jerry-core/CMakeLists.txt @@ -83,8 +83,12 @@ project (JerryCore CXX C ASM) math(EXPR MEM_HEAP_AREA_SIZE_16K "16 * 1024") set(DEFINES_JERRY_NUTTX CONFIG_MEM_HEAP_AREA_SIZE=${MEM_HEAP_AREA_SIZE_16K}) # MCU - math(EXPR MEM_HEAP_AREA_SIZE_16K "16 * 1024") - set(DEFINES_JERRY_MCU CONFIG_MEM_HEAP_AREA_SIZE=${MEM_HEAP_AREA_SIZE_16K}) + # stm32f3 + math(EXPR MEM_HEAP_AREA_SIZE_16K "16 * 1024") + set(DEFINES_JERRY_MCU_STM32F3 CONFIG_MEM_HEAP_AREA_SIZE=${MEM_HEAP_AREA_SIZE_16K}) + # stm32f4 + math(EXPR MEM_HEAP_AREA_SIZE_16K "16 * 1024") + set(DEFINES_JERRY_MCU_STM32F4 CONFIG_MEM_HEAP_AREA_SIZE=${MEM_HEAP_AREA_SIZE_16K}) # Include directories set(INCLUDE_CORE @@ -134,7 +138,7 @@ project (JerryCore CXX C ASM) endif() # Platform-specific configuration - set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${PLATFORM}}) + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${PLATFORM_EXT}}) # Targets declaration function(declare_targets_for_build_mode BUILD_MODE)