Skip to content

Commit 192a85d

Browse files
Introduce 'USE_COMPILER_DEFAULT_LIBC' for switching from jerry-libc to a libc, provided by compiler.
JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan [email protected]
1 parent 69bfcea commit 192a85d

File tree

2 files changed

+31
-15
lines changed

2 files changed

+31
-15
lines changed

CMakeLists.txt

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,12 @@ project (Jerry CXX C ASM)
9292
set(MCU_SCRIPT_GENERATED_HEADER ${CMAKE_BINARY_DIR}/generated.h)
9393

9494
# Should we use external libc?
95-
if(NOT DEFINED EXTERNAL_LIBC_INTERFACE OR EXTERNAL_LIBC_INTERFACE STREQUAL "UNDEFINED")
95+
if(DEFINED USE_COMPILER_DEFAULT_LIBC AND USE_COMPILER_DEFAULT_LIBC STREQUAL "YES")
96+
if(NOT EXTERNAL_LIBC_INTERFACE STREQUAL "" AND NOT EXTERNAL_LIBC_INTERFACE STREQUAL "UNDEFINED")
97+
message(FATAL_ERROR "EXTERNAL_LIBC_INTERFACE='${EXTERNAL_LIBC_INTERFACE}' should not be set in case compiler's default libc is used (USE_COMPILER_DEFAULT_LIBC=YES)")
98+
endif()
99+
set(USE_JERRY_LIBC FALSE)
100+
elseif(NOT DEFINED EXTERNAL_LIBC_INTERFACE OR EXTERNAL_LIBC_INTERFACE STREQUAL "UNDEFINED")
96101
set(USE_JERRY_LIBC TRUE)
97102

98103
# Jerry's libc doesn't support Nuttx platform
@@ -189,6 +194,11 @@ project (Jerry CXX C ASM)
189194
set(COMPILE_FLAGS_JERRY "-fno-builtin")
190195
set(LINKER_FLAGS_COMMON "-Wl,-z,noexecstack")
191196

197+
# Turn off linking to compiler's default libc, in case jerry-libc is used
198+
if(${USE_JERRY_LIBC})
199+
set(LINKER_FLAGS_COMMON "${LINKER_FLAGS_COMMON} -nostdlib")
200+
endif()
201+
192202
# LTO
193203
if("${ENABLE_LTO}" STREQUAL "ON")
194204
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -flto -fno-fat-lto-objects")
@@ -228,13 +238,13 @@ project (Jerry CXX C ASM)
228238
set(LINKER_FLAGS_COMMON_MCU_STM32F4 "-T${CMAKE_SOURCE_DIR}/third-party/STM32F4-Discovery_FW_V1.1.0/Project/Peripheral_Examples/FLASH_Program/TrueSTUDIO/FLASH_Program/stm32_flash.ld")
229239

230240
# Debug
231-
set(FLAGS_COMMON_DEBUG "-nostdlib")
241+
set(FLAGS_COMMON_DEBUG "")
232242

233243
# Release
234-
set(FLAGS_COMMON_RELEASE "-Os -nostdlib")
244+
set(FLAGS_COMMON_RELEASE "-Os")
235245

236246
# Unit tests
237-
set(FLAGS_COMMON_UNITTESTS "-O3 -nostdlib")
247+
set(FLAGS_COMMON_UNITTESTS "-O3")
238248

239249
# Include directories
240250
# Core interface
@@ -261,13 +271,6 @@ project (Jerry CXX C ASM)
261271
file(GLOB SOURCE_UNIT_TEST_MAIN_MODULES tests/unit/*.cpp)
262272

263273
# Imported libraries
264-
# libc
265-
add_library(${PREFIX_IMPORTED_LIB}libc SHARED IMPORTED)
266-
execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_COMMON_ARCH} -print-file-name=libc.so
267-
OUTPUT_VARIABLE IMPORTED_LIBC_LOCATION
268-
OUTPUT_STRIP_TRAILING_WHITESPACE)
269-
set_property(TARGET ${PREFIX_IMPORTED_LIB}libc
270-
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBC_LOCATION})
271274
# libgcc
272275
add_library(${PREFIX_IMPORTED_LIB}libgcc STATIC IMPORTED)
273276
execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_COMMON_ARCH} -print-file-name=libgcc.a
@@ -311,7 +314,9 @@ project (Jerry CXX C ASM)
311314

312315
function(declare_targets_for_build_mode BUILD_MODE)
313316
set(TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.${PLATFORM_L})
314-
set(LIBC_TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.jerry-libc.${PLATFORM_L}.lib)
317+
if (${USE_JERRY_LIBC})
318+
set(LIBC_TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.jerry-libc.${PLATFORM_L}.lib)
319+
endif()
315320

316321
function(declare_target_with_modifiers ) # modifiers are passed in ARGN implicit argument
317322
set(CORE_TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}})
@@ -420,7 +425,9 @@ project (Jerry CXX C ASM)
420425
set(TARGET_NAME unit-${TARGET_NAME})
421426

422427
set(CORE_TARGET_NAME unittests.jerry-core)
423-
set(LIBC_TARGET_NAME unittests.jerry-libc.${PLATFORM_L}.lib)
428+
if (${USE_JERRY_LIBC})
429+
set(LIBC_TARGET_NAME unittests.jerry-libc.${PLATFORM_L}.lib)
430+
endif ()
424431
set(FDLIBM_TARGET_NAME unittests.jerry-fdlibm${SUFFIX_THIRD_PARTY_LIB})
425432

426433
add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_MAIN})

Makefile

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,18 @@
6969
endif
7070

7171
# External build configuration
72+
# Flag, indicating whether to use compiler's default libc (YES / NO)
73+
USE_COMPILER_DEFAULT_LIBC ?= NO
7274
# List of include paths for external libraries (semicolon-separated)
7375
EXTERNAL_LIBS_INTERFACE ?=
7476
# External libc interface
75-
EXTERNAL_LIBC_INTERFACE ?= $(shell pwd)/third-party/nuttx/include
77+
ifeq ($(USE_COMPILER_DEFAULT_LIBC),YES)
78+
ifneq ($(EXTERNAL_LIBC_INTERFACE),)
79+
$(error EXTERNAL_LIBC_INTERFACE should not be specified in case compiler's default libc is used)
80+
endif
81+
else
82+
EXTERNAL_LIBC_INTERFACE ?= $(shell pwd)/third-party/nuttx/include
83+
endif
7684
# Compiler to use for external build
7785
EXTERNAL_C_COMPILER ?= arm-none-eabi-gcc
7886
EXTERNAL_CXX_COMPILER ?= arm-none-eabi-g++
@@ -165,7 +173,8 @@ $(BUILD_DIRS_NATIVE): prerequisites
165173
fi; \
166174
mkdir -p $@ && \
167175
cd $@ && \
168-
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LOG=$(LOG) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=$$TOOLCHAIN ../../.. &>cmake.log || \
176+
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LOG=$(LOG) -DENABLE_LTO=$(LTO) -DUSE_COMPILER_DEFAULT_LIBC=$(USE_COMPILER_DEFAULT_LIBC)\
177+
-DCMAKE_TOOLCHAIN_FILE=$$TOOLCHAIN ../../.. &>cmake.log || \
169178
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;); \
170179
echo "$$TOOLCHAIN" > toolchain.config
171180

0 commit comments

Comments
 (0)