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:
Ruben Ayrapetyan 2015-05-08 19:09:28 +03:00
parent d0f30f5753
commit 290eb2f9b0
3 changed files with 46 additions and 26 deletions

View File

@ -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()

View File

@ -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;)

View File

@ -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()