Enable cppcheck run during precommit testing

This commit is contained in:
Ruben Ayrapetyan
2015-02-17 18:11:34 +03:00
parent a4155f7be8
commit b6d018d019
7 changed files with 128 additions and 26 deletions
+25 -9
View File
@@ -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()
+22 -4
View File
@@ -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()
+6 -6
View File
@@ -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()
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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=""