Skip to content

Commit 2c535f4

Browse files
Adding support to specify include interfaces for more than one external library.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan [email protected]
1 parent d0f30f5 commit 2c535f4

File tree

3 files changed

+40
-23
lines changed

3 files changed

+40
-23
lines changed

CMakeLists.txt

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ project (Jerry CXX C ASM)
8080
set(PLATFORM_EXT "NUTTX")
8181
set(EXTERNAL_BUILD TRUE)
8282

83-
set(EXTERNAL_LIBC_INTERFACE "UNDEFINED" CACHE STRING "Path to external libc's include directory")
83+
set(EXTERNAL_LIBS_INTERFACE "UNDEFINED" CACHE STRING "Path to external libraries' include directory")
8484
else()
8585
message(FATAL_ERROR "Platform is not supported")
8686
endif()
@@ -89,19 +89,37 @@ project (Jerry CXX C ASM)
8989
# Script to run on MCU
9090
set(MCU_SCRIPT_GENERATED_HEADER ${CMAKE_BINARY_DIR}/generated.h)
9191

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

9696
if(${EXTERNAL_BUILD})
9797
message(FATAL_ERROR "Currently, external build with Jerry's libc is not supported")
9898
endif()
9999
else()
100-
if (NOT EXISTS "${EXTERNAL_LIBC_INTERFACE}")
101-
message(FATAL_ERROR "External libc interface directory doesn't exist: ${EXTERNAL_LIBC_INTERFACE}")
102-
endif()
100+
set(USE_JERRY_LIBC TRUE)
101+
set(INCLUDE_EXTERNAL_LIBS_INTERFACE )
102+
103+
foreach(EXTERNAL_LIB_INTERFACE ${EXTERNAL_LIBS_INTERFACE})
104+
if (NOT EXISTS "${EXTERNAL_LIB_INTERFACE}")
105+
message(FATAL_ERROR "Interface directory of the external library doesn't exist: ${EXTERNAL_LIB_INTERFACE}")
106+
endif()
107+
108+
# stdlib.h is just one of standard headers that should be included in a standard-compliant libc
109+
if(EXISTS "${EXTERNAL_LIB_INTERFACE}/stdlib.h")
110+
set(USE_JERRY_LIBC FALSE)
111+
set(INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIB_INTERFACE})
112+
else()
113+
set(INCLUDE_EXTERNAL_LIBS_INTERFACE ${INCLUDE_EXTERNAL_LIBS_INTERFACE} ${EXTERNAL_LIB_INTERFACE})
114+
endif()
115+
endforeach()
116+
endif()
103117

104-
set(USE_EXTERNAL_LIBC TRUE)
118+
# Jerry's libc doesn't support Nuttx platform
119+
if(${USE_JERRY_LIBC})
120+
if(${PLATFORM} STREQUAL "NUTTX")
121+
message(FATAL_ERROR "Nuttx build doesn't support Jerry's libc implementation")
122+
endif()
105123
endif()
106124

107125
# Build modes
@@ -163,9 +181,9 @@ project (Jerry CXX C ASM)
163181
"COMPACT_PROFILE"
164182
"COMPACT_PROFILE_MINIMAL")
165183

166-
# Nuttx
167-
set(MODIFIERS_LISTS_NUTTX
168-
${MODIFIERS_LISTS_LINUX})
184+
# Nuttx
185+
set(MODIFIERS_LISTS_NUTTX
186+
${MODIFIERS_LISTS_LINUX})
169187

170188
# Compiler / Linker flags
171189
set(COMPILE_FLAGS_JERRY "-fno-builtin")
@@ -278,10 +296,8 @@ project (Jerry CXX C ASM)
278296

279297
# Component targets
280298
# Jerry's libc
281-
if(NOT ${USE_EXTERNAL_LIBC})
299+
if(${USE_JERRY_LIBC})
282300
add_subdirectory(jerry-libc)
283-
else()
284-
set(INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIBC_INTERFACE})
285301
endif()
286302

287303
# Jerry's Core
@@ -327,6 +343,7 @@ project (Jerry CXX C ASM)
327343
target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY})
328344
target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
329345
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
346+
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE})
330347
target_link_libraries(${TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME}
331348
${PREFIX_IMPORTED_LIB}libgcc ${PREFIX_IMPORTED_LIB}libgcc_eh)
332349

@@ -357,6 +374,7 @@ project (Jerry CXX C ASM)
357374
target_compile_definitions(${MAIN_MODULE_TARGET_NAME} PRIVATE ${DEFINES_JERRY})
358375
target_include_directories(${MAIN_MODULE_TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
359376
target_include_directories(${MAIN_MODULE_TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
377+
target_include_directories(${MAIN_MODULE_TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE})
360378

361379
add_custom_target(${TARGET_NAME} ALL)
362380
add_dependencies(${TARGET_NAME} ${MAIN_MODULE_TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME})
@@ -369,11 +387,7 @@ project (Jerry CXX C ASM)
369387
$<TARGET_FILE:${PLUGINS_TARGET_NAME}>
370388
$<TARGET_FILE:${CORE_TARGET_NAME}> > ${CMAKE_BINARY_DIR}/${TARGET_NAME}/list)
371389

372-
if(NOT ${USE_EXTERNAL_LIBC})
373-
if(${PLATFORM} STREQUAL "NUTTX")
374-
message(Nuttx build doesn't support Jerry's libc implementation)
375-
endif()
376-
390+
if(${USE_JERRY_LIBC})
377391
add_dependencies(${TARGET_NAME} ${LIBC_TARGET_NAME})
378392
endif()
379393

Makefile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@
6363
endif
6464

6565
# External build configuration
66-
EXTERNAL_LIBS_INTERFACE ?= $(shell pwd)/third-party/nuttx/include
66+
# List of include paths for external libraries (optionally including external libc)
67+
EXTERNAL_LIBS_INTERFACE ?= $(shell pwd)/third-party/nuttx/include
68+
# Compiler to use for external build
6769
EXTERNAL_C_COMPILER ?= arm-none-eabi-gcc
6870
EXTERNAL_CXX_COMPILER ?= arm-none-eabi-g++
6971

@@ -162,7 +164,7 @@ $(BUILD_DIRS_NUTTX): prerequisites
162164
cmake \
163165
-DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) \
164166
-DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_external.cmake \
165-
-DEXTERNAL_LIBC_INTERFACE=${EXTERNAL_LIBS_INTERFACE} \
167+
-DEXTERNAL_LIBS_INTERFACE=${EXTERNAL_LIBS_INTERFACE} \
166168
-DEXTERNAL_CMAKE_C_COMPILER=${EXTERNAL_C_COMPILER} \
167169
-DEXTERNAL_CMAKE_CXX_COMPILER=${EXTERNAL_CXX_COMPILER} \
168170
../../.. &>cmake.log || \

plugins/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ project (Jerry_Plugins CXX ASM)
6363
${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0)
6464

6565
# Nuttx
66-
set(INCLUDE_THIRD_PARTY_NUTTX
67-
${EXTERNAL_LIBC_INTERFACE})
66+
set(INCLUDE_THIRD_PARTY_NUTTX )
6867

6968
# Sources
7069
file(GLOB SOURCE_PLUGINS
@@ -108,6 +107,7 @@ project (Jerry_Plugins CXX ASM)
108107
target_compile_definitions(${TARGET_NAME}.lib PRIVATE ${DEFINES_PLUGINS})
109108
target_include_directories(${TARGET_NAME}.lib PRIVATE ${INCLUDE_PLUGINS} ${INCLUDE_CORE_INTERFACE})
110109
target_include_directories(${TARGET_NAME}.lib SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
110+
target_include_directories(${TARGET_NAME}.lib SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE})
111111
add_dependencies(plugins-all ${TARGET_NAME}.lib)
112112

113113
# Third-party MCU library
@@ -117,6 +117,7 @@ project (Jerry_Plugins CXX ASM)
117117
PROPERTY COMPILE_FLAGS "${FLAGS_COMMON_${BUILD_MODE}}")
118118
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} PRIVATE ${INCLUDE_PLUGINS})
119119
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
120+
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE})
120121

121122
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB})
122123
endif()

0 commit comments

Comments
 (0)