1515cmake_minimum_required (VERSION 2.8.12)
1616project (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
0 commit comments