Enable cppcheck run during precommit testing
This commit is contained in:
+25
-9
@@ -37,9 +37,19 @@ project (Jerry CXX C ASM)
|
||||
set(CMAKE_AR ${DIRECTORY_GCC}/${CMAKE_AR})
|
||||
set(CMAKE_RANLIB ${DIRECTORY_GCC}/${CMAKE_RANLIB})
|
||||
|
||||
# Imported and third-party targets prefix
|
||||
set(PREFIX_IMPORTED_LIB imported_)
|
||||
set(SUFFIX_THIRD_PARTY_LIB .third_party.lib)
|
||||
|
||||
# Static checkers
|
||||
include(build/static-checkers/add_cppcheck_for_target.cmake)
|
||||
|
||||
add_custom_target(static_check)
|
||||
add_dependencies(static_check cppcheck)
|
||||
|
||||
# Disable _FORTIFY_SOURCE
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U_FORTIFY_SOURCE")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U_FORTIFY_SOURCE")
|
||||
|
||||
# Architecture-specific compile/link flags
|
||||
foreach(FLAG ${FLAGS_COMMON_ARCH})
|
||||
@@ -195,18 +205,18 @@ project (Jerry CXX C ASM)
|
||||
|
||||
# Imported libraries
|
||||
# libc
|
||||
add_library(imported_libc SHARED IMPORTED)
|
||||
add_library(${PREFIX_IMPORTED_LIB}libc SHARED IMPORTED)
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_COMMON_ARCH} -print-file-name=libc.so
|
||||
OUTPUT_VARIABLE IMPORTED_LIBC_LOCATION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set_property(TARGET imported_libc
|
||||
set_property(TARGET ${PREFIX_IMPORTED_LIB}libc
|
||||
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBC_LOCATION})
|
||||
# libgcc
|
||||
add_library(imported_libgcc STATIC IMPORTED)
|
||||
add_library(${PREFIX_IMPORTED_LIB}libgcc STATIC IMPORTED)
|
||||
execute_process(COMMAND ${CMAKE_C_COMPILER} ${FLAGS_COMMON_ARCH} -print-file-name=libgcc.a
|
||||
OUTPUT_VARIABLE IMPORTED_LIBGCC_LOCATION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set_property(TARGET imported_libgcc
|
||||
set_property(TARGET ${PREFIX_IMPORTED_LIB}libgcc
|
||||
PROPERTY IMPORTED_LOCATION ${IMPORTED_LIBGCC_LOCATION})
|
||||
|
||||
# Platform-specific configuration
|
||||
@@ -259,7 +269,9 @@ project (Jerry CXX C ASM)
|
||||
PROPERTY LINK_FLAGS "${COMPILE_FLAGS_JERRY} ${CXX_FLAGS_JERRY} ${FLAGS_COMMON_${BUILD_MODE}} ${LINKER_FLAGS_COMMON} ${LINKER_FLAGS_STATIC}")
|
||||
target_compile_definitions(${TARGET_NAME} PRIVATE ${DEFINES_JERRY})
|
||||
target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
|
||||
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME} imported_libgcc)
|
||||
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} ${LIBC_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libgcc)
|
||||
|
||||
add_cppcheck_target(${TARGET_NAME})
|
||||
|
||||
if("${PLATFORM}" STREQUAL "MCU")
|
||||
add_dependencies(${TARGET_NAME} mcu_header_with_script_to_run.${TARGET_NAME})
|
||||
@@ -292,6 +304,7 @@ project (Jerry CXX C ASM)
|
||||
|
||||
# Unit tests declaration
|
||||
add_custom_target(unittests)
|
||||
add_custom_target(cppcheck.unittests)
|
||||
|
||||
foreach(SOURCE_UNIT_TEST_MAIN ${SOURCE_UNIT_TEST_MAIN_MODULES})
|
||||
get_filename_component(TARGET_NAME ${SOURCE_UNIT_TEST_MAIN} NAME_WE)
|
||||
@@ -305,7 +318,10 @@ project (Jerry CXX C ASM)
|
||||
set_property(TARGET ${TARGET_NAME}
|
||||
PROPERTY LINK_FLAGS "${COMPILE_FLAGS_JERRY} ${CXX_FLAGS_JERRY} ${FLAGS_COMMON_UNITTESTS} ${LINKER_FLAGS_COMMON}")
|
||||
target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_CORE_INTERFACE})
|
||||
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} imported_libc imported_libgcc)
|
||||
|
||||
target_link_libraries(${TARGET_NAME} ${CORE_TARGET_NAME} ${PREFIX_IMPORTED_LIB}libc ${PREFIX_IMPORTED_LIB}libgcc)
|
||||
|
||||
add_cppcheck_target(${TARGET_NAME})
|
||||
|
||||
add_dependencies(unittests ${TARGET_NAME})
|
||||
add_dependencies(cppcheck.unittests cppcheck.${TARGET_NAME})
|
||||
endforeach()
|
||||
|
||||
@@ -41,6 +41,12 @@
|
||||
ifneq ($(VALGRIND),ON)
|
||||
VALGRIND := OFF
|
||||
endif
|
||||
# Static checkers
|
||||
STATIC_CHECK ?= OFF
|
||||
|
||||
ifneq ($(STATIC_CHECK),ON)
|
||||
STATIC_CHECK := OFF
|
||||
endif
|
||||
|
||||
export TARGET_DEBUG_MODES = debug
|
||||
export TARGET_RELEASE_MODES = release
|
||||
@@ -126,23 +132,35 @@ $(BUILD_DIRS_STM32F4):
|
||||
|
||||
$(JERRY_LINUX_TARGETS): $(BUILD_DIR)/native
|
||||
@ mkdir -p $(OUT_DIR)/$@
|
||||
@ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>$(OUT_DIR)/$@/make.log
|
||||
@ [ "$(STATIC_CHECK)" = "OFF" ] || $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 cppcheck.$@ &>$(OUT_DIR)/$@/cppcheck.log || \
|
||||
(echo "cppcheck run failed. See $(OUT_DIR)/$@/cppcheck.log for details."; exit 1;)
|
||||
@ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>$(OUT_DIR)/$@/make.log || \
|
||||
(echo "Build failed. See $(OUT_DIR)/$@/make.log for details."; exit 1;)
|
||||
@ cp $(BUILD_DIR)/native/$@ $(OUT_DIR)/$@/jerry
|
||||
|
||||
unittests: $(BUILD_DIR)/native
|
||||
@ mkdir -p $(OUT_DIR)/$@
|
||||
@ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>$(OUT_DIR)/$@/make.log
|
||||
@ [ "$(STATIC_CHECK)" = "OFF" ] || $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 cppcheck.$@ &>$(OUT_DIR)/$@/cppcheck.log || \
|
||||
(echo "cppcheck run failed. See $(OUT_DIR)/$@/cppcheck.log for details."; exit 1;)
|
||||
@ $(MAKE) -C $(BUILD_DIR)/native VERBOSE=1 $@ &>$(OUT_DIR)/$@/make.log || \
|
||||
(echo "Build failed. See $(OUT_DIR)/$@/make.log for details."; exit 1;)
|
||||
@ cp $(BUILD_DIR)/native/unit_test_* $(OUT_DIR)/$@
|
||||
|
||||
$(JERRY_STM32F3_TARGETS): $(BUILD_DIR)/stm32f3
|
||||
@ mkdir -p $(OUT_DIR)/$@
|
||||
@ $(MAKE) -C $(BUILD_DIR)/stm32f3 VERBOSE=1 $@.bin &>$(OUT_DIR)/$@/make.log
|
||||
@ [ "$(STATIC_CHECK)" = "OFF" ] || $(MAKE) -C $(BUILD_DIR)/stm32f3 VERBOSE=1 cppcheck.$@ &>$(OUT_DIR)/$@/cppcheck.log || \
|
||||
(echo "cppcheck run failed. See $(OUT_DIR)/$@/cppcheck.log for details."; exit 1;)
|
||||
@ $(MAKE) -C $(BUILD_DIR)/stm32f3 VERBOSE=1 $@.bin &>$(OUT_DIR)/$@/make.log || \
|
||||
(echo "Build failed. See $(OUT_DIR)/$@/make.log for details."; exit 1;)
|
||||
@ cp $(BUILD_DIR)/stm32f3/$@ $(OUT_DIR)/$@/jerry
|
||||
@ cp $(BUILD_DIR)/stm32f3/$@.bin $(OUT_DIR)/$@/jerry.bin
|
||||
|
||||
$(JERRY_STM32F4_TARGETS): $(BUILD_DIR)/stm32f4
|
||||
@ mkdir -p $(OUT_DIR)/$@
|
||||
@ $(MAKE) -C $(BUILD_DIR)/stm32f4 VERBOSE=1 $@.bin &>$(OUT_DIR)/$@/make.log
|
||||
@ [ "$(STATIC_CHECK)" = "OFF" ] || $(MAKE) -C $(BUILD_DIR)/stm32f4 VERBOSE=1 cppcheck.$@ &>$(OUT_DIR)/$@/cppcheck.log || \
|
||||
(echo "cppcheck run failed. See $(OUT_DIR)/$@/cppcheck.log for details."; exit 1;)
|
||||
@ $(MAKE) -C $(BUILD_DIR)/stm32f4 VERBOSE=1 $@.bin &>$(OUT_DIR)/$@/make.log || \
|
||||
(echo "Build failed. See $(OUT_DIR)/$@/make.log for details."; exit 1;)
|
||||
@ cp $(BUILD_DIR)/stm32f4/$@ $(OUT_DIR)/$@/jerry
|
||||
@ cp $(BUILD_DIR)/stm32f4/$@.bin $(OUT_DIR)/$@/jerry.bin
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# 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.
|
||||
|
||||
# Cppcheck launcher
|
||||
set(CMAKE_CPPCHECK ${CMAKE_SOURCE_DIR}/tools/cppcheck.sh)
|
||||
|
||||
# Definition of cppcheck targets
|
||||
add_custom_target(cppcheck)
|
||||
|
||||
function(add_cppcheck_target TARGET_NAME)
|
||||
# Get target's parameters
|
||||
get_target_property(TARGET_DEFINES ${TARGET_NAME} COMPILE_DEFINITIONS)
|
||||
get_target_property(TARGET_INCLUDES ${TARGET_NAME} INCLUDE_DIRECTORIES)
|
||||
get_target_property(TARGET_SOURCES ${TARGET_NAME} SOURCES)
|
||||
get_target_property(TARGET_LIBRARIES ${TARGET_NAME} LINK_LIBRARIES)
|
||||
|
||||
# Build cppcheck's argument strings
|
||||
set(CPPCHECK_DEFINES_LIST )
|
||||
set(CPPCHECK_INCLUDES_LIST )
|
||||
set(CPPCHECK_SOURCES_LIST )
|
||||
|
||||
foreach(DEFINE ${TARGET_DEFINES})
|
||||
set(CPPCHECK_DEFINES_LIST ${CPPCHECK_DEFINES_LIST} -D${DEFINE})
|
||||
endforeach()
|
||||
|
||||
foreach(INCLUDE ${TARGET_INCLUDES})
|
||||
set(CPPCHECK_INCLUDES_LIST ${CPPCHECK_INCLUDES_LIST} -I${INCLUDE})
|
||||
endforeach()
|
||||
|
||||
foreach(SOURCE ${TARGET_SOURCES})
|
||||
# Add to list if it is C or C++ source
|
||||
get_filename_component(SOURCE_EXTENSION ${SOURCE} EXT)
|
||||
if("${SOURCE_EXTENSION}" STREQUAL ".c" OR "${SOURCE_EXTENSION}" STREQUAL ".cpp")
|
||||
set(CPPCHECK_SOURCES_LIST ${CPPCHECK_SOURCES_LIST} ${SOURCE})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
add_custom_target(cppcheck.${TARGET_NAME}
|
||||
COMMAND ${CMAKE_CPPCHECK} -j8 --error-exitcode=1 --language=c++ --std=c++11
|
||||
--enable=warning,style,performance,portability,information
|
||||
${CPPCHECK_DEFINES_LIST} ${CPPCHECK_SOURCES_LIST} ${CPPCHECK_INCLUDES_LIST}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
if(NOT "${TARGET_LIBRARIES}" STREQUAL "TARGET_LIBRARIES-NOTFOUND")
|
||||
foreach(LIBRARY ${TARGET_LIBRARIES})
|
||||
string(REGEX MATCH "^${PREFIX_IMPORTED_LIB}.*|.*${SUFFIX_THIRD_PARTY_LIB}$" MATCHED ${LIBRARY})
|
||||
if("${MATCHED}" STREQUAL "") # exclude imported and third-party modules
|
||||
if(NOT TARGET cppcheck.${LIBRARY})
|
||||
add_cppcheck_target(${LIBRARY})
|
||||
|
||||
add_dependencies(cppcheck.${TARGET_NAME} cppcheck.${LIBRARY})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
add_dependencies(cppcheck cppcheck.${TARGET_NAME})
|
||||
endfunction()
|
||||
@@ -51,9 +51,9 @@ set(COMPILE_FLAGS_LIBC "${COMPILE_FLAGS_JERRY} ${C_FLAGS_JERRY}")
|
||||
set(INCLUDE_LIBC_LINUX target/linux)
|
||||
# MCU
|
||||
# STM32F3
|
||||
set(INCLUDE_LIBC_MCU_STM32F3 target/stm32f3)
|
||||
set(INCLUDE_LIBC_MCU_STM32F3 target/mcu-stubs)
|
||||
# STM32F4
|
||||
set(INCLUDE_LIBC_MCU_STM32F4 target/stm32f4)
|
||||
set(INCLUDE_LIBC_MCU_STM32F4 target/mcu-stubs)
|
||||
|
||||
# Third-party
|
||||
# Platform-specific
|
||||
@@ -130,12 +130,12 @@ set(COMPILE_FLAGS_LIBC "${COMPILE_FLAGS_JERRY} ${C_FLAGS_JERRY}")
|
||||
|
||||
# Third-party MCU library
|
||||
if(DEFINED SOURCE_THIRD_PARTY_${PLATFORM_EXT})
|
||||
add_library(${TARGET_NAME}.third_party.lib STATIC ${SOURCE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}.third_party.lib
|
||||
add_library(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} STATIC ${SOURCE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB}
|
||||
PROPERTY COMPILE_FLAGS "${FLAGS_COMMON_${BUILD_MODE}}")
|
||||
target_include_directories(${TARGET_NAME}.third_party.lib PRIVATE ${INCLUDE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} PRIVATE ${INCLUDE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
|
||||
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}.third_party.lib)
|
||||
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
@@ -97,12 +97,12 @@ project (Jerry_Plugins CXX ASM)
|
||||
|
||||
# Third-party MCU library
|
||||
if(DEFINED SOURCE_THIRD_PARTY_${PLATFORM_EXT})
|
||||
add_library(${TARGET_NAME}.third_party.lib STATIC ${SOURCE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}.third_party.lib
|
||||
add_library(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} STATIC ${SOURCE_THIRD_PARTY_${PLATFORM_EXT}})
|
||||
set_property(TARGET ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB}
|
||||
PROPERTY COMPILE_FLAGS "${FLAGS_COMMON_${BUILD_MODE}}")
|
||||
target_include_directories(${TARGET_NAME}.third_party.lib PRIVATE ${INCLUDE_PLUGINS})
|
||||
target_include_directories(${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB} PRIVATE ${INCLUDE_PLUGINS})
|
||||
|
||||
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}.third_party.lib)
|
||||
target_link_libraries(${TARGET_NAME}.lib ${TARGET_NAME}${SUFFIX_THIRD_PARTY_LIB})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
BASE=./third-party/tools/cppcheck
|
||||
BASE=$(dirname $0)/../third-party/tools/cppcheck
|
||||
|
||||
if [ ! -x $BASE/$(uname -m)/cppcheck ]
|
||||
then
|
||||
|
||||
+2
-2
@@ -27,11 +27,11 @@ PARSE_ONLY_TESTING_PATHS="./tests/benchmarks/jerry"
|
||||
FULL_TESTING_PATHS="./tests/jerry ./tests/jerry-test-suite/precommit_test_list"
|
||||
|
||||
echo -e "\nBuilding...\n\n"
|
||||
$MAKE build || exit 1
|
||||
$MAKE STATIC_CHECK=ON build || exit 1
|
||||
echo -e "\n================ Build completed successfully. Running precommit tests ================\n"
|
||||
echo -e "All targets were built successfully. Starting unit tests' run.\n"
|
||||
$MAKE unittests_run || exit 1
|
||||
echo -e "Unit tests completed successfully. Starting full testing.\n"
|
||||
echo -e "\nUnit tests completed successfully. Starting full testing.\n"
|
||||
|
||||
RUN_IDS=""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user