From b0f5d0f4d1d44ced67b6067e04ff96642c20f53a Mon Sep 17 00:00:00 2001 From: tojo Date: Thu, 3 Mar 2011 16:50:31 +0100 Subject: [PATCH] Cleanup of makefiles. Cleanup of merge. --- boards/board_common.mk | 3 + makefile | 23 +++-- scripts/cc_gcc.mk | 6 ++ scripts/gcc_map_memory.awk | 32 ++++++ scripts/rules.mk | 178 +++++++++++++++++++--------------- scripts/version_check.mk | 4 +- system/kernel/kernel_offset.c | 2 +- 7 files changed, 157 insertions(+), 91 deletions(-) create mode 100644 scripts/gcc_map_memory.awk diff --git a/boards/board_common.mk b/boards/board_common.mk index 776d51ab..2e6efe27 100644 --- a/boards/board_common.mk +++ b/boards/board_common.mk @@ -1,4 +1,6 @@ +_BOARD_COMMON_MK:=y # Include guard for backwards compatability + obj-$(CFG_PPC) += crt0.o obj-$(CFG_HC1X) += crt0.o @@ -295,3 +297,4 @@ VPATH += $(vpath-y) # libs needed by us #build-lib-y += $(ROOTDIR)/libs/libboard_$(BOARDDIR).a + diff --git a/makefile b/makefile index ccfb6234..d45c32c4 100644 --- a/makefile +++ b/makefile @@ -11,7 +11,7 @@ # BOARDDIR= # Select what board to build for # BDIR=[,] -# Select what directories to build. The kernel if always built. +# Select what directories to build. The kernel is always built. # CROSS_COMPILE # Specify the compiler to use. # Q=[(@)/empty] @@ -74,20 +74,17 @@ export objdir = obj_$(BOARDDIR) .PHONY: help help: - @echo "Make kernel and a simple example" + @echo "Build a simple example" @echo " > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple all" @echo "" - @echo "Save the config (CROSS_COMPILE and BDIR)" - @echo " > make BOARDDIR=mpc551xsim CROSS_COMPILE=/opt/powerpc-eabi/bin/powerpc-eabi- BDIR=examples/simple save" - @echo "" @echo "Clean" @echo " > make clean" @echo "" @echo "Present config:" - @echo " ARCH=$(ARCH)" - @echo " ARCH_FAM=$(ARCH_FAM)" - @echo " BOARDDIR =$(BOARDDIR)" - @echo " CROSS_COMPILE =$(CROSS_COMPILE)" + @echo " BDIR = ${BDIR}" + @echo " BOARDDIR = $(BOARDDIR)" + @echo " CROSS_COMPILE = $(CROSS_COMPILE)" + @echo " CWD = ${CWD}" @echo "" export CFG_MCU @@ -134,15 +131,17 @@ test: @echo $(all_boards) show_build: - @echo "BUILD INFO" + @echo "" + @echo "==========[ BUILD INFO ]===========" @echo "BOARDDIR: $(BOARDDIR) [$(origin BOARDDIR)]" @echo "BDIR: $(BDIR) [$(origin BDIR)]" @echo "CROSS_COMPILE: $(CROSS_COMPILE) [$(origin CROSS_COMPILE)]" - @echo "cmd_cmd_goals: $(cmd_cmd_goals)" + @echo "CWD: ${CWD}" $(dir_cmd_goals) :: show_build FORCE - @echo ==========[ $@ ]=========== + @echo "" + @echo ==========[ ${abspath $@} ]=========== @if [ ! -d $@ ]; then echo "No such directory: \"$@\" quitting"; exit 1; fi +@[ -d $@/$(objdir) ] || mkdir -p $@/$(objdir) @chmod 777 $@/$(objdir) diff --git a/scripts/cc_gcc.mk b/scripts/cc_gcc.mk index 07372a1e..977561dc 100644 --- a/scripts/cc_gcc.mk +++ b/scripts/cc_gcc.mk @@ -1,5 +1,11 @@ +# Arch specific settings +ifneq ($(ARCH),) + include $(ROOTDIR)/$(ARCH_PATH-y)/scripts/gcc.mk +endif + + HOST := $(shell uname) export prefix diff --git a/scripts/gcc_map_memory.awk b/scripts/gcc_map_memory.awk new file mode 100644 index 00000000..cb8ff95f --- /dev/null +++ b/scripts/gcc_map_memory.awk @@ -0,0 +1,32 @@ + +BEGIN { + kilobyte = 1024 + + print " >> Image size: (decimal)" +} + +/^\.text/ { + text += $3; + rom+=$3 +}; + +/^\.data/ { + data += $3; + rom+=$3; + ram+=$3 +}; + +/^\.bss/ { + bss += $3; + ram+=$3 +}; + +END { + + printf "%-10s %10s %10.1f %s\n", " text:", text " B", text/kilobyte, "kB"; + printf "%-10s %10s %10.1f %s\n", " data:", data " B", data/kilobyte, "kB"; + printf "%-10s %10s %10.1f %s\n", " bss:", bss " B", bss/kilobyte, "kB"; + printf "%-10s %10s %10.1f %s\n", " ROM:", rom " B", rom/kilobyte, "kB"; + printf "%-10s %10s %10.1f %s\n", " RAM:", ram " B", ram/kilobyte, "kB"; + +} \ No newline at end of file diff --git a/scripts/rules.mk b/scripts/rules.mk index aa0b0c59..ddbfac7e 100644 --- a/scripts/rules.mk +++ b/scripts/rules.mk @@ -1,19 +1,30 @@ -CFG_ARCH_$(ARCH):=y - -RELDIR := $(subst $(TOPDIR)/,,$(CURDIR)) -# Create the target name... -target := $(subst /,_,$(SUBDIR)) - -#goal=$(subst /cygdrive/c/,c:/,$(abspath $@)) -#goal=$(abspath $@) -goal=$@ +############################################################################### +# BUILD SETTINGS # +############################################################################### -#===== MODULE CONFIGURATION ===== +# Board settings include $(ROOTDIR)/boards/$(BOARDDIR)/build_config.mk + +# Project settings -include ../build_config.mk +# Perform build system version check +include $(ROOTDIR)/scripts/version_check.mk + + + +############################################################################### +# MODULE CONFIGURATION # +############################################################################### + +# Some useful vars +CFG_ARCH_$(ARCH):=y +RELDIR := $(subst $(TOPDIR)/,,$(CURDIR)) +target := $(subst /,_,$(SUBDIR)) +goal=$@ + define MOD_AVAIL_template MOD_$(1)=y endef @@ -46,7 +57,11 @@ ifneq ($(not_avail),) $(error Trying to build a module that is not available: $(not_avail)) endif -#===== COMPILER CONFIG ===== + + +############################################################################### +# TOOLS CONFIGURATION # +############################################################################### # set debug optimization level as default ifeq ($(SELECT_OPT),) @@ -57,13 +72,8 @@ $(eval CFG_$(SELECT_OPT)=y) ARCH_PATH-y = arch/$(ARCH_FAM)/$(ARCH) -# Include compiler generic and arch specific +# Include compiler settings COMPILER?=gcc -ifeq ($(COMPILER),gcc) - ifneq ($(ARCH),) - include $(ROOTDIR)/$(ARCH_PATH-y)/scripts/gcc.mk - endif -endif include $(ROOTDIR)/scripts/cc_$(COMPILER).mk # Include pclint or splint settings @@ -76,13 +86,21 @@ endif -# Get object files +############################################################################### +# PROJECT MAKEFILE # +############################################################################### + +# Include project makefile include ../makefile -# Perform build system version check -include $(ROOTDIR)/scripts/version_check.mk +# All module object files (guarded for backwards compatability) +ifndef _BOARD_COMMON_MK +include $(ROOTDIR)/boards/board_common.mk +endif + + +##### For backwards compatability with older project makefiles: -##### For backwards compatability with older project makefiles # Remove dependency on libkernel deprecated-libs += $(ROOTDIR)/libs/libkernel_$(ARCH_MCU).a deprecated-libs-included = $(filter $(deprecated-libs),$(libitem-y)) @@ -103,46 +121,20 @@ endif ##### +inc-y += ../include inc-y += $(ROOTDIR)/include inc-y += $(ROOTDIR)/include/$(ARCH_FAM) inc-y += $(ROOTDIR)/include/$(ARCH_FAM)/$(ARCH) - - -.PHONY clean: -clean: FORCE - @-rm -f *.o *.d *.h *.elf *.a *.ldp - -.PHONY config: -config: FORCE - @echo "board modules:" $(MOD_AVAIL) - @echo "example modules:" $(MOD_USE) - @echo $(MOD) ${def-y} - -FORCE: - -$(ROOTDIR)/binaries: - @mkdir -p $@ - -# build- targets are "end" target that the included makefile want's to build -.PHONY all: -all: $(build-exe-y) $(build-hex-y) $(build-lib-y) $(build-bin-y) $(ROOTDIR)/binaries - @cp -v $(build-lib-y) $(build-exe-y) $(build-hex-y) $(build-bin-y) $(ROOTDIR)/binaries - - -# Determine what kind of filetype to build from + VPATH += $(ROOTDIR)/$(SUBDIR)/src VPATH += $(ROOTDIR)/$(SUBDIR) -inc-y += ../include -.SUFFIXES: -# Simple depencendy stuff --include $(subst .o,.d,$(obj-y)) -# Some dependency for xxx_offset.c/h also --include $(subst .h,.d,$(dep-y)) +############################################################################### +# LINT # +############################################################################### -#LINT: LINT_EXCLUDE_PATHS := $(abspath $(LINT_EXCLUDE_PATHS)) $(info $(LINT_EXCLUDE_PATHS)) @@ -173,17 +165,53 @@ endef endif + +############################################################################### +# TOP-LEVEL TARGETS # +############################################################################### + +.PHONY clean: +clean: FORCE + @-rm -f *.o *.d *.h *.elf *.a *.ldp + +.PHONY config: +config: FORCE + @echo "board modules:" $(MOD_AVAIL) + @echo "example modules:" $(MOD_USE) + @echo $(MOD) ${def-y} + +FORCE: + +$(ROOTDIR)/binaries: + @mkdir -p $@ + +.PHONY all: +all: $(build-exe-y) $(build-hex-y) $(build-lib-y) $(build-bin-y) $(ROOTDIR)/binaries + @cp -v $(build-lib-y) $(build-exe-y) $(build-hex-y) $(build-bin-y) $(ROOTDIR)/binaries + + +.SUFFIXES: + + + +############################################################################### +# TARGETS # +############################################################################### + +# Simple depencendy stuff +-include $(subst .o,.d,$(obj-y)) +# Some dependency for xxx_offset.c/h also +-include $(subst .h,.d,$(dep-y)) + # Compile %.o: %.c @echo " >> CC $(notdir $<)" -# compile $(Q)$(CC) -c $(CFLAGS) -o $(goal) $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $(abspath $<) # run lint if enabled $(run_pclint) $(run_splint) # Assembler - %.o: %.s @echo " >> AS $(notdir $<) $(ASFLAGS)" $(Q)$(AS) $(ASFLAGS) -o $(goal) $< @@ -199,61 +227,57 @@ endif inc-y += $(ROOTDIR)/boards/$(BOARDDIR) # Preprocess linker files.. -%.lcf: %.ldf +%.ldp %.lcf: %.ldf @echo " >> CPP $<" $(Q)$(CPP) -E -P $(CPP_ASM_FLAGS) -o $@ $(addprefix -I,$(inc-y)) $(addprefix -D,$(def-y)) $< -# @cat $@ - .PHONY $(ROOTDIR)/libs: $(ROOTDIR)/libs: $(Q)mkdir -p $@ dep-y += $(ROOTDIR)/libs -# lib +# lib output $(build-lib-y): $(dep-y) $(obj-y) @echo " >> AR $@" $(Q)$(AR) -r -o $@ $(obj-y) 2> /dev/null +# hex output $(build-hex-y): $(build-exe-y) @echo " >> OBJCOPY $@" $(Q)$(CROSS_COMPILE)objcopy -O ihex $< $@ +# bin output $(build-bin-y): $(build-exe-y) @echo " >> OBJCOPY $@" $(Q)$(CROSS_COMPILE)objcopy -O binary $< $@ # Linker -# Could use readelf -S instead of parsing the *.map file. $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y) @echo " >> LD $@" ifeq ($(CROSS_COMPILE),) $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y) else $(Q)$(LD) $(LDFLAGS) $(LD_FILE) $(ldcmdfile-y) -o $@ $(libpath-y) $(LD_START_GRP) $(obj-y) $(lib-y) $(libitem-y) $(LD_END_GRP) $(LDMAPFILE) -endif -ifdef CFG_MC912DG128A + ifdef CFG_MC912DG128A + # Print memory layout @$(CROSS_COMPILE)objdump -h $@ | gawk -f $(ROOTDIR)/scripts/hc1x_memory.awk -else -ifeq ($(COMPILER),gcc) - @echo "Image size: (decimal)" - @gawk --non-decimal-data '/^\.text/ { print " text:" $$3+0 " bytes"; rom+=$$3 };\ - /^\.data/ { print " data:" $$3+0 " bytes"; rom+=$$3; ram+=$$3}; \ - /^\.bss/ { print " bss :" $$3+0 " bytes"; ram+=$$3}; \ - END { print " ROM: ~" rom " bytes"; print " RAM: ~" ram " bytes"}' $(subst .elf,.map,$@) -endif # ($(COMPILER),gcc) -ifeq ($(BUILD_LOAD_MODULE),y) + else + ifeq ($(COMPILER),gcc) + # Print memory layout + @echo "" + @gawk --non-decimal-data -f $(ROOTDIR)/scripts/gcc_map_memory.awk $(subst .elf,.map,$@) + endif # ($(COMPILER),gcc) + + ifeq ($(BUILD_LOAD_MODULE),y) @$(CROSS_COMPILE)objcopy -O srec $@ $@.raw.s19 srec_cat $@.raw.s19 --crop 0x8008000 0x803fffc --fill 0x00 0x8008000 0x803fffc --l-e-crc32 0x803fffc -o $@.lm.s19 -endif -endif + endif #($(BUILD_LOAD_MODULE),y) + + endif #CFG_MC912DG128A + +endif #($(CROSS_COMPILE),) @echo @echo " >>>>>>> DONE <<<<<<<<<" @echo - -$(size-exe-y): $(build-exe-y) - $(Q)$(OBJDUMP) -h $< - @echo TODO: Parse the file.... - diff --git a/scripts/version_check.mk b/scripts/version_check.mk index d81e9314..097dc28d 100644 --- a/scripts/version_check.mk +++ b/scripts/version_check.mk @@ -6,7 +6,9 @@ CORE_BUILD_SYSTEM_VERSION_MAJOR = 1 CORE_BUILD_SYSTEM_VERSION_MINOR = 0 CORE_BUILD_SYSTEM_VERSION_PATCH = 0 -ifneq ($(REQUIRED_BUILD_SYSTEM_VERSION),) # Only check if specified +# Only check if specified +# (remove when we want to start checking always) +ifneq ($(REQUIRED_BUILD_SYSTEM_VERSION),) REQUIRED_BUILD_SYSTEM_VERSION:=$(subst ., ,$(REQUIRED_BUILD_SYSTEM_VERSION)) REQUIRED_BUILD_SYSTEM_VERSION_MAJOR=$(word 1,$(REQUIRED_BUILD_SYSTEM_VERSION)) diff --git a/system/kernel/kernel_offset.c b/system/kernel/kernel_offset.c index d576b3ca..6cfae86b 100644 --- a/system/kernel/kernel_offset.c +++ b/system/kernel/kernel_offset.c @@ -21,7 +21,7 @@ #include "pcb.h" //#include "app_i.h" #include "sys.h" -#include "arch_stack.h" +//#include "arch_stack.h" #if defined(__GNUC__) -- 2.39.2