Skip to content

Commit e618541

Browse files
committed
Merge branch 'master' into objfreecb_dev
2 parents 98f26e6 + 17036c8 commit e618541

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1273
-399
lines changed

.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
build/bin
44
build/obj-*
5+
build/prerequisites
56
build/tests
67

78
# IDE related files
@@ -25,3 +26,11 @@ cscope.*
2526
# ctags and ID database
2627
tags
2728
ID
29+
30+
# Prerequisites
31+
.prerequisites
32+
third-party/STM32F3-Discovery_FW_V1.1.0
33+
third-party/STM32F4-Discovery_FW_V1.1.0
34+
third-party/nuttx
35+
third-party/vera++
36+
third-party/cppcheck

CMakeLists.txt

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
cmake_minimum_required (VERSION 2.8.12)
1616
project (Jerry CXX C ASM)
1717

18-
# Require g++ of version >= 4.8.0
18+
# Require g++ of version >= 4.7.0
1919
if(NOT CMAKE_COMPILER_IS_GNUCXX)
2020
message(FATAL_ERROR "g++ compiler is required")
2121
else()
2222
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
2323
OUTPUT_VARIABLE GNU_CXX_VERSION
2424
OUTPUT_STRIP_TRAILING_WHITESPACE)
2525

26-
if(${GNU_CXX_VERSION} VERSION_LESS 4.8.0)
27-
message(FATAL_ERROR "g++ compiler version 4.8.0 or higher required")
26+
if(${GNU_CXX_VERSION} VERSION_LESS 4.7.0)
27+
message(FATAL_ERROR "g++ compiler version 4.7.0 or higher required")
2828
endif()
2929
endif()
3030

@@ -97,6 +97,10 @@ project (Jerry CXX C ASM)
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()
103+
100104
set(USE_EXTERNAL_LIBC TRUE)
101105
endif()
102106

@@ -115,6 +119,7 @@ project (Jerry CXX C ASM)
115119
COMPACT_PROFILE
116120
COMPACT_PROFILE_MINIMAL
117121
FULL_PROFILE
122+
MINIMAL_FOOTPRINT
118123
MEMORY_STATISTICS)
119124

120125
# Profiles
@@ -127,6 +132,9 @@ project (Jerry CXX C ASM)
127132
# Minimal compact profile
128133
set(MODIFIER_SUFFIX_COMPACT_PROFILE_MINIMAL -cp_minimal)
129134

135+
# Minimal footprint
136+
set(MODIFIER_SUFFIX_MINIMAL_FOOTPRINT -mfp)
137+
130138
# Memory statistics
131139
set(MODIFIER_SUFFIX_MEMORY_STATISTICS -mem_stats)
132140

@@ -136,7 +144,10 @@ project (Jerry CXX C ASM)
136144
"FULL_PROFILE"
137145
"COMPACT_PROFILE"
138146
"COMPACT_PROFILE_MINIMAL"
147+
"FULL_PROFILE MINIMAL_FOOTPRINT"
148+
"FULL_PROFILE MINIMAL_FOOTPRINT MEMORY_STATISTICS"
139149
"FULL_PROFILE MEMORY_STATISTICS"
150+
"COMPACT_PROFILE_MINIMAL MINIMAL_FOOTPRINT"
140151
"COMPACT_PROFILE_MINIMAL MEMORY_STATISTICS")
141152

142153
# MCU
@@ -158,7 +169,7 @@ project (Jerry CXX C ASM)
158169

159170
# Compiler / Linker flags
160171
set(COMPILE_FLAGS_JERRY "-fno-builtin")
161-
set(LINKER_FLAGS_COMMON "")
172+
set(LINKER_FLAGS_COMMON "-Wl,-z,noexecstack")
162173

163174
# LTO
164175
if("${ENABLE_LTO}" STREQUAL "ON")
@@ -173,7 +184,7 @@ project (Jerry CXX C ASM)
173184
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -g -gdwarf-4")
174185

175186
# Warnings
176-
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -Wall -Wextra -Wpedantic -Wlogical-op")
187+
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -Wall -Wextra -pedantic -Wlogical-op")
177188
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -Wformat-nonliteral -Winit-self -Wno-stack-protector")
178189
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -Wconversion -Wsign-conversion -Wformat-security")
179190
set(COMPILE_FLAGS_JERRY "${COMPILE_FLAGS_JERRY} -Wmissing-declarations -Wno-attributes")
@@ -194,9 +205,9 @@ project (Jerry CXX C ASM)
194205
# Platform-specific
195206
# MCU
196207
# stm32f3
197-
set(LINKER_FLAGS_COMMON_MCU_STM32F3 "-T${CMAKE_SOURCE_DIR}/third-party/stm32f3.ld")
208+
set(LINKER_FLAGS_COMMON_MCU_STM32F3 "-T${CMAKE_SOURCE_DIR}/third-party/STM32F3-Discovery_FW_V1.1.0/Project/Peripheral_Examples/FLASH_Program/TrueSTUDIO/FLASH_Program/STM32_FLASH.ld")
198209
# stm32f4
199-
set(LINKER_FLAGS_COMMON_MCU_STM32F4 "-T${CMAKE_SOURCE_DIR}/third-party/stm32f4.ld")
210+
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")
200211

201212
# Debug
202213
set(FLAGS_COMMON_DEBUG "-nostdlib")
@@ -246,6 +257,19 @@ project (Jerry CXX C ASM)
246257
OUTPUT_STRIP_TRAILING_WHITESPACE)
247258
set_property(TARGET ${PREFIX_IMPORTED_LIB}libgcc
248259
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBGCC_LOCATION})
260+
# libgcc_eh
261+
add_library(${PREFIX_IMPORTED_LIB}libgcc_eh STATIC IMPORTED)
262+
execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_COMMON_ARCH} -print-file-name=libgcc_eh.a
263+
OUTPUT_VARIABLE IMPORTED_LIBGCC_EH_LOCATION
264+
OUTPUT_STRIP_TRAILING_WHITESPACE)
265+
if(EXISTS "${IMPORTED_LIBGCC_EH_LOCATION}")
266+
set_property(TARGET ${PREFIX_IMPORTED_LIB}libgcc_eh
267+
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBGCC_EH_LOCATION})
268+
else()
269+
# If libgcc_eh not found, reference libgcc instead
270+
set_property(TARGET ${PREFIX_IMPORTED_LIB}libgcc_eh
271+
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBGCC_LOCATION})
272+
endif()
249273

250274
# Platform-specific configuration
251275
set(MODIFIERS_LISTS ${MODIFIERS_LISTS_${PLATFORM_EXT}})
@@ -303,7 +327,8 @@ project (Jerry CXX C ASM)
303327
target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY})
304328
target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
305329
target_include_directories(${TARGET_NAME} SYSTEM PRIVATE ${INCLUDE_LIBC_INTERFACE})
306-
target_link_libraries(${TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libgcc)
330+
target_link_libraries(${TARGET_NAME} ${PLUGINS_TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME}
331+
${PREFIX_IMPORTED_LIB}libgcc ${PREFIX_IMPORTED_LIB}libgcc_eh)
307332

308333
add_cppcheck_target(${TARGET_NAME})
309334

@@ -383,7 +408,8 @@ project (Jerry CXX C ASM)
383408
set_property(TARGET ${TARGET_NAME}
384409
PROPERTY LINK_FLAGS "${COMPILE_FLAGS_JERRY} ${CXX_FLAGS_JERRY} ${FLAGS_COMMON_UNITTESTS} ${LINKER_FLAGS_COMMON}")
385410
target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
386-
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libc ${PREFIX_IMPORTED_LIB}libgcc)
411+
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libc
412+
${PREFIX_IMPORTED_LIB}libgcc ${PREFIX_IMPORTED_LIB}libgcc_eh)
387413

388414
add_cppcheck_target(${TARGET_NAME})
389415

Makefile

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export TARGET_RELEASE_MODES = release
7373
export TARGET_PC_SYSTEMS = linux
7474
export TARGET_NUTTX_SYSTEMS = nuttx
7575

76-
export TARGET_PC_MODS = cp cp_minimal mem_stats
76+
export TARGET_PC_MODS = cp cp_minimal mem_stats mfp cp_minimal-mfp mfp-mem_stats
7777
export TARGET_NUTTX_MODS = $(TARGET_PC_MODS)
7878

7979
export TARGET_MCU_MODS = cp cp_minimal
@@ -102,6 +102,7 @@ export CHECK_TARGETS = $(foreach __TARGET,$(JERRY_LINUX_TARGETS),$(__TARGET).che
102102
export FLASH_TARGETS = $(foreach __TARGET,$(JERRY_STM32F3_TARGETS) $(JERRY_STM32F4_TARGETS),$(__TARGET).flash)
103103

104104
export OUT_DIR = ./build/bin
105+
export PREREQUISITES_STATE_DIR = ./build/prerequisites
105106

106107
export SHELL=/bin/bash
107108

@@ -138,7 +139,7 @@ export SHELL=/bin/bash
138139

139140
all: precommit
140141

141-
$(BUILD_DIRS_NATIVE):
142+
$(BUILD_DIRS_NATIVE): prerequisites
142143
@ arch=`uname -m`; \
143144
if [ "$$arch" == "armv7l" ]; \
144145
then \
@@ -149,7 +150,7 @@ $(BUILD_DIRS_NATIVE):
149150
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_linux_$$arch.cmake ../../.. &>cmake.log || \
150151
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;)
151152

152-
$(BUILD_DIRS_NUTTX):
153+
$(BUILD_DIRS_NUTTX): prerequisites
153154
@ [ "$(EXTERNAL_LIBS_INTERFACE)" != "" ] && [ -x `which $(EXTERNAL_C_COMPILER)` ] && [ -x `which $(EXTERNAL_CXX_COMPILER)` ] || \
154155
(echo "Wrong external arguments."; \
155156
echo "EXTERNAL_LIBS_INTERFACE='$(EXTERNAL_LIBS_INTERFACE)'"; \
@@ -167,13 +168,13 @@ $(BUILD_DIRS_NUTTX):
167168
../../.. &>cmake.log || \
168169
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;)
169170

170-
$(BUILD_DIRS_STM32F3):
171+
$(BUILD_DIRS_STM32F3): prerequisites
171172
@ mkdir -p $@ && \
172173
cd $@ && \
173174
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_mcu_stm32f3.cmake ../../.. &>cmake.log || \
174175
(echo "CMake run failed. See "`pwd`"/cmake.log for details."; exit 1;)
175176

176-
$(BUILD_DIRS_STM32F4):
177+
$(BUILD_DIRS_STM32F4): prerequisites
177178
@ mkdir -p $@ && \
178179
cd $@ && \
179180
cmake -DENABLE_VALGRIND=$(VALGRIND) -DENABLE_LTO=$(LTO) -DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_mcu_stm32f4.cmake ../../.. &>cmake.log || \
@@ -279,7 +280,7 @@ pull: ./tools/git-scripts/pull.sh
279280
log: ./tools/git-scripts/log.sh
280281
@ ./tools/git-scripts/log.sh
281282

282-
precommit: clean
283+
precommit: clean prerequisites
283284
@ ./tools/precommit.sh "$(MAKE)" "$(OUT_DIR)" "$(PRECOMMIT_CHECK_TARGETS_LIST)"
284285

285286
unittests_run: unittests
@@ -291,4 +292,17 @@ unittests_run: unittests
291292
clean:
292293
@ rm -rf $(BUILD_DIR_PREFIX)* $(OUT_DIR)
293294

294-
.PHONY: clean build unittests_run $(BUILD_DIRS_ALL) $(JERRY_TARGETS) $(FLASH_TARGETS)
295+
prerequisites: $(PREREQUISITES_STATE_DIR)/.prerequisites
296+
297+
$(PREREQUISITES_STATE_DIR)/.prerequisites:
298+
@ echo "Setting up prerequisites... (log file: $(PREREQUISITES_STATE_DIR)/prerequisites.log)"
299+
@ mkdir -p $(PREREQUISITES_STATE_DIR)
300+
@ ./tools/prerequisites.sh $(PREREQUISITES_STATE_DIR)/.prerequisites >&$(PREREQUISITES_STATE_DIR)/prerequisites.log || \
301+
(echo "Prerequisites setup failed. See $(PREREQUISITES_STATE_DIR)/prerequisites.log for details."; exit 1;)
302+
@ echo "Prerequisites setup succeeded"
303+
304+
prerequisites_clean:
305+
@ ./tools/prerequisites.sh $(PREREQUISITES_STATE_DIR)/.prerequisites clean
306+
@ rm -rf $(PREREQUISITES_STATE_DIR)
307+
308+
.PHONY: prerequisites_clean prerequisites clean build unittests_run $(BUILD_DIRS_ALL) $(JERRY_TARGETS) $(FLASH_TARGETS)

build/static-checkers/add_cppcheck_for_target.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
# Cppcheck launcher
16-
set(CMAKE_CPPCHECK ${CMAKE_SOURCE_DIR}/tools/cppcheck.sh)
16+
set(CMAKE_CPPCHECK ${CMAKE_SOURCE_DIR}/tools/cppcheck/cppcheck.sh)
1717

1818
# Definition of cppcheck targets
1919
add_custom_target(cppcheck)

jerry-core/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ project (JerryCore CXX C ASM)
6666
CONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN
6767
CONFIG_ECMA_COMPACT_PROFILE_DISABLE_REGEXP_BUILTIN)
6868

69+
# Minimal footprint
70+
set(DEFINES_MINIMAL_FOOTPRINT
71+
CONFIG_ECMA_LCACHE_DISABLE
72+
CONFIG_VM_RUN_GC_AFTER_EACH_OPCODE)
73+
6974
# Memory statistics
7075
set(DEFINES_MEMORY_STATISTICS MEM_STATS)
7176

jerry-core/config.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@
5555
# define CONFIG_MEM_HEAP_AREA_SIZE (256 * 1024)
5656
#endif /* !CONFIG_MEM_HEAP_AREA_SIZE */
5757

58+
/**
59+
* Desired limit of heap usage
60+
*/
61+
#define CONFIG_MEM_HEAP_DESIRED_LIMIT (CONFIG_MEM_HEAP_AREA_SIZE / 32)
62+
5863
/**
5964
* Log2 of maximum possible offset in the heap
6065
*
@@ -127,6 +132,11 @@
127132
*/
128133
#define CONFIG_ECMA_STACK_FRAME_INLINED_VALUES_NUMBER (16)
129134

135+
/**
136+
* Disable ECMA lookup cache
137+
*/
138+
// #define CONFIG_ECMA_LCACHE_DISABLE
139+
130140
/**
131141
* Link Global Environment to an empty declarative lexical environment
132142
* instead of lexical environment bound to Global Object.
@@ -170,4 +180,9 @@
170180
*/
171181
#define CONFIG_EXTENSION_MAX_ARGUMENTS_IN_FUNCTION 16
172182

183+
/**
184+
* Run GC after execution of each opcode
185+
*/
186+
// #define CONFIG_VM_RUN_GC_AFTER_EACH_OPCODE
187+
173188
#endif /* !CONFIG_H */

0 commit comments

Comments
 (0)