@@ -80,7 +80,7 @@ project (Jerry CXX C ASM)
80
80
set (PLATFORM_EXT "NUTTX" )
81
81
set (EXTERNAL_BUILD TRUE )
82
82
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" )
84
84
else ()
85
85
message (FATAL_ERROR "Platform is not supported" )
86
86
endif ()
@@ -89,19 +89,37 @@ project (Jerry CXX C ASM)
89
89
# Script to run on MCU
90
90
set (MCU_SCRIPT_GENERATED_HEADER ${CMAKE_BINARY_DIR} /generated.h )
91
91
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 )
95
95
96
96
if (${EXTERNAL_BUILD} )
97
97
message (FATAL_ERROR "Currently, external build with Jerry's libc is not supported" )
98
98
endif ()
99
99
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 ()
103
117
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 ()
105
123
endif ()
106
124
107
125
# Build modes
@@ -163,9 +181,9 @@ project (Jerry CXX C ASM)
163
181
"COMPACT_PROFILE"
164
182
"COMPACT_PROFILE_MINIMAL" )
165
183
166
- # Nuttx
167
- set (MODIFIERS_LISTS_NUTTX
168
- ${MODIFIERS_LISTS_LINUX} )
184
+ # Nuttx
185
+ set (MODIFIERS_LISTS_NUTTX
186
+ ${MODIFIERS_LISTS_LINUX} )
169
187
170
188
# Compiler / Linker flags
171
189
set (COMPILE_FLAGS_JERRY "-fno-builtin" )
@@ -278,10 +296,8 @@ project (Jerry CXX C ASM)
278
296
279
297
# Component targets
280
298
# Jerry's libc
281
- if (NOT ${USE_EXTERNAL_LIBC } )
299
+ if (${USE_JERRY_LIBC } )
282
300
add_subdirectory (jerry-libc )
283
- else ()
284
- set (INCLUDE_LIBC_INTERFACE ${EXTERNAL_LIBC_INTERFACE} )
285
301
endif ()
286
302
287
303
# Jerry's Core
@@ -327,6 +343,7 @@ project (Jerry CXX C ASM)
327
343
target_compile_definitions (${TARGET_NAME} PRIVATE ${DEFINES_JERRY} )
328
344
target_include_directories (${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE} )
329
345
target_include_directories (${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE} )
346
+ target_include_directories (${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_EXTERNAL_LIBS_INTERFACE} )
330
347
target_link_libraries (${TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME}
331
348
${PREFIX_IMPORTED_LIB} libgcc ${PREFIX_IMPORTED_LIB} libgcc_eh )
332
349
@@ -357,6 +374,7 @@ project (Jerry CXX C ASM)
357
374
target_compile_definitions (${MAIN_MODULE_TARGET_NAME} PRIVATE ${DEFINES_JERRY} )
358
375
target_include_directories (${MAIN_MODULE_TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE} )
359
376
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} )
360
378
361
379
add_custom_target (${TARGET_NAME} ALL )
362
380
add_dependencies (${TARGET_NAME} ${MAIN_MODULE_TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} )
@@ -369,11 +387,7 @@ project (Jerry CXX C ASM)
369
387
$< TARGET_FILE:${PLUGINS_TARGET_NAME} >
370
388
$< TARGET_FILE:${CORE_TARGET_NAME} > > ${CMAKE_BINARY_DIR} /${TARGET_NAME}/list )
371
389
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} )
377
391
add_dependencies (${TARGET_NAME} ${LIBC_TARGET_NAME} )
378
392
endif ()
379
393
0 commit comments