From 5417e1baf3fb460b482a1d3410c2d311de51d7eb Mon Sep 17 00:00:00 2001 From: Alexander Klauer Date: Thu, 17 Jan 2013 13:44:05 +0100 Subject: [PATCH] gcc 64-bit target --- extras/fixture/build/MakefileWorker.mk | 331 ------------------------- extras/fixture/build/filterGcov.sh | 61 ----- targets/gcc_64.yml | 45 ++++ 3 files changed, 45 insertions(+), 392 deletions(-) delete mode 100644 extras/fixture/build/MakefileWorker.mk delete mode 100644 extras/fixture/build/filterGcov.sh create mode 100644 targets/gcc_64.yml diff --git a/extras/fixture/build/MakefileWorker.mk b/extras/fixture/build/MakefileWorker.mk deleted file mode 100644 index 9948751..0000000 --- a/extras/fixture/build/MakefileWorker.mk +++ /dev/null @@ -1,331 +0,0 @@ -#--------- -# -# MakefileWorker.mk -# -# Include this helper file in your makefile -# It makes -# A static library holding the application objs -# A test executable -# -# See this example for parameter settings -# examples/Makefile -# -#---------- -# Inputs - these variables describe what to build -# -# INCLUDE_DIRS - Directories used to search for include files. -# This generates a -I for each directory -# SRC_DIRS - Directories containing source file to built into the library -# SRC_FILES - Specific source files to build into library. Helpful when not all code -# in a directory can be built for test (hopefully a temporary situation) -# TEST_SRC_DIRS - Directories containing unit test code build into the unit test runner -# These do not go in a library. They are explicitly included in the test runner -# MOCKS_SRC_DIRS - Directories containing mock source files to build into the test runner -# These do not go in a library. They are explicitly included in the test runner -#---------- -# You can adjust these variables to influence how to build the test target -# and where to put and name outputs -# See below to determine defaults -# COMPONENT_NAME - the name of the thing being built -# UNITY_HOME - where Unity home dir found -# UNITY_BUILD_HOME - place for scripts -# UNITY_OBJS_DIR - a directory where o and d files go -# UNITY_LIB_DIR - a directory where libs go -# UNITY_ENABLE_DEBUG - build for debug -# UNITY_USE_MEM_LEAK_DETECTION - Links with overridden new and delete -# UNITY_USE_STD_CPP_LIB - Set to N to keep the standard C++ library out -# of the test harness -# UNITY_USE_GCOV - Turn on coverage analysis -# Clean then build with this flag set to Y, then 'make gcov' -# UNITY_TEST_RUNNER_FLAGS -# None by default -# UNITY_MAPFILE - generate a map file -# UNITY_WARNINGFLAGS - overly picky by default -# OTHER_MAKEFILE_TO_INCLUDE - a hook to use this makefile to make -# other targets. Like CSlim, which is part of fitnesse -#---------- -# -# Other flags users can initialize to sneak in their settings -# UNITY_CFLAGS - C complier -# UNITY_LDFLAGS - Linker flags -#---------- - - -ifndef COMPONENT_NAME - COMPONENT_NAME = name_this_in_the_makefile -endif - -# Debug on by default -ifndef UNITY_ENABLE_DEBUG - UNITY_ENABLE_DEBUG = Y -endif - -# new and delete for memory leak detection on by default -ifndef UNITY_USE_MEM_LEAK_DETECTION - UNITY_USE_MEM_LEAK_DETECTION = Y -endif - -# Use gcov, off by default -ifndef UNITY_USE_GCOV - UNITY_USE_GCOV = N -endif - -# Default warnings -ifndef UNITY_WARNINGFLAGS - UNITY_WARNINGFLAGS = -Wall -Werror -Wshadow -Wswitch-default -endif - -# Default dir for temporary files (d, o) -ifndef UNITY_OBJS_DIR - UNITY_OBJS_DIR = objs -endif - -# Default dir for the outout library -ifndef UNITY_LIB_DIR - UNITY_LIB_DIR = lib -endif - -# No map by default -ifndef UNITY_MAP_FILE - UNITY_MAP_FILE = N -endif - -#Not verbose by deafult -ifdef VERBOSE - UNITY_TEST_RUNNER_FLAGS += -v -endif - -ifdef GROUP - UNITY_TEST_RUNNER_FLAGS += -g $(GROUP) -endif - -ifdef NAME - UNITY_TEST_RUNNER_FLAGS += -n $(NAME) -endif - -ifdef REPEAT - UNITY_TEST_RUNNER_FLAGS += -r $(REPEAT) -endif - - -# -------------------------------------- -# derived flags in the following area -# -------------------------------------- -ifeq ($(UNITY_USE_MEM_LEAK_DETECTION), N) - UNITY_CFLAGS += -DUNITY_MEM_LEAK_DETECTION_DISABLED -else - UNITY_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE = -include $(UNITY_HOME)/extras/fixture/src/unity_fixture_malloc_overrides.h -endif - -ifeq ($(UNITY_ENABLE_DEBUG), Y) - UNITY_CFLAGS += -g -endif - -ifeq ($(UNITY_USE_GCOV), Y) - UNITY_CFLAGS += -fprofile-arcs -ftest-coverage -endif - -UNITY_CFLAGS += $(UNITY_MEMLEAK_DETECTOR_MALLOC_MACRO_FILE) - -TARGET_MAP = $(COMPONENT_NAME).map.txt -ifeq ($(UNITY_MAP_FILE), Y) - UNITY_LDFLAGS += -Wl,-map,$(TARGET_MAP) -endif - -LD_LIBRARIES += -lgcov - -TARGET_LIB = \ - $(UNITY_LIB_DIR)/lib$(COMPONENT_NAME).a - -TEST_TARGET = \ - $(COMPONENT_NAME)_tests - -#Helper Functions -get_src_from_dir = $(wildcard $1/*.cpp) $(wildcard $1/*.c) -get_dirs_from_dirspec = $(wildcard $1) -get_src_from_dir_list = $(foreach dir, $1, $(call get_src_from_dir,$(dir))) -__src_to = $(subst .c,$1, $(subst .cpp,$1,$2)) -src_to = $(addprefix $(UNITY_OBJS_DIR)/,$(call __src_to,$1,$2)) -src_to_o = $(call src_to,.o,$1) -src_to_d = $(call src_to,.d,$1) -src_to_gcda = $(call src_to,.gcda,$1) -src_to_gcno = $(call src_to,.gcno,$1) -make_dotdot_a_subdir = $(subst ..,_dot_dot, $1) -time = $(shell date +%s) -delta_t = $(eval minus, $1, $2) -debug_print_list = $(foreach word,$1,echo " $(word)";) echo; - -#Derived -STUFF_TO_CLEAN += $(TEST_TARGET) $(TEST_TARGET).exe $(TARGET_LIB) $(TARGET_MAP) - -SRC += $(call get_src_from_dir_list, $(SRC_DIRS)) $(SRC_FILES) -OBJ = $(call src_to_o,$(SRC)) -OBJ2 = $(call make_dotdot_a_subdir. $(OBJ)) - -STUFF_TO_CLEAN += $(OBJ) - -TEST_SRC = $(call get_src_from_dir_list, $(TEST_SRC_DIRS)) -TEST_OBJS = $(call src_to_o,$(TEST_SRC)) -STUFF_TO_CLEAN += $(TEST_OBJS) - - -MOCKS_SRC = $(call get_src_from_dir_list, $(MOCKS_SRC_DIRS)) -MOCKS_OBJS = $(call src_to_o,$(MOCKS_SRC)) -STUFF_TO_CLEAN += $(MOCKS_OBJS) - -ALL_SRC = $(SRC) $(TEST_SRC) $(MOCKS_SRC) - -#Test coverage with gcov -GCOV_OUTPUT = gcov_output.txt -GCOV_REPORT = gcov_report.txt -GCOV_ERROR = gcov_error.txt -GCOV_GCDA_FILES = $(call src_to_gcda, $(ALL_SRC)) -GCOV_GCNO_FILES = $(call src_to_gcno, $(ALL_SRC)) -TEST_OUTPUT = $(TEST_TARGET).txt -STUFF_TO_CLEAN += \ - $(GCOV_OUTPUT)\ - $(GCOV_REPORT)\ - $(GCOV_REPORT).html\ - $(GCOV_ERROR)\ - $(GCOV_GCDA_FILES)\ - $(GCOV_GCNO_FILES)\ - $(TEST_OUTPUT) - - -#The gcda files for gcov need to be deleted before each run -#To avoid annoying messages. -GCOV_CLEAN = $(SILENCE)rm -f $(GCOV_GCDA_FILES) $(GCOV_OUTPUT) $(GCOV_REPORT) $(GCOV_ERROR) -RUN_TEST_TARGET = $(SILENCE) $(GCOV_CLEAN) ; echo "Running $(TEST_TARGET)"; ./$(TEST_TARGET) $(UNITY_TEST_RUNNER_FLAGS) - -INCLUDES_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(INCLUDE_DIRS)) -INCLUDES += $(foreach dir, $(INCLUDES_DIRS_EXPANDED), -I$(dir)) -MOCK_DIRS_EXPANDED = $(call get_dirs_from_dirspec, $(MOCKS_SRC_DIRS)) -INCLUDES += $(foreach dir, $(MOCK_DIRS_EXPANDED), -I$(dir)) - - -DEP_FILES = $(call src_to_d, $(ALL_SRC)) -STUFF_TO_CLEAN += $(DEP_FILES) $(PRODUCTION_CODE_START) $(PRODUCTION_CODE_END) -STUFF_TO_CLEAN += $(STDLIB_CODE_START) $(MAP_FILE) cpputest_*.xml junit_run_output - -# We'll use the UNITY_CFLAGS etc so that you can override AND add to the CppUTest flags -CFLAGS = $(UNITY_CFLAGS) $(UNITY_ADDITIONAL_CFLAGS) $(INCLUDES) $(UNITY_WARNINGFLAGS) -LDFLAGS = $(UNITY_LDFLAGS) $(UNITY_ADDITIONAL_LDFLAGS) - -# Targets - -.PHONY: all -all: start $(TEST_TARGET) - $(RUN_TEST_TARGET) - -.PHONY: start -start: $(TEST_TARGET) - $(SILENCE)START_TIME=$(call time) - -.PHONY: all_no_tests -all_no_tests: $(TEST_TARGET) - -.PHONY: flags -flags: - @echo - @echo "Compile C source with CFLAGS:" - @$(call debug_print_list,$(CFLAGS)) - @echo "Link with LDFLAGS:" - @$(call debug_print_list,$(LDFLAGS)) - @echo "Link with LD_LIBRARIES:" - @$(call debug_print_list,$(LD_LIBRARIES)) - @echo "Create libraries with ARFLAGS:" - @$(call debug_print_list,$(ARFLAGS)) - @echo "OBJ files:" - @$(call debug_print_list,$(OBJ2)) - - -$(TEST_TARGET): $(TEST_OBJS) $(MOCKS_OBJS) $(PRODUCTION_CODE_START) $(TARGET_LIB) $(USER_LIBS) $(PRODUCTION_CODE_END) $(STDLIB_CODE_START) - $(SILENCE)echo Linking $@ - $(SILENCE)$(LINK.o) -o $@ $^ $(LD_LIBRARIES) - -$(TARGET_LIB): $(OBJ) - $(SILENCE)echo Building archive $@ - $(SILENCE)mkdir -p lib - $(SILENCE)$(AR) $(ARFLAGS) $@ $^ - $(SILENCE)ranlib $@ - -test: $(TEST_TARGET) - $(RUN_TEST_TARGET) | tee $(TEST_OUTPUT) - -vtest: $(TEST_TARGET) - $(RUN_TEST_TARGET) -v | tee $(TEST_OUTPUT) - -$(UNITY_OBJS_DIR)/%.o: %.cpp - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.cpp) -MMD -MP $(OUTPUT_OPTION) $< - -$(UNITY_OBJS_DIR)/%.o: %.c - @echo compiling $(notdir $<) - $(SILENCE)mkdir -p $(dir $@) - $(SILENCE)$(COMPILE.c) -MMD -MP $(OUTPUT_OPTION) $< - -ifneq "$(MAKECMDGOALS)" "clean" --include $(DEP_FILES) -endif - -.PHONY: clean -clean: - $(SILENCE)echo Making clean - $(SILENCE)$(RM) $(STUFF_TO_CLEAN) - $(SILENCE)rm -rf gcov $(UNITY_OBJS_DIR) - $(SILENCE)find . -name "*.gcno" | xargs rm -f - $(SILENCE)find . -name "*.gcda" | xargs rm -f - -#realclean gets rid of all gcov, o and d files in the directory tree -#not just the ones made by this makefile -.PHONY: realclean -realclean: clean - $(SILENCE)rm -rf gcov - $(SILENCE)find . -name "*.gdcno" | xargs rm -f - $(SILENCE)find . -name "*.[do]" | xargs rm -f - -gcov: test - $(SILENCE)for d in $(SRC_DIRS) ; do \ - gcov --object-directory $(UNITY_OBJS_DIR)/$$d $$d/*.c $$d/*.cpp >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done - $(SILENCE)for f in $(SRC_FILES) ; do \ - gcov --object-directory $(UNITY_OBJS_DIR)/$$f $$f >> $(GCOV_OUTPUT) 2>>$(GCOV_ERROR) ; \ - done - $(UNITY_BUILD_HOME)/filterGcov.sh $(GCOV_OUTPUT) $(GCOV_ERROR) $(GCOV_REPORT) $(TEST_OUTPUT) - $(SILENCE)cat $(GCOV_REPORT) - $(SILENCE)mkdir -p gcov - $(SILENCE)mv *.gcov gcov - $(SILENCE)mv gcov_* gcov - $(SILENCE)echo "See gcov directory for details" - -debug: - @echo - @echo "Target Source files:" - @$(call debug_print_list,$(SRC)) - @echo "Target Object files:" - @$(call debug_print_list,$(OBJ)) - @echo "Test Source files:" - @$(call debug_print_list,$(TEST_SRC)) - @echo "Test Object files:" - @$(call debug_print_list,$(TEST_OBJS)) - @echo "Mock Source files:" - @$(call debug_print_list,$(MOCKS_SRC)) - @echo "Mock Object files:" - @$(call debug_print_list,$(MOCKS_OBJS)) - @echo "All Input Dependency files:" - @$(call debug_print_list,$(DEP_FILES)) - @echo Stuff to clean: - @$(call debug_print_list,$(STUFF_TO_CLEAN)) - @echo Includes: - @$(call debug_print_list,$(INCLUDES)) - -ifneq "$(OTHER_MAKEFILE_TO_INCLUDE)" "" --include $(OTHER_MAKEFILE_TO_INCLUDE) -endif - - - -st,$(TEST_SRC)) - @echo "Test Object files:" - @$(call debug_print \ No newline at end of file diff --git a/extras/fixture/build/filterGcov.sh b/extras/fixture/build/filterGcov.sh deleted file mode 100644 index a861cf6..0000000 --- a/extras/fixture/build/filterGcov.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/bash -INPUT_FILE=$1 -TEMP_FILE1=${INPUT_FILE}1.tmp -TEMP_FILE2=${INPUT_FILE}2.tmp -TEMP_FILE3=${INPUT_FILE}3.tmp -ERROR_FILE=$2 -OUTPUT_FILE=$3 -HTML_OUTPUT_FILE=$3.html -TEST_RESULTS=$4 - -flattenGcovOutput() { -while read line1 -do - read line2 - echo $line2 " " $line1 - read junk - read junk -done < ${INPUT_FILE} -} - -getRidOfCruft() { -sed '-e s/^Lines.*://g' \ - '-e s/^[0-9]\./ &/g' \ - '-e s/^[0-9][0-9]\./ &/g' \ - '-e s/of.*File/ /g' \ - "-e s/'//g" \ - '-e s/^.*\/usr\/.*$//g' \ - '-e s/^.*\.$//g' -} - -getFileNameRootFromErrorFile() { -sed '-e s/gc..:cannot open .* file//g' ${ERROR_FILE} -} - -writeEachNoTestCoverageFile() { -while read line -do - echo " 0.00% " ${line} -done -} - -createHtmlOutput() { - echo "" - echo "" - sed "-e s/.*% /
CoverageFile
&<\/td>/" \ - "-e s/[a-zA-Z0-9_]*\.[ch][a-z]*/&<\/a><\/td><\/tr>/" - echo "
" - sed "-e s/.*/&
/g" < ${TEST_RESULTS} -} - - -flattenGcovOutput | getRidOfCruft > ${TEMP_FILE1} -getFileNameRootFromErrorFile | writeEachNoTestCoverageFile > ${TEMP_FILE2} -cat ${TEMP_FILE1} ${TEMP_FILE2} | sort | uniq > ${OUTPUT_FILE} -createHtmlOutput < ${OUTPUT_FILE} > ${HTML_OUTPUT_FILE} -rm -f ${TEMP_FILE1} ${TEMP_FILE2} -erageFile" - sed "-e s/.*% /&<\/td>/" \ - "-e s/[a-zA-Z0-9_]*\.[ch][a-z]*/&<\/a><\/td><\/tr>/" - echo "" - sed "-e s/.*/&
/g" < ${TEST_RESULTS \ No newline at end of file diff --git a/targets/gcc_64.yml b/targets/gcc_64.yml new file mode 100644 index 0000000..e49e268 --- /dev/null +++ b/targets/gcc_64.yml @@ -0,0 +1,45 @@ +compiler: + path: gcc + source_path: 'src/' + unit_tests_path: &unit_tests_path 'test/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m64' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] -- GitLab