Skip to content

Commit

Permalink
Adding support to specify include interfaces for more than one extern…
Browse files Browse the repository at this point in the history
…al library.

JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan [email protected]
  • Loading branch information
ruben-ayrapetyan committed May 8, 2015
1 parent d0f30f5 commit 2c535f4
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 23 deletions.
52 changes: 33 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ 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_LIBS_INTERFACE "UNDEFINED" CACHE STRING "Path to external libraries' include directory")
else()
message(FATAL_ERROR "Platform is not supported")
endif()
Expand All @@ -89,19 +89,37 @@ project (Jerry CXX C ASM)
# Script to run on MCU
set(MCU_SCRIPT_GENERATED_HEADER ${CMAKE_BINARY_DIR}/generated.h)

# Should we use external libc?
if(NOT DEFINED EXTERNAL_LIBC_INTERFACE OR EXTERNAL_LIBC_INTERFACE STREQUAL "UNDEFINED")
set(USE_EXTERNAL_LIBC FALSE)
# Should we use external libs?
if(NOT DEFINED EXTERNAL_LIBS_INTERFACE OR EXTERNAL_LIBS_INTERFACE STREQUAL "UNDEFINED")
set(USE_JERRY_LIBC TRUE)

if(${EXTERNAL_BUILD})
message(FATAL_ERROR "Currently, external build with Jerry's libc is not supported")
endif()
else()
if (NOT EXISTS "${EXTERNAL_LIBC_INTERFACE}")
message(FATAL_ERROR "External libc interface directory doesn't exist: ${EXTERNAL_LIBC_INTERFACE}")
endif()
set(USE_JERRY_LIBC TRUE)
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()

# stdlib.h is just one of standard headers that should be included in a standard-compliant libc
if(EXISTS "${EXTERNAL_LIB_INTERFACE}/stdlib.h")
set(USE_JERRY_LIBC FALSE)
set(INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIB_INTERFACE})
else()
set(INCLUDE_EXTERNAL_LIBS_INTERFACE ${INCLUDE_EXTERNAL_LIBS_INTERFACE} ${EXTERNAL_LIB_INTERFACE})
endif()
endforeach()
endif()

set(USE_EXTERNAL_LIBC TRUE)
# Jerry's libc doesn't support Nuttx platform
if(${USE_JERRY_LIBC})
if(${PLATFORM} STREQUAL "NUTTX")
message(FATAL_ERROR "Nuttx build doesn't support Jerry's libc implementation")
endif()
endif()

# Build modes
Expand Down Expand Up @@ -163,9 +181,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 +296,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 +343,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 +374,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 +387,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
6 changes: 4 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,9 @@
endif

# External build configuration
EXTERNAL_LIBS_INTERFACE ?= $(shell pwd)/third-party/nuttx/include
# List of include paths for external libraries (optionally including external libc)
EXTERNAL_LIBS_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 @@ -162,7 +164,7 @@ $(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_LIBS_INTERFACE=${EXTERNAL_LIBS_INTERFACE} \
-DEXTERNAL_CMAKE_C_COMPILER=${EXTERNAL_C_COMPILER} \
-DEXTERNAL_CMAKE_CXX_COMPILER=${EXTERNAL_CXX_COMPILER} \
../../.. &>cmake.log || \
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

0 comments on commit 2c535f4

Please sign in to comment.