From b7e374fedcdd6caca4a840693b332d31ea190bd2 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Mon, 9 Feb 2015 20:47:57 +0300 Subject: [PATCH] Switching to CMake for build. --- .gitignore | 1 + CMakeLists.txt | 640 ++++++++++++++++++++++++++ Makefile | 76 +-- Makefile.mk | 518 +-------------------- cmake/toolchain_linux_armv7l-hf.cmake | 19 + cmake/toolchain_linux_x86_64.cmake | 19 + cmake/toolchain_mcu_armv7l.cmake | 21 + tools/jerry_unittest.sh | 6 +- 8 files changed, 754 insertions(+), 546 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 cmake/toolchain_linux_armv7l-hf.cmake create mode 100644 cmake/toolchain_linux_x86_64.cmake create mode 100644 cmake/toolchain_mcu_armv7l.cmake diff --git a/.gitignore b/.gitignore index 93b583db3..fd61fff58 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Produced files out/ +build/ # IDE related files nbproject diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..41c4469b7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,640 @@ +# Copyright 2015 Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cmake_minimum_required (VERSION 2.8.12) +project (Jerry CXX C ASM) + +# Require g++ of version >= 4.8.0 + if(NOT CMAKE_COMPILER_IS_GNUCXX) + message(FATAL_ERROR "g++ compiler is required") + else() + execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion + OUTPUT_VARIABLE GNU_CXX_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(${GNU_CXX_VERSION} VERSION_LESS 4.8.0) + message(FATAL_ERROR "g++ compiler version 4.8.0 or higher required") + endif() + endif() + +# Use gcc-ar and gcc-ranlib to support LTO + set(CMAKE_AR ${CMAKE_C_COMPILER}-ar) + set(CMAKE_RANLIB ${CMAKE_C_COMPILER}-ranlib) + +# Remove rdynamic option + set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ) + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS ) + +# Options + option(STRIP_LINUX_RELEASE_BINARY "Strip symbols from Linux-targeted release binaries" ON) + +# Build modes + set(BUILD_MODES DEBUG RELEASE) + + # Debug + set(BUILD_MODE_PREFIX_DEBUG debug) + + # Release + set(BUILD_MODE_PREFIX_RELEASE release) + +# Modifiers + set(MODIFIERS + COMPACT_PROFILE + COMPACT_PROFILE_MINIMAL + FULL_PROFILE + MEMORY_STATISTICS + VALGRIND) + + # Profiles + # Full profile (default, so - no suffix) + set(MODIFIER_SUFFIX_FULL_PROFILE ) + set(MODIFIER_DEFINES_FULL_PROFILE DEFINES_JERRY_FULL_PROFILE) + set(MODIFIER_INCLUDE_DIRECTORIES_FULL_PROFILE ) + + # Compact profile + set(MODIFIER_SUFFIX_COMPACT_PROFILE -cp) + set(MODIFIER_DEFINES_COMPACT_PROFILE DEFINES_JERRY_COMPACT_PROFILE) + set(MODIFIER_INCLUDE_DIRECTORIES_COMPACT_PROFILE ) + + # Minimal compact profile + set(MODIFIER_SUFFIX_COMPACT_PROFILE_MINIMAL -cp_minimal) + set(MODIFIER_DEFINES_COMPACT_PROFILE_MINIMAL DEFINES_JERRY_COMPACT_PROFILE_MINIMAL) + set(MODIFIER_INCLUDE_DIRECTORIES_COMPACT_PROFILE_MINIMAL ) + + # Memory statistics + set(MODIFIER_SUFFIX_MEMORY_STATISTICS -mem_stats) + set(MODIFIER_DEFINES_MEMORY_STATISTICS DEFINES_JERRY_MEMORY_STATS) + set(MODIFIER_INCLUDE_DIRECTORIES_MEMORY_STATISTICS ) + + # Valgrind + set(MODIFIER_SUFFIX_VALGRIND -valgrind) + set(MODIFIER_DEFINES_VALGRIND DEFINES_JERRY_VALGRIND) + set(MODIFIER_INCLUDE_DIRECTORIES_VALGRIND INCLUDE_DIRECTORIES_THIRD_PARTY_VALGRIND) + +# Compiler flags + set(CXX_FLAGS_JERRY -std=c++11 -fno-exceptions -fno-rtti) + + # Turn off implicit template instantiation + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -fno-implicit-templates -fno-implicit-inline-templates) + + # Turn off stack protector + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -fno-stack-protector) + + # Debug information + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -g -gdwarf-4) + + # Warnings + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -Wall -Wextra -Wpedantic -Wlogical-op) + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -Wformat-nonliteral -Winit-self -Wstack-protector) + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -Wconversion -Wsign-conversion -Wformat-security) + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -Wmissing-declarations -Wno-attributes) + set(CXX_FLAGS_JERRY ${CXX_FLAGS_JERRY} -Werror -Wfatal-errors) + + # Architecture-specific + # x86_64 + # Workaround for gcc bug 64905 (x86_64) + set(CXX_FLAGS_JERRY_X86_64 -ffixed-rbp) + + # ARMv7 + set(CXX_FLAGS_JERRY_ARMV7 -mlittle-endian -mthumb) + + # Platform-specific + # MCU + # stm32f3 + set(CXX_FLAGS_COMMON_MCU_STM32F3 -mcpu=cortex-m4 -march=armv7e-m) + set(CXX_FLAGS_COMMON_MCU_STM32F3 ${CXX_FLAGS_COMMON_MCU_STM32F3} -mfpu=fpv4-sp-d16 -mfloat-abi=hard) + # stm32f4 + set(CXX_FLAGS_COMMON_MCU_STM32F4 -mcpu=cortex-m4 -march=armv7e-m) + set(CXX_FLAGS_COMMON_MCU_STM32F4 ${CXX_FLAGS_COMMON_MCU_STM32F4} -mfpu=fpv4-sp-d16 -mfloat-abi=hard) + + # Debug + set(CXX_FLAGS_COMMON_DEBUG ) + + # Release + set(CXX_FLAGS_COMMON_RELEASE -Os -flto) + + # Unit tests + set(CXX_FLAGS_UNIT_TEST + ${CXX_FLAGS_COMMON_RELEASE}) + +# Linker flags (flags are passed through set_target_properties, +# so they should be specified withstring constant, +# not list) + set(LINKER_FLAGS_JERRY "-nostdlib -lgcc") + + # Static build + set(LINKER_FLAGS_STATIC "-static") + + # Architecture-specific + # x86_64 + # Workaround for gcc bug 64905 (x86_64) + string(REPLACE ";" " " LINKER_FLAGS_JERRY_X86_64 "${CXX_FLAGS_JERRY_X86_64}") + + # ARMv7 + string(REPLACE ";" " " LINKER_FLAGS_JERRY_ARMV7 "${CXX_FLAGS_JERRY_ARMV7}") + +# Platform-specific + # MCU + # stm32f3 + set(LINKER_FLAGS_JERRY_MCU_STM32F3 "-T${CMAKE_SOURCE_DIR}/third-party/stm32f3.ld") + # stm32f4 + set(LINKER_FLAGS_JERRY_MCU_STM32F4 "-T${CMAKE_SOURCE_DIR}/third-party/stm32f4.ld") + + # Debug + set(LINKER_FLAGS_COMMON_DEBUG "") + + # Release + set(LINKER_FLAGS_COMMON_RELEASE "-Os -flto") + + # Unit tests + set(LINKER_FLAGS_UNIT_TEST + "${LINKER_FLAGS_COMMON_RELEASE} -lc") + +# Definitions + # Common + # Get version information from git + execute_process(COMMAND git symbolic-ref -q HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE JERRY_GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE JERRY_GIT_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE) + # Get build date + execute_process(COMMAND date +%d/%m/%Y + OUTPUT_VARIABLE JERRY_BUILD_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + + set(DEFINES_JERRY + JERRY_BUILD_DATE="${JERRY_BUILD_DATE}" + JERRY_COMMIT_HASH="${JERRY_GIT_COMMIT}" + JERRY_BRANCH_NAME="${JERRY_GIT_BRANCH}") + + # Debug + set(DEFINES_JERRY_DEBUG ) + + # Release + set(DEFINES_JERRY_RELEASE JERRY_NDEBUG) + + # Full profile + set(DEFINES_JERRY_FULL_PROFILE CONFIG_ECMA_NUMBER_TYPE=CONFIG_ECMA_NUMBER_FLOAT64) + + # Compact profile + set(DEFINES_JERRY_COMPACT_PROFILE + CONFIG_ECMA_COMPACT_PROFILE) + + # Minimal compact profile + set(DEFINES_JERRY_COMPACT_PROFILE_MINIMAL + CONFIG_ECMA_COMPACT_PROFILE + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ERROR_BUILTINS + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_MATH_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_DATE_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN + CONFIG_ECMA_COMPACT_PROFILE_DISABLE_REGEXP_BUILTIN) + + # Memory statistics + set(DEFINES_JERRY_MEMORY_STATS MEM_STATS) + + # Valgrind + set(DEFINES_JERRY_VALGRIND JERRY_VALGRIND) + + # Architecture-specific + # x86_64 + set(DEFINES_JERRY_X86_64 __TARGET_HOST_x64) + # ARMv7 + set(DEFINES_JERRY_ARMV7 __TARGET_HOST_ARMv7) + + # Platform-specific + # Linux + set(DEFINES_JERRY_LINUX __TARGET_HOST JERRY_SOURCE_BUFFER_SIZE=1048576) + # MCU + set(DEFINES_JERRY_MCU __TARGET_MCU) + # stm32f3 + set(DEFINES_JERRY_MCU_STM32F3 __TARGET_MCU_STM32F3) + # stm32f4 + set(DEFINES_JERRY_MCU_STM32F4 __TARGET_MCU_STM32F4) + + # Unit tests + set(DEFINES_UNIT_TEST + ${DEFINES_JERRY_FULL_PROFILE} + ${DEFINES_JERRY_DEBUG} + ${DEFINES_JERRY_VALGRIND}) + +# Include directories + set(INCLUDE_DIRECTORIES_JERRY + src + src/liballocator + src/libcoreint + src/libecmabuiltins + src/libecmaobjects + src/libecmaoperations + src/libintstructs + src/libjsparser + src/liboptimizer + src/libperipherals + src/libruntime) + + # Platform-specific + # Linux + set(INCLUDE_DIRECTORIES_JERRY_LINUX + src/libruntime/target/linux) + # MCU + # STM32F3 + set(INCLUDE_DIRECTORIES_JERRY_MCU_STM32F3 + src/libruntime/target/stm32f3) + # STM32F4 + set(INCLUDE_DIRECTORIES_JERRY_MCU_STM32F4 + src/libruntime/target/stm32f4) + + # Third-party + # Valgrind + set(INCLUDE_DIRECTORIES_THIRD_PARTY_VALGRIND third-party/valgrind) + + # Platform-specific + # MCU + # STM32F3 + set(INCLUDE_DIRECTORIES_THIRD_PARTY_MCU_STM32F3 + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Include + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/inc + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Include + third-party/STM32F3-Discovery_FW_V1.1.0) + # STM32F4 + set(INCLUDE_DIRECTORIES_THIRD_PARTY_MCU_STM32F4 + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Include + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/Include + third-party/STM32F4-Discovery_FW_V1.1.0) + + # Unit tests + set(INCLUDE_DIRECTORIES_UNIT_TEST + tests/unit + ${INCLUDE_DIRECTORIES_THIRD_PARTY_VALGRIND}) + +# Sources + # Jerry + set(SOURCE_JERRY_LIB_ALLOCATOR # liballocator + src/liballocator/mem-allocator.cpp + src/liballocator/mem-heap.cpp + src/liballocator/mem-pool.cpp + src/liballocator/mem-poolman.cpp) + + set(SOURCE_JERRY_LIB_COREINT # libcoreint + src/libcoreint/interpreter.cpp + src/libcoreint/opcodes-agnostic.cpp + src/libcoreint/opcodes.cpp + src/libcoreint/opcodes-ecma-arithmetics.cpp + src/libcoreint/opcodes-ecma-bitwise.cpp + src/libcoreint/opcodes-ecma-equality.cpp + src/libcoreint/opcodes-ecma-relational.cpp + src/libcoreint/opcodes-ecma-try-catch-finally.cpp + src/libcoreint/opcodes-helpers-variables.cpp + src/libcoreint/opcodes-native-call.cpp + src/libcoreint/opcodes-varg.cpp) + + set(SOURCE_JERRY_LIB_ECMABUILTINS # libecmabuiltins + src/libecmabuiltins/ecma-builtin-array.cpp + src/libecmabuiltins/ecma-builtin-array-prototype.cpp + src/libecmabuiltins/ecma-builtin-boolean.cpp + src/libecmabuiltins/ecma-builtin-boolean-prototype.cpp + src/libecmabuiltins/ecma-builtin-compact-profile-error.cpp + src/libecmabuiltins/ecma-builtin-error.cpp + src/libecmabuiltins/ecma-builtin-error-prototype.cpp + src/libecmabuiltins/ecma-builtin-evalerror.cpp + src/libecmabuiltins/ecma-builtin-evalerror-prototype.cpp + src/libecmabuiltins/ecma-builtin-function.cpp + src/libecmabuiltins/ecma-builtin-function-prototype.cpp + src/libecmabuiltins/ecma-builtin-global.cpp + src/libecmabuiltins/ecma-builtin-math.cpp + src/libecmabuiltins/ecma-builtin-number.cpp + src/libecmabuiltins/ecma-builtin-number-prototype.cpp + src/libecmabuiltins/ecma-builtin-object.cpp + src/libecmabuiltins/ecma-builtin-object-prototype.cpp + src/libecmabuiltins/ecma-builtin-rangeerror.cpp + src/libecmabuiltins/ecma-builtin-rangeerror-prototype.cpp + src/libecmabuiltins/ecma-builtin-referenceerror.cpp + src/libecmabuiltins/ecma-builtin-referenceerror-prototype.cpp + src/libecmabuiltins/ecma-builtins.cpp + src/libecmabuiltins/ecma-builtin-string.cpp + src/libecmabuiltins/ecma-builtin-string-prototype.cpp + src/libecmabuiltins/ecma-builtin-syntaxerror.cpp + src/libecmabuiltins/ecma-builtin-syntaxerror-prototype.cpp + src/libecmabuiltins/ecma-builtin-typeerror.cpp + src/libecmabuiltins/ecma-builtin-typeerror-prototype.cpp + src/libecmabuiltins/ecma-builtin-type-error-thrower.cpp + src/libecmabuiltins/ecma-builtin-urierror.cpp + src/libecmabuiltins/ecma-builtin-urierror-prototype.cpp) + + set(SOURCE_JERRY_LIB_ECMAOBJECTS # libecmaobjects + src/libecmaobjects/ecma-alloc.cpp + src/libecmaobjects/ecma-gc.cpp + src/libecmaobjects/ecma-helpers.cpp + src/libecmaobjects/ecma-helpers-conversion.cpp + src/libecmaobjects/ecma-helpers-number.cpp + src/libecmaobjects/ecma-helpers-string.cpp + src/libecmaobjects/ecma-helpers-value.cpp + src/libecmaobjects/ecma-helpers-values-collection.cpp + src/libecmaobjects/ecma-lcache.cpp + src/libecmaobjects/ecma-stack.cpp) + + set(SOURCE_JERRY_LIB_ECMAOPERATIONS # libecmaoperations + src/libecmaoperations/ecma-array-object.cpp + src/libecmaoperations/ecma-boolean-object.cpp + src/libecmaoperations/ecma-comparison.cpp + src/libecmaoperations/ecma-conversion.cpp + src/libecmaoperations/ecma-exceptions.cpp + src/libecmaoperations/ecma-function-object.cpp + src/libecmaoperations/ecma-get-put-value.cpp + src/libecmaoperations/ecma-init-finalize.cpp + src/libecmaoperations/ecma-lex-env.cpp + src/libecmaoperations/ecma-number-arithmetic.cpp + src/libecmaoperations/ecma-number-object.cpp + src/libecmaoperations/ecma-objects-arguments.cpp + src/libecmaoperations/ecma-objects.cpp + src/libecmaoperations/ecma-objects-general.cpp + src/libecmaoperations/ecma-reference.cpp + src/libecmaoperations/ecma-string-object.cpp) + + set(SOURCE_JERRY_LIB_INTSTRUCTS # libintstructs + src/libintstructs/array-list.cpp + src/libintstructs/hash-table.cpp + src/libintstructs/linked-list.cpp + src/libintstructs/literal.cpp + src/libintstructs/lp-string.cpp) + + set(SOURCE_JERRY_LIB_JSPARSER # libjsparser + src/libjsparser/lexer.cpp + src/libjsparser/opcodes-dumper.cpp + src/libjsparser/parser.cpp + src/libjsparser/scopes-tree.cpp + src/libjsparser/syntax-errors.cpp) + + set(SOURCE_JERRY_LIB_OPTIMIZER # liboptimizer + src/liboptimizer/deserializer.cpp + src/liboptimizer/lit-id-hash-table.cpp + src/liboptimizer/optimizer-passes.cpp + src/liboptimizer/pretty-printer.cpp + src/liboptimizer/serializer.cpp) + + set(SOURCE_JERRY_LIB_PERIPHERALS # libperipherals + src/libperipherals/actuators.cpp + src/libperipherals/common-io.cpp + src/libperipherals/sensors.cpp) + + set(SOURCE_JERRY_LIB_RUNTIME # libruntime + src/libruntime/jerry-exit.cpp + src/libruntime/jerry-libc.cpp + src/libruntime/jerry-libc-printf.cpp + src/libruntime/jrt-bit-fields.cpp) + + set(SOURCE_JERRY_LIB # all Jerry library's source + # that is not platform-specific + ${SOURCE_JERRY_LIB_ALLOCATOR} + ${SOURCE_JERRY_LIB_COREINT} + ${SOURCE_JERRY_LIB_ECMABUILTINS} + ${SOURCE_JERRY_LIB_ECMAOBJECTS} + ${SOURCE_JERRY_LIB_ECMAOPERATIONS} + ${SOURCE_JERRY_LIB_INTSTRUCTS} + ${SOURCE_JERRY_LIB_JSPARSER} + ${SOURCE_JERRY_LIB_OPTIMIZER} + ${SOURCE_JERRY_LIB_PERIPHERALS} + ${SOURCE_JERRY_LIB_RUNTIME}) + + set(SOURCE_JERRY_MAIN # main Jerry module + src/main.cpp) + + # Platform-specific + # Linux + set(SOURCE_JERRY_LIB_RUNTIME_LINUX + src/libruntime/target/linux/jerry-libc.cpp + src/libruntime/target/linux/jerry-assert.cpp + src/libruntime/target/linux/jerry-asm.S) + # MCU + # stm32f3 + set(SOURCE_JERRY_LIB_RUNTIME_STM32F3 + src/libruntime/target/stm32f3/jerry-libc.cpp + src/libruntime/target/stm32f3/jerry-assert.cpp + src/libruntime/target/stm32f3/abi.S) + # stm32f4 + set(SOURCE_JERRY_LIB_RUNTIME_STM32F4 + src/libruntime/target/stm32f4/jerry-libc.cpp + src/libruntime/target/stm32f4/jerry-assert.cpp + src/libruntime/target/stm32f4/abi.S) + + # Third-party + # Platform-specific + # MCU + # stm32f3 + set(SOURCE_THIRD_PARTY_MCU_STM32F3 + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/gcc_ride7/startup_stm32f30x.s + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/system_stm32f30x.c + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_tim.c + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_gpio.c + third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_rcc.c) + # stm32f4 + set(SOURCE_THIRD_PARTY_MCU_STM32F4 + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f4xx.s + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c + third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c) + + # Unit tests main modules + set(SOURCE_UNIT_TEST_MAIN_MODULES + tests/unit/test_heap.cpp + tests/unit/test_number_to_string.cpp + tests/unit/test_pool.cpp + tests/unit/test_poolman.cpp + tests/unit/test_preparser.cpp + tests/unit/test_string_to_number.cpp) + +# Architecture-specific configuration + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") + set(CXX_FLAGS_COMMON_ARCH ${CXX_FLAGS_JERRY_X86_64}) + set(LINKER_FLAGS_JERRY "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_JERRY_X86_64}") + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_X86_64}) + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7l") + set(CXX_FLAGS_COMMON_ARCH ${CXX_FLAGS_JERRY_ARMV7}) + set(LINKER_FLAGS_JERRY "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_JERRY_ARMV7}") + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_ARMV7}) + else() + message(FATAL_ERROR "Unsupported machine architecture") + endif() + +# Platform-specific configuration + if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_LINUX}) + elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Generic") + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_MCU}) + else() + message(FATAL_ERROR "Platform is not supported") + endif() + +# Targets declaration + if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + function(declare_targets_for_build_mode BUILD_MODE MODIFIERS_LISTS) + set(TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.linux) + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${BUILD_MODE}}) + set(LINKER_FLAGS_JERRY "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_COMMON_${BUILD_MODE}}") + + function(declare_target_with_modifiers ) # modifiers are passed in ARGN implicit argument + foreach(MODIFIER ${ARGN}) + set(TARGET_NAME ${TARGET_NAME}${MODIFIER_SUFFIX_${MODIFIER}}) + set(DEFINES_JERRY ${DEFINES_JERRY} ${${MODIFIER_DEFINES_${MODIFIER}}}) + set(INCLUDE_DIRECTORIES_JERRY ${INCLUDE_DIRECTORIES_JERRY} ${${MODIFIER_INCLUDE_DIRECTORIES_${MODIFIER}}}) + endforeach() + + add_library(${TARGET_NAME}.lib STATIC ${SOURCE_JERRY_LIB} ${SOURCE_JERRY_LIB_RUNTIME_LINUX}) + target_compile_options(${TARGET_NAME}.lib PRIVATE ${CXX_FLAGS_JERRY} ${CXX_FLAGS_COMMON_ARCH} ${CXX_FLAGS_COMMON_${BUILD_MODE}}) + target_compile_definitions(${TARGET_NAME}.lib PRIVATE ${DEFINES_JERRY}) + target_include_directories(${TARGET_NAME}.lib PRIVATE ${INCLUDE_DIRECTORIES_JERRY}) + + add_executable(${TARGET_NAME} ${SOURCE_JERRY_MAIN}) + target_compile_options(${TARGET_NAME} PRIVATE ${CXX_FLAGS_JERRY} ${CXX_FLAGS_COMMON_ARCH} ${CXX_FLAGS_COMMON_${BUILD_MODE}}) + set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_STATIC}") + target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY}) + target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRECTORIES_JERRY}) + target_link_libraries(${TARGET_NAME} ${TARGET_NAME}.lib) + + if(${STRIP_LINUX_RELEASE_BINARY} STREQUAL "ON") + add_custom_command(TARGET ${TARGET_NAME} + POST_BUILD + COMMAND ${CMAKE_STRIP} $) + endif() + endfunction() + + foreach(MODIFIERS_LIST ${MODIFIERS_LISTS}) + separate_arguments(MODIFIERS_LIST) + + declare_target_with_modifiers(${MODIFIERS_LIST}) + endforeach() + endfunction() + + set(DEBUG_AND_RELEASE_MODIFIERS_LISTS + "FULL_PROFILE" + "COMPACT_PROFILE" + "COMPACT_PROFILE_MINIMAL" + "FULL_PROFILE MEMORY_STATISTICS" + "COMPACT_PROFILE_MINIMAL MEMORY_STATISTICS" + "FULL_PROFILE VALGRIND" + "COMPACT_PROFILE_MINIMAL VALGRIND" + "COMPACT_PROFILE VALGRIND") + declare_targets_for_build_mode(DEBUG "${DEBUG_AND_RELEASE_MODIFIERS_LISTS}") + declare_targets_for_build_mode(RELEASE "${DEBUG_AND_RELEASE_MODIFIERS_LISTS}") + + # Unit tests declaration + add_custom_target(unittests) + + add_library(unit_tests.lib STATIC ${SOURCE_JERRY_LIB} ${SOURCE_JERRY_LIB_RUNTIME_LINUX}) + target_compile_options(unit_tests.lib PRIVATE ${CXX_FLAGS_JERRY} ${CXX_FLAGS_COMMON_ARCH} ${CXX_FLAGS_UNIT_TEST}) + target_compile_definitions(unit_tests.lib PRIVATE ${DEFINES_JERRY} ${DEFINES_UNIT_TEST}) + target_include_directories(unit_tests.lib PRIVATE ${INCLUDE_DIRECTORIES_JERRY} ${INCLUDE_DIRECTORIES_UNIT_TEST}) + + foreach(SOURCE_UNIT_TEST_MAIN ${SOURCE_UNIT_TEST_MAIN_MODULES}) + get_filename_component(TARGET_NAME ${SOURCE_UNIT_TEST_MAIN} NAME_WE) + set(TARGET_NAME unit_${TARGET_NAME}) + + add_executable(${TARGET_NAME} ${SOURCE_UNIT_TEST_MAIN}) + target_compile_options(${TARGET_NAME} PRIVATE + ${CXX_FLAGS_JERRY} + ${CXX_FLAGS_COMMON_ARCH} + ${CXX_FLAGS_UNIT_TEST}) + set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_UNIT_TEST}") + target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY} ${DEFINES_UNIT_TEST}) + target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRECTORIES_JERRY} ${INCLUDE_DIRECTORIES_UNIT_TEST}) + target_link_libraries(${TARGET_NAME} unit_tests.lib) + + add_dependencies(unittests ${TARGET_NAME}) + endforeach() + elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Generic") + function(declare_target_for_platform PLATFORM) # build modes are passed in ARGN + string(TOLOWER ${PLATFORM} PLATFORM_L) + set(TARGET_NAME ${PLATFORM_L}) + set(BUILD_MODES_FOR_PLATFORM ${ARGN}) + + function(declare_targets_for_build_mode BUILD_MODE) + set(TARGET_NAME ${BUILD_MODE_PREFIX_${BUILD_MODE}}.${TARGET_NAME}) + set(DEFINES_JERRY ${DEFINES_JERRY} ${DEFINES_JERRY_${BUILD_MODE}}) + set(LINKER_FLAGS_JERRY "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_COMMON_${BUILD_MODE}}") + + function(declare_target_with_modifiers ) # modifiers are passed in ARGN + foreach(MODIFIER ${ARGN}) + set(TARGET_NAME ${TARGET_NAME}${MODIFIER_SUFFIX_${MODIFIER}}) + set(DEFINES_JERRY ${DEFINES_JERRY} ${${MODIFIER_DEFINES_${MODIFIER}}}) + set(INCLUDE_DIRECTORIES_JERRY ${INCLUDE_DIRECTORIES_JERRY} ${${MODIFIER_INCLUDE_DIRECTORIES_${MODIFIER}}}) + endforeach() + + # Jerry library + add_library(${TARGET_NAME}.jerry.lib STATIC ${SOURCE_JERRY_LIB} ${SOURCE_JERRY_LIB_RUNTIME_${PLATFORM}}) + target_compile_options(${TARGET_NAME}.jerry.lib PRIVATE + ${CXX_FLAGS_JERRY} + ${CXX_FLAGS_COMMON_${BUILD_MODE}} + ${CXX_FLAGS_COMMON_ARCH} + ${CXX_FLAGS_COMMON_MCU_${PLATFORM}}) + target_compile_definitions(${TARGET_NAME}.jerry.lib PRIVATE ${DEFINES_JERRY} ${DEFINES_JERRY_MCU_${PLATFORM}}) + target_include_directories(${TARGET_NAME}.jerry.lib PRIVATE + ${INCLUDE_DIRECTORIES_JERRY} + ${INCLUDE_DIRECTORIES_JERRY_MCU_${PLATFORM}} + ${INCLUDE_DIRECTORIES_THIRD_PARTY_MCU_${PLATFORM}}) + + # Third-party MCU library + add_library(${TARGET_NAME}.third_party.lib STATIC + ${SOURCE_THIRD_PARTY_MCU_${PLATFORM}}) + target_compile_options(${TARGET_NAME}.third_party.lib PRIVATE + ${CXX_FLAGS_COMMON_${BUILD_MODE}} + ${CXX_FLAGS_COMMON_ARCH} + ${CXX_FLAGS_COMMON_MCU_${PLATFORM}}) + target_include_directories(${TARGET_NAME}.third_party.lib PRIVATE + ${INCLUDE_DIRECTORIES_THIRD_PARTY_MCU_${PLATFORM}}) + + add_executable(${TARGET_NAME} ${SOURCE_JERRY_MAIN}) + target_compile_options(${TARGET_NAME} PRIVATE + ${CXX_FLAGS_JERRY} + ${CXX_FLAGS_COMMON_${BUILD_MODE}} + ${CXX_FLAGS_COMMON_ARCH} + ${CXX_FLAGS_COMMON_MCU_${PLATFORM}}) + set_property(TARGET ${TARGET_NAME} PROPERTY LINK_FLAGS + "${LINKER_FLAGS_JERRY} ${LINKER_FLAGS_STATIC} ${LINKER_FLAGS_JERRY_MCU_${PLATFORM}}") + target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY} ${DEFINES_JERRY_MCU_${PLATFORM}}) + target_include_directories(${TARGET_NAME} PRIVATE + ${INCLUDE_DIRECTORIES_JERRY} + ${INCLUDE_DIRECTORIES_JERRY_MCU_${PLATFORM}} + ${INCLUDE_DIRECTORIES_THIRD_PARTY_MCU_${PLATFORM}}) + target_link_libraries(${TARGET_NAME} ${TARGET_NAME}.jerry.lib ${TARGET_NAME}.third_party.lib) + + add_custom_target(${TARGET_NAME}.flash + COMMAND ${CMAKE_OBJCOPY} -Obinary $ $.bin + # Flash, ignoring failures to remove temporary flashable binary any way + COMMAND st-flash write $.bin 0x08000000 || /bin/true + COMMAND rm $.bin) + endfunction() + + declare_target_with_modifiers(COMPACT_PROFILE) + declare_target_with_modifiers(COMPACT_PROFILE_MINIMAL) + endfunction() + + foreach(BUILD_MODE ${BUILD_MODES_FOR_PLATFORM}) + declare_targets_for_build_mode(${BUILD_MODE}) + endforeach() + endfunction() + + declare_target_for_platform(STM32F3 RELEASE) + declare_target_for_platform(STM32F4 DEBUG RELEASE) + else() + message(FATAL_ERROR "Platform is not supported") + endif() diff --git a/Makefile b/Makefile index 5b85c632c..09d4d2344 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# Copyright 2014 Samsung Electronics Co., Ltd. +# Copyright 2014-2015 Samsung Electronics Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -33,11 +33,7 @@ # flash - flash specified mcu target binary # # -# Unit test target: unittests -# -# Options -# -# dwarf4=1 - use DWARF v4 format for debug information +# Unit test target: unittests_run # export TARGET_DEBUG_MODES = debug @@ -45,43 +41,58 @@ export TARGET_RELEASE_MODES = release export TARGET_PC_SYSTEMS = linux export TARGET_MCU_SYSTEMS = $(addprefix stm32f,3 4) -export TARGET_PC_MODS = sanitize valgrind cp cp_minimal mem_stats \ - cp-valgrind +export TARGET_PC_MODS = valgrind cp cp_minimal mem_stats cp-valgrind -export TARGET_MCU_MODS = cp_minimal +export TARGET_MCU_MODS = cp cp_minimal export TARGET_PC_SYSTEMS_MODS = $(TARGET_PC_SYSTEMS) \ $(foreach __MOD,$(TARGET_PC_MODS),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS),$(__SYSTEM)-$(__MOD))) -export TARGET_MCU_SYSTEMS_MODS = $(TARGET_MCU_SYSTEMS) \ - $(foreach __MOD,$(TARGET_MCU_MODS),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS),$(__SYSTEM)-$(__MOD))) +export TARGET_MCU_SYSTEMS_MODS = $(foreach __MOD,$(TARGET_MCU_MODS),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS),$(__SYSTEM)-$(__MOD))) # Target list -export JERRY_TARGETS = $(foreach __MODE,$(TARGET_DEBUG_MODES),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) \ - $(foreach __MODE,$(TARGET_RELEASE_MODES),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) \ - $(foreach __MODE,$(TARGET_RELEASE_MODES),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) +export JERRY_LINUX_TARGETS = $(foreach __MODE,$(TARGET_DEBUG_MODES),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) \ + $(foreach __MODE,$(TARGET_RELEASE_MODES),$(foreach __SYSTEM,$(TARGET_PC_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) +export JERRY_MCU_TARGETS = $(foreach __MODE,$(TARGET_RELEASE_MODES),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))) +export JERRY_TARGETS = $(JERRY_LINUX_TARGETS) $(JERRY_MCU_TARGETS) -export TESTS_TARGET = unittests export CHECK_TARGETS = $(foreach __TARGET,$(JERRY_TARGETS),$(__TARGET).check) export FLASH_TARGETS = $(foreach __TARGET,$(foreach __MODE,$(TARGET_RELEASE_MODES),$(foreach __SYSTEM,$(TARGET_MCU_SYSTEMS_MODS),$(__MODE).$(__SYSTEM))),$(__TARGET).flash) export OUT_DIR = ./out -export UNITTESTS_SRC_DIR = ./tests/unit +export BUILD_DIR = ./build export SHELL=/bin/bash -export dwarf4 -export echo -export todo -export fixme -export color -export dbgsyms -export noopt -export nostaticcheck - -build: clean $(JERRY_TARGETS) - all: precommit +$(BUILD_DIR)/native: + @ mkdir -p $(BUILD_DIR)/native + @ cd $(BUILD_DIR)/native; cmake ../.. &>cmake.log + +$(BUILD_DIR)/mcu: + @ mkdir -p $(BUILD_DIR)/mcu + @ cd $(BUILD_DIR)/mcu; cmake -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain_mcu_armv7l.cmake ../.. &>cmake.log + +$(JERRY_LINUX_TARGETS): $(BUILD_DIR)/native + @ mkdir -p out/$@ + @ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>out/$@/make.log + @ cp $(BUILD_DIR)/native/$@ out/$@/jerry + +unittests: $(BUILD_DIR)/native + @ mkdir -p out/$@ + @ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>out/$@/make.log + @ cp $(BUILD_DIR)/native/unit_test_* out/$@ + +$(JERRY_MCU_TARGETS): $(BUILD_DIR)/mcu + @ mkdir -p out/$@ + @ $(MAKE) -C $(BUILD_DIR)/mcu VERBOSE=1 $@ &>out/$@/make.log + @ cp $(BUILD_DIR)/mcu/$@ out/$@/jerry + +build: $(JERRY_TARGETS) unittests + +$(FLASH_TARGETS): $(BUILD_DIR)/mcu + @$(MAKE) -C $(BUILD_DIR)/mcu VERBOSE=1 $@ 1>/dev/null + PRECOMMIT_CHECK_TARGETS_NO_VALGRIND_LIST= debug.linux.check \ release.linux.check PRECOMMIT_CHECK_TARGETS_VALGRIND_LIST= debug.linux-valgrind.check \ @@ -97,13 +108,12 @@ pull: ./tools/pull.sh log: ./tools/log.sh @ ./tools/log.sh - precommit: clean @ echo -e "\nBuilding...\n\n" @ $(MAKE) build @ echo -e "\n================ Build completed successfully. Running precommit tests ================\n" - @ echo -e "All targets were built successfully. Starting unit tests' build and run.\n" - @ $(MAKE) unittests TESTS_OPTS="--silent" + @ echo -e "All targets were built successfully. Starting unit tests' run.\n" + @ $(MAKE) unittests_run TESTS_OPTS="--silent" @ echo -e "Unit tests completed successfully. Starting parse-only testing.\n" @ # Parse-only testing @ for path in "./tests/jerry" "./benchmarks/jerry"; \ @@ -155,8 +165,10 @@ precommit: clean done @ echo -e "Full testing completed successfully\n\n================\n\n" -$(JERRY_TARGETS) $(TESTS_TARGET) $(FLASH_TARGETS): +unittests_run: unittests @$(MAKE) -s -f Makefile.mk TARGET=$@ $@ clean: - @ rm -rf $(OUT_DIR) + @ rm -rf $(BUILD_DIR) $(OUT_DIR) + +.PHONY: clean build unittests_run diff --git a/Makefile.mk b/Makefile.mk index 71cbbaee0..c163fc9f6 100644 --- a/Makefile.mk +++ b/Makefile.mk @@ -6,19 +6,6 @@ endif ENGINE_NAME ?= jerry -CROSS_COMPILE ?= arm-none-eabi- -CC = g++ -LD = ld -OBJDUMP = objdump -OBJCOPY = objcopy -SIZE = size -STRIP = strip - -MAIN_MODULE_SRC = src/main.cpp - -LNK_SCRIPT_STM32F3 = third-party/stm32f3.ld -LNK_SCRIPT_STM32F4 = third-party/stm32f4.ld - # Parsing target # '.' -> ' ' TARGET_SPACED := $(subst ., ,$(TARGET)) @@ -40,139 +27,14 @@ TARGET_ACTION := $(word 3,$(TARGET_SPACED)) # Target used as dependency of an action (check, flash, etc.) TARGET_OF_ACTION := $(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS) -# unittests mode -> linux system -ifeq ($(TARGET_MODE),$(TESTS_TARGET)) - TARGET_SYSTEM := linux - TARGET_SYSTEM_AND_MODS := $(TARGET_SYSTEM) -endif - # target folder name in $(OUT_DIR) TARGET_DIR=$(OUT_DIR)/$(TARGET_MODE).$(TARGET_SYSTEM_AND_MODS) -# -# Options setup -# - -# Is MCU target? -ifeq ($(filter-out $(TARGET_MCU_SYSTEMS),$(TARGET_SYSTEM)),) - OPTION_MCU = enable -else - OPTION_MCU = disable -endif - -# Override debug symbols settings -ifeq ($(dbgsyms),1) - OPTION_OVERRIDE_ENABLE_DBGSYMS := enable -else - OPTION_OVERRIDE_ENABLE_DBGSYMS := disable -endif - -# Override optimization settings -ifeq ($(noopt),1) - OPTION_OVERRIDE_DISABLE_OPTIMIZE := enable -else - OPTION_OVERRIDE_DISABLE_OPTIMIZE := disable -endif - -# DWARF version -ifeq ($(dwarf4),1) - OPTION_DWARF4 := enable -else - OPTION_DWARF4 := disable -endif - -# Print TODO, FIXME -ifeq ($(todo),1) - OPTION_TODO := enable -else - OPTION_TODO := disable -endif - -# Parser error code -PARSER_ERROR_CODE := 255 - -ifeq ($(fixme),1) - OPTION_FIXME := enable -else - OPTION_FIXME := disable -endif - -# Compilation command line echoing -ifeq ($(echo),1) - OPTION_ECHO := enable -else - OPTION_ECHO := disable -endif - -# Turn off pre-compilation static analysis tools -ifeq ($(nostaticcheck),1) - OPTION_DISABLE_STATIC_ANALYSIS := enable -else - OPTION_DISABLE_STATIC_ANALYSIS := disable -endif - -# -fdiagnostics-color=always -ifeq ($(color),1) - ifeq ($(OPTION_MCU),enable) - $(error MCU target doesn\'t support coloring compiler's output) - endif - - OPTION_COLOR := enable -else - OPTION_COLOR := disable -endif - -# JERRY_NDEBUG, debug symbols -ifeq ($(TARGET_MODE),release) - OPTION_NDEBUG = enable - OPTION_DEBUG_SYMS = disable - OPTION_STRIP = enable -else - OPTION_NDEBUG = disable - OPTION_DEBUG_SYMS = enable - OPTION_STRIP = disable -endif - -# Optimizations -ifeq ($(filter-out release $(TESTS_TARGET),$(TARGET_MODE)),) - OPTION_OPTIMIZE = enable -else - OPTION_OPTIMIZE = disable -endif - -# Applying override options -ifeq ($(OPTION_OVERRIDE_ENABLE_DBGSYMS),enable) - OPTION_DEBUG_SYMS = enable - OPTION_STRIP = disable -endif - -ifeq ($(OPTION_OVERRIDE_DISABLE_OPTIMIZE),enable) - OPTION_OPTIMIZE = disable -endif - -# CompactProfile mode -ifeq ($(OPTION_MCU),enable) - OPTION_COMPACT_PROFILE := enable -else - ifeq ($(filter cp,$(TARGET_MODS)), cp) - OPTION_COMPACT_PROFILE := enable - else - OPTION_COMPACT_PROFILE := disable - endif -endif - -# minimal CompactProfile mode -ifeq ($(filter cp_minimal,$(TARGET_MODS)), cp_minimal) - OPTION_COMPACT_PROFILE := enable - OPTION_CP_MINIMAL := enable -else - OPTION_CP_MINIMAL := disable -endif - -ifeq ($(filter sanitize,$(TARGET_MODS)), sanitize) - OPTION_SANITIZE := enable -else - OPTION_SANITIZE := disable +# unittests mode -> linux system +ifeq ($(TARGET_MODE),unittests_run) + TARGET_SYSTEM := linux + TARGET_SYSTEM_AND_MODS := $(TARGET_SYSTEM) + TARGET_DIR := $(OUT_DIR)/unittests endif ifeq ($(filter valgrind,$(TARGET_MODS)), valgrind) @@ -185,379 +47,17 @@ else OPTION_VALGRIND := disable endif -ifeq ($(filter mem_stats,$(TARGET_MODS)), mem_stats) - OPTION_MEM_STATS := enable -else - OPTION_MEM_STATS := disable -endif - -# -# Target CPU -# -TARGET_CPU = $(strip $(if $(filter linux,$(TARGET_SYSTEM)), x64, \ - $(if $(filter stm32f3,$(TARGET_SYSTEM)), cortexm4, \ - $(if $(filter stm32f4,$(TARGET_SYSTEM)), cortexm4, \ - $(error Do not know target CPU for target system '$(TARGET_SYSTEM)'))))) - -# -# Flag blocks -# - -# Warnings -CFLAGS_WARNINGS ?= -Wall -Wextra -Wpedantic -Wlogical-op -Winline \ - -Wformat-nonliteral -Winit-self -Wstack-protector \ - -Wconversion -Wsign-conversion -Wformat-security \ - -Wmissing-declarations -Wno-attributes -CFLAGS_WERROR ?= -Werror -CFLAGS_WFATAL_ERRORS ?= -Wfatal-errors - -# Optimizations -CFLAGS_OPTIMIZE ?= -Os -fomit-frame-pointer -flto -CFLAGS_NO_OPTIMIZE ?= -O0 -LDFLAGS_OPTIMIZE ?= -LDFLAGS_NO_OPTIMIZE ?= - -# Debug symbols -CFLAGS_DEBUG_SYMS ?= -g3 - -ifeq ($(OPTION_DWARF4),enable) - CFLAGS_DEBUG_SYMS += -gdwarf-4 -else - CFLAGS_DEBUG_SYMS += -gdwarf-3 -endif - -# Cortex-M4 MCU -CFLAGS_CORTEXM4 ?= -mlittle-endian -mcpu=cortex-m4 -march=armv7e-m -mthumb \ - -mfpu=fpv4-sp-d16 -mfloat-abi=hard - - -# -# Common -# - -CFLAGS_COMMON ?= $(INCLUDES) -std=c++11 -nostdlib -fno-exceptions -fno-rtti \ - -fno-implicit-templates -fno-implicit-inline-templates -LDFLAGS ?= -lgcc - -ifeq ($(OPTION_OPTIMIZE),enable) - CFLAGS_COMMON += $(CFLAGS_OPTIMIZE) - LDFLAGS += $(LDFLAGS_OPTIMIZE) -else - CFLAGS_COMMON += $(CFLAGS_NO_OPTIMIZE) - LDFLAGS += $(LDFLAGS_NO_OPTIMIZE) -endif - -ifeq ($(OPTION_DEBUG_SYMS),enable) - CFLAGS_COMMON += $(CFLAGS_DEBUG_SYMS) -endif - -# CPU-specific common -ifeq ($(TARGET_CPU),cortexm4) - CFLAGS_COMMON += $(CFLAGS_CORTEXM4) -endif - -ifeq ($(OPTION_MCU),enable) - CC := $(CROSS_COMPILE)$(CC) - LD := $(CROSS_COMPILE)$(LD) - OBJDUMP := $(CROSS_COMPILE)$(OBJDUMP) - OBJCOPY := $(CROSS_COMPILE)$(OBJCOPY) - SIZE := $(CROSS_COMPILE)$(SIZE) - STRIP := $(CROSS_COMPILE)$(STRIP) -endif - -# -# Jerry part sources, headers, includes, cflags, ldflags -# - -GIT_BRANCH=$(shell git symbolic-ref -q HEAD) -GIT_HASH=$(shell git rev-parse HEAD) -BUILD_DATE=$(shell date +'%d/%m/%Y') - -CFLAGS_JERRY = $(CFLAGS_WARNINGS) $(CFLAGS_WERROR) $(CFLAGS_WFATAL_ERRORS) -DEFINES_JERRY = - -DEFINES_JERRY += -DJERRY_BUILD_DATE="\"$(BUILD_DATE)\"" \ - -DJERRY_COMMIT_HASH="\"$(GIT_HASH)\"" \ - -DJERRY_BRANCH_NAME="\"$(GIT_BRANCH)\"" - -SOURCES_JERRY_C = \ - $(sort \ - $(wildcard src/libruntime/*.cpp) \ - $(wildcard src/libperipherals/*.cpp) \ - $(wildcard src/libjsparser/*.cpp) \ - $(wildcard src/libecmaobjects/*.cpp) \ - $(wildcard src/libecmaoperations/*.cpp) \ - $(wildcard src/libecmabuiltins/*.cpp) \ - $(wildcard src/liballocator/*.cpp) \ - $(wildcard src/libcoreint/*.cpp) \ - $(wildcard src/libintstructs/*.cpp) \ - $(wildcard src/liboptimizer/*.cpp) \ - $(wildcard src/libruntime/target/$(TARGET_SYSTEM)/*.cpp) ) - -SOURCES_JERRY_H = \ - $(sort \ - $(wildcard src/*.h) \ - $(wildcard src/libruntime/*.h) \ - $(wildcard src/libperipherals/*.h) \ - $(wildcard src/libjsparser/*.h) \ - $(wildcard src/libecmaobjects/*.h) \ - $(wildcard src/libecmaoperations/*.h) \ - $(wildcard src/libecmabuiltins/*.h) \ - $(wildcard src/liballocator/*.h) \ - $(wildcard src/libcoreint/*.h) \ - $(wildcard src/liboptimizer/*.h) \ - $(wildcard src/libintstructs/*.h) \ - $(wildcard src/libruntime/target/$(TARGET_SYSTEM)/*.h) ) - -SOURCES_JERRY_ASM = \ - $(wildcard src/libruntime/target/$(TARGET_SYSTEM)/*.S) - -SOURCES_JERRY = $(SOURCES_JERRY_C) $(SOURCES_JERRY_ASM) - -INCLUDES_JERRY = \ - -I src \ - -I src/libruntime \ - -I src/libperipherals \ - -I src/libjsparser \ - -I src/libecmaobjects \ - -I src/libecmaoperations \ - -I src/libecmabuiltins \ - -I src/liballocator \ - -I src/liboptimizer \ - -I src/libcoreint \ - -I src/libintstructs - -ifeq ($(OPTION_SANITIZE),enable) - CFLAGS_COMMON += -fsanitize=address - LDFLAGS += -lasan -endif - -ifeq ($(OPTION_NDEBUG),enable) - DEFINES_JERRY += -DJERRY_NDEBUG -endif - -ifeq ($(OPTION_COMPACT_PROFILE),enable) - DEFINES_JERRY += -DCONFIG_ECMA_COMPACT_PROFILE -else - DEFINES_JERRY += -DCONFIG_ECMA_NUMBER_TYPE=CONFIG_ECMA_NUMBER_FLOAT64 -endif - -ifeq ($(OPTION_CP_MINIMAL),enable) - DEFINES_JERRY += -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_ERROR_BUILTINS \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_MATH_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_DATE_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN \ - -DCONFIG_ECMA_COMPACT_PROFILE_DISABLE_REGEXP_BUILTIN \ - -DCONFIG_ECMA_NUMBER_TYPE=CONFIG_ECMA_NUMBER_FLOAT32 -endif - -ifeq ($(OPTION_MCU),disable) - MACHINE_TYPE=$(shell uname -m) - ifeq ($(MACHINE_TYPE),x86_64) - CFLAGS_COMMON += -ffixed-rbp - DEFINES_JERRY += -D__TARGET_HOST_x64 - else - ifeq ($(MACHINE_TYPE),armv7l) - DEFINES_JERRY += -D__TARGET_HOST_ARMv7 - else - $(error Unsupported machine architecture) - endif - endif - DEFINES_JERRY += -D__TARGET_HOST -DJERRY_SOURCE_BUFFER_SIZE=$$((1024*1024)) - CFLAGS_COMMON += -fno-stack-protector -else - CFLAGS_COMMON += -ffunction-sections -fdata-sections -nostdlib - DEFINES_JERRY += -D__TARGET_MCU - LDFLAGS += -Wl,--gc-sections -endif - -ifeq ($(OPTION_MEM_STATS),enable) - DEFINES_JERRY += -DMEM_STATS -endif - -ifeq ($(OPTION_COLOR),enable) - CFLAGS_COMMON += -fdiagnostics-color=always -endif - -ifeq ($(OPTION_TODO),enable) - DEFINES_JERRY += -DJERRY_PRINT_TODO -endif - -ifeq ($(OPTION_FIXME),enable) - DEFINES_JERRY += -DJERRY_PRINT_FIXME -endif - ifeq ($(OPTION_VALGRIND),enable) VALGRIND_CMD := "valgrind --error-exitcode=254 --track-origins=yes" VALGRIND_TIMEOUT := 60 - DEFINES_JERRY += -DJERRY_VALGRIND else VALGRIND_CMD := VALGRIND_TIMEOUT := endif -# -# Third-party sources, headers, includes, cflags, ldflags -# +.PHONY: unittests_run $(CHECK_TARGETS) -SOURCES_THIRDPARTY = -INCLUDES_THIRDPARTY = -I third-party/valgrind/ -CFLAGS_THIRDPARTY = - -ifeq ($(TARGET_SYSTEM),stm32f4) - DEFINES_JERRY += -D__TARGET_MCU_STM32F4 - LDFLAGS += -nostartfiles -T$(LNK_SCRIPT_STM32F4) - SOURCES_THIRDPARTY += \ - third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c \ - third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f4xx.s \ - third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c \ - third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c \ - third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c - - INCLUDES_THIRDPARTY += \ - -I third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/Include \ - -I third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc \ - -I third-party/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/Include \ - -I third-party/STM32F4-Discovery_FW_V1.1.0/ -else - ifeq ($(TARGET_SYSTEM),stm32f3) - DEFINES_JERRY += -D__TARGET_MCU_STM32F3 - LDFLAGS += -nostartfiles -T$(LNK_SCRIPT_STM32F3) - SOURCES_THIRDPARTY += \ - third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/system_stm32f30x.c \ - third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Source/Templates/gcc_ride7/startup_stm32f30x.s \ - third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_tim.c \ - third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_gpio.c \ - third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/src/stm32f30x_rcc.c - - INCLUDES_THIRDPARTY += \ - -I third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Device/ST/STM32F30x/Include/ \ - -I third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/STM32F30x_StdPeriph_Driver/inc \ - -I third-party/STM32F3-Discovery_FW_V1.1.0/Libraries/CMSIS/Include/ \ - -I third-party/STM32F3-Discovery_FW_V1.1.0 - endif -endif - -# Unit tests - -SOURCES_UNITTESTS = \ - $(sort \ - $(patsubst %.cpp,%,$(notdir \ - $(wildcard $(UNITTESTS_SRC_DIR)/*.cpp)))) - -.PHONY: all clean check install $(JERRY_TARGETS) $(TESTS_TARGET) - -all: clean $(JERRY_TARGETS) - -$(JERRY_TARGETS): - @rm -rf $(TARGET_DIR) - @mkdir -p $(TARGET_DIR) - @source_and_headers_list=$$(for file in $(SOURCES_JERRY_C) $(MAIN_MODULE_SRC) $(SOURCES_JERRY_H) ; do echo $$file; done | sort); \ - changed_sources_and_headers_list=`comm -12 \ - <(echo "$$source_and_headers_list") \ - <(git diff --name-only origin/master | sort)`; \ - cpp_check_file_list=$$(echo "$$changed_sources_and_headers_list" | sort); \ - source_to_grep_for_includes="$$source_and_headers_list"; \ - while [[ "$$source_to_grep_for_includes" != "" ]]; \ - do \ - new_cpp_check_file_list="$$cpp_check_file_list"; \ - source_to_grep_for_includes=$$(comm -23 \ - <(echo "$$source_to_grep_for_includes") \ - <(echo "$$cpp_check_file_list")); \ - cpp_check_header_file_list=$$(echo "$$cpp_check_file_list" | grep "\.h$$"); \ - for header in $$cpp_check_header_file_list; \ - do \ - header=$$(basename $$header); \ - includers=$$(grep "#include \"$$header\"" $$source_to_grep_for_includes | cut -d ':' -f 1); \ - new_cpp_check_file_list=$$(echo -e "$$new_cpp_check_file_list\n$$includers"); \ - done; \ - new_cpp_check_file_list=$$(echo "$$new_cpp_check_file_list" | sort | uniq); \ - if [[ "$$cpp_check_file_list" == "$$new_cpp_check_file_list" ]]; \ - then \ - break; \ - fi; \ - cpp_check_file_list="$$new_cpp_check_file_list"; \ - done; \ - cpp_check_file_list=$$(echo "$$cpp_check_file_list" | grep -v "\.h$$"); \ - [[ "$(OPTION_DISABLE_STATIC_ANALYSIS)" == "enable" ]] || [[ "$$cpp_check_file_list" == "" ]] || \ - ./tools/cppcheck.sh -j8 $(DEFINES_JERRY) $$cpp_check_file_list $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) \ - --error-exitcode=1 --language=c++ --std=c++11 --enable=all 1>/dev/null || exit $$?; \ - [[ "$(OPTION_DISABLE_STATIC_ANALYSIS)" == "enable" ]] || [[ "$$changed_sources_and_headers_list" == "" ]] || \ - vera++ -r ./tools/vera++ -p jerry $$changed_sources_and_headers_list \ - -e --no-duplicate 1>$(TARGET_DIR)/vera.log || exit $$?; - @mkdir -p $(TARGET_DIR)/obj - @source_index=0; \ - for jerry_src in $(SOURCES_JERRY) $(MAIN_MODULE_SRC); do \ - cmd="$(CC) -c $(DEFINES_JERRY) $(CFLAGS_COMMON) $(CFLAGS_JERRY) $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) $$jerry_src \ - -o $(TARGET_DIR)/obj/$$(basename $$jerry_src).$$source_index.o"; \ - if [ "$(OPTION_ECHO)" = "enable" ]; then echo $$cmd; echo; fi; \ - $$cmd; \ - if [ $$? -ne 0 ]; then echo Failed "'$$cmd'"; exit 1; fi; \ - source_index=$$(($$source_index+1)); \ - done; \ - for thirdparty_src in $(SOURCES_THIRDPARTY); do \ - cmd="$(CC) -c $(CFLAGS_COMMON) $(CFLAGS_THIRDPARTY) $(INCLUDES_THIRDPARTY) $$thirdparty_src \ - -o $(TARGET_DIR)/obj/$$(basename $$thirdparty_src).$$source_index.o"; \ - if [ "$(OPTION_ECHO)" = "enable" ]; then echo $$cmd; echo; fi; \ - $$cmd; \ - if [ $$? -ne 0 ]; then echo Failed "'$$cmd'"; exit 1; fi; \ - source_index=$$(($$source_index+1)); \ - done; \ - cmd="$(CC) $(CFLAGS_COMMON) $(TARGET_DIR)/obj/* $(LDFLAGS) -o $(TARGET_DIR)/$(ENGINE_NAME)"; \ - if [ "$(OPTION_ECHO)" = "enable" ]; then echo $$cmd; echo; fi; \ - $$cmd; \ - if [ $$? -ne 0 ]; then echo Failed "'$$cmd'"; exit 1; fi; - @if [ "$(OPTION_STRIP)" = "enable" ]; then $(STRIP) $(TARGET_DIR)/$(ENGINE_NAME) || exit $$?; fi; - @if [ "$(OPTION_MCU)" = "enable" ]; then $(OBJCOPY) -Obinary $(TARGET_DIR)/$(ENGINE_NAME) $(TARGET_DIR)/$(ENGINE_NAME).bin || exit $$?; fi; - @rm -rf $(TARGET_DIR)/obj - -$(TESTS_TARGET): - @rm -rf $(TARGET_DIR) - @mkdir -p $(TARGET_DIR) - @mkdir -p $(TARGET_DIR)/obj - @[[ "$(OPTION_DISABLE_STATIC_ANALYSIS)" == "enable" ]] || \ - ./tools/cppcheck.sh -j8 $(DEFINES_JERRY) `find $(UNITTESTS_SRC_DIR) -name *.[c]` $(SOURCES_JERRY_C) $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) \ - --error-exitcode=1 --language=c++ --std=c++11 --enable=all 1>/dev/null - @source_index=0; \ - for jerry_src in $(SOURCES_JERRY); \ - do \ - cmd="$(CC) -c $(DEFINES_JERRY) $(CFLAGS_COMMON) $(CFLAGS_JERRY) \ - $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) $$jerry_src -o $(TARGET_DIR)/obj/$$(basename $$jerry_src).$$source_index.o"; \ - if [ "$(OPTION_ECHO)" = "enable" ]; then echo $$cmd; echo; fi; \ - $$cmd & \ - ids[$$source_index]=$$!; \ - cmds[$$source_index]="$$cmd"; \ - source_index=$$(($$source_index+1)); \ - done; \ - for i in `seq 1 $$source_index`; \ - do \ - wait $${ids[$$i]}; \ - status_code=$$?; \ - if [ $$status_code -ne 0 ]; then echo Failed "'"$${cmds[$$i]}"'"; exit 1; fi; \ - done - @unit_test_index=0; \ - for unit_test in $(SOURCES_UNITTESTS); \ - do \ - cmd="$(CC) $(DEFINES_JERRY) $(CFLAGS_COMMON) $(CFLAGS_JERRY) \ - $(INCLUDES_JERRY) $(INCLUDES_THIRDPARTY) $(TARGET_DIR)/obj/*.o $(UNITTESTS_SRC_DIR)/$$unit_test.cpp -lc -o $(TARGET_DIR)/$$unit_test"; \ - if [ "$(OPTION_ECHO)" = "enable" ]; then echo $$cmd; echo; fi; \ - $$cmd & \ - ids[$$unit_test_index]=$$!; \ - cmds[$$unit_test_index]="$$cmd"; \ - unit_test_index=$$(($$unit_test_index+1)); \ - if [ $$? -ne 0 ]; then echo Failed "'$$cmd'"; exit 1; fi; \ - done; \ - for i in `seq 1 $$unit_test_index`; \ - do \ - wait $${ids[$$i]}; \ - status_code=$$?; \ - if [ $$status_code -ne 0 ]; then echo Failed "'"$${cmds[$$i]}"'"; exit 1; fi; \ - done - @ rm -rf $(TARGET_DIR)/obj +unittests_run: @ VALGRIND=$(VALGRIND_CMD) ./tools/jerry_unittest.sh $(TARGET_DIR) $(TESTS_OPTS) $(CHECK_TARGETS): @@ -596,7 +96,3 @@ $(CHECK_TARGETS): exit $$status_code; \ fi; \ fi; - - -$(FLASH_TARGETS): $(TARGET_OF_ACTION) - st-flash write $(OUT_DIR)/$(TARGET_OF_ACTION)/jerry.bin 0x08000000 || exit $$? diff --git a/cmake/toolchain_linux_armv7l-hf.cmake b/cmake/toolchain_linux_armv7l-hf.cmake new file mode 100644 index 000000000..7275b99e7 --- /dev/null +++ b/cmake/toolchain_linux_armv7l-hf.cmake @@ -0,0 +1,19 @@ +# Copyright 2015 Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR armv7l) + +set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) +set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) diff --git a/cmake/toolchain_linux_x86_64.cmake b/cmake/toolchain_linux_x86_64.cmake new file mode 100644 index 000000000..405e8dff0 --- /dev/null +++ b/cmake/toolchain_linux_x86_64.cmake @@ -0,0 +1,19 @@ +# Copyright 2015 Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR x86_64) + +set(CMAKE_C_COMPILER x86_64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER x86_64-linux-gnu-g++) diff --git a/cmake/toolchain_mcu_armv7l.cmake b/cmake/toolchain_mcu_armv7l.cmake new file mode 100644 index 000000000..b58ed1321 --- /dev/null +++ b/cmake/toolchain_mcu_armv7l.cmake @@ -0,0 +1,21 @@ +# Copyright 2015 Samsung Electronics Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include(CMakeForceCompiler) + +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR armv7l) + +CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) +CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-g++ GNU) diff --git a/tools/jerry_unittest.sh b/tools/jerry_unittest.sh index 080eeec22..44c457794 100755 --- a/tools/jerry_unittest.sh +++ b/tools/jerry_unittest.sh @@ -1,4 +1,4 @@ -# Copyright 2014 Samsung Electronics Co., Ltd. +# Copyright 2014-2015 Samsung Electronics Co., Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -30,13 +30,13 @@ done rm -f $DIR/unit_tests_run.log -UNITTESTS=$(ls $DIR) +UNITTESTS=$(ls $DIR/unit_*) for unit_test in $UNITTESTS; do [ $OPTION_SILENT = "enable" ] || echo -n "Running $unit_test... "; - $VALGRIND $DIR/$unit_test >&$DIR/unit_tests_run.log.tmp; + $VALGRIND $unit_test >&$DIR/unit_tests_run.log.tmp; status_code=$? cat $DIR/unit_tests_run.log.tmp >> $DIR/unit_tests_run.log rm $DIR/unit_tests_run.log.tmp