mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Adding support to specify interfaces for external libraries other than libc.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
parent
d0f30f5753
commit
290eb2f9b0
@ -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)
|
||||
$<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()
|
||||
|
||||
|
||||
16
Makefile
16
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;)
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user