Skip to content

Preparations for support of non-nuttx externally built targets #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 8, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 34 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,12 @@ 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'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()
Expand All @@ -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_EXT} 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
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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})
Expand All @@ -369,11 +386,7 @@ project (Jerry CXX C ASM)
$<TARGET_FILE:${PLUGINS_TARGET_NAME}>
$<TARGET_FILE:${CORE_TARGET_NAME}> > ${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()

Expand Down
17 changes: 12 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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++

Expand Down Expand Up @@ -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)'"; \
Expand All @@ -162,9 +167,11 @@ $(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_TARGET_NAME=NUTTX \
-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;)

Expand Down
3 changes: 2 additions & 1 deletion build/configs/toolchain_external.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
10 changes: 7 additions & 3 deletions jerry-core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
5 changes: 3 additions & 2 deletions plugins/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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()
Expand Down