From b3d259d970c91fb8ac3b931e5409dd8cecca699f Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Wed, 27 Feb 2013 18:58:30 -0600 Subject: Refactoring of the build system. - Remove unused files for generating LIDs. - Reduce the overall verbosity of the build. - Separate 'config.mk' into a number of smaller, topic-centric files and comment better. - Generalize the 'passes' concept and added an IMAGES pass. - Deprecate most "magic" make variables like EXTRAFOO. - Overall performance improvements. I've tried to reduce the impact of these changes on component-level makefiles. There will be follow-up commit(s) to improve those and decrease the verbosity of some component-owned commands. Change-Id: I6d319f5338eb3946f56b281c3cdd5f341a016fcc Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3368 Reviewed-by: Brian H. Horton Tested-by: Jenkins Server Reviewed-by: ADAM R. MUHLE Reviewed-by: Daniel M. Crowell Reviewed-by: A. Patrick Williams III --- config.mk | 415 +------------------------------------------------------------- 1 file changed, 6 insertions(+), 409 deletions(-) (limited to 'config.mk') diff --git a/config.mk b/config.mk index 834d730a4..83c1e7a3a 100644 --- a/config.mk +++ b/config.mk @@ -20,415 +20,12 @@ # Origin: 30 # # IBM_PROLOG_END_TAG -all: - ${MAKE} gen_pass - ${MAKE} code_pass -## output libs, objs for userdetails parsers -UD_DIR = ${ROOTPATH}/obj/modules/userdetails -UD_OBJS = ${UD_DIR}*.o ${UD_DIR}/*.so ${UD_DIR}/*.a +.DEFAULT_GOAL = all -ifdef MODULE -OBJDIR = ${ROOTPATH}/obj/modules/${MODULE} -BEAMDIR = ${ROOTPATH}/obj/beam/${MODULE} -GENDIR = ${ROOTPATH}/obj/genfiles -GENDIR_PLUGINS = ${ROOTPATH}/obj/genfiles/plugins -IMGDIR = ${ROOTPATH}/img -GCOVNAME = ${MODULE}.lcov -EXTRACOMMONFLAGS += -fPIC -Bsymbolic -Bsymbolic-functions -ifdef STRICT - EXTRACOMMONFLAGS += -Weffc++ -endif -CUSTOMFLAGS += -D__HOSTBOOT_MODULE=${MODULE} -ifndef TESTS -ifdef HOSTBOOT_PROFILE -vpath %.C ${ROOTPATH}/src/sys/prof -OBJS := gcov.o ${OBJS} -endif -endif -LIBS += $(addsuffix .so, $(addprefix lib, ${MODULE})) -MODULE_INIT = ${ROOTPATH}/obj/core/module_init.o -EXTRAINCDIR += ${ROOTPATH}/src/include/usr ${GENDIR} -else -OBJDIR = ${ROOTPATH}/obj/core -BEAMDIR = ${ROOTPATH}/obj/beam/core -GENDIR = ${ROOTPATH}/obj/genfiles -GENDIR_PLUGINS = ${ROOTPATH}/obj/genfiles/plugins -IMGDIR = ${ROOTPATH}/img -EXTRAINCDIR += ${GENDIR} -GCOVNAME = $(notdir $(shell pwd)).lcov -endif -GCOVDIR = ${ROOTPATH}/obj/gcov +MKRULESDIR = $(ROOTPATH)/src/build/mkrules -__internal__comma= , -__internal__empty= -__internal__space=$(__internal__empty) $(__internal__empty) -MAKE_SPACE_LIST = $(subst $(__internal__comma),$(__internal__space),$(1)) - -ifdef HOSTBOOT_DEBUG -ifeq ($(HOSTBOOT_DEBUG),1) - CUSTOMFLAGS += -DHOSTBOOT_DEBUG=1 -else -ifndef MODULE -ifneq (,$(filter kernel,$(call MAKE_SPACE_LIST, $(HOSTBOOT_DEBUG)))) - CUSTOMFLAGS += -DHOSTBOOT_DEBUG=kernel -endif -else -ifneq (,$(filter $(MODULE), $(call MAKE_SPACE_LIST, $(HOSTBOOT_DEBUG)))) - CUSTOMFLAGS += -DHOSTBOOT_DEBUG=$(MODULE) -endif -endif -endif -endif - -ifndef TESTS -ifdef HOSTBOOT_PROFILE -ifndef HOSTBOOT_PROFILE_NO_INSTRUMENT -CUSTOMFLAGS += --coverage -endif -endif -endif - -# Current MCP version -MCP_VER = mcp6 - -TRACEPP = ${ROOTPATH}/src/build/trace/tracepp -CUSTOM_LINKER_EXE = ${ROOTPATH}/src/build/linker/linker -CUSTOM_LINKER = i686-mcp6-jail ${CUSTOM_LINKER_EXE} - -CC_RAW = ppc64-mcp6-gcc -std=c99 -CXX_RAW = ppc64-mcp6-g++ -CC = ${TRACEPP} ${CC_RAW} -CXX = ${TRACEPP} ${CXX_RAW} - -LD = ppc64-mcp6-ld -OBJDUMP = ppc64-mcp6-objdump -GCOV = ppc64-mcp6-gcov -APYFIPSHDR = apyfipshdr -APYRUHHDR = apyruhhdr - -BINFILE_CACHE_LOCALDIR = ${ROOTPATH}/.git/hb_cache/data/ -BINFILE_CACHE_REMOTEDIR = /gsa/ausgsa/projects/h/hostboot/.binary_cache/data/ - -BEAMVER = beam-3.5.2 -BEAMPATH = /afs/rch/projects/esw/beam/${BEAMVER} -BEAMCMD = i686-mcp6-jail ${BEAMPATH}/bin/beam_compile -BEAMFLAGS = \ - --beam::source=${BEAMPATH}/tcl/beam_default_parms.tcl \ - --beam::source=${ROOTPATH}/src/build/beam/compiler_c_config.tcl \ - --beam::source=${ROOTPATH}/src/build/beam/compiler_cpp_config.tcl \ - --beam::exit0 \ - -o /dev/null - -ifdef HOSTBOOT_PROFILE -COMMONFLAGS = -Os -else -COMMONFLAGS = -O3 -endif -COMMONFLAGS += -nostdlib ${EXTRACOMMONFLAGS} -CFLAGS = ${COMMONFLAGS} -mcpu=power7 -nostdinc -g -mno-vsx -mno-altivec\ - -Wall -Werror -mtraceback=no ${CUSTOMFLAGS} -ASMFLAGS = ${COMMONFLAGS} -mcpu=power7 -CXXFLAGS = ${CFLAGS} -nostdinc++ -fno-rtti -fno-exceptions -Wall -LDFLAGS = --nostdlib --sort-common ${COMMONFLAGS} - -ifdef HOSTBOOT_PROFILE - PROFILE_FLAGS_FILTER = $(if $(findstring gcov,$(2)),\ - $(filter-out --coverage,$(1)),\ - $(1)) -else - PROFILE_FLAGS_FILTER = $(1) -endif - -FLAGS_FILTER = $(call PROFILE_FLAGS_FILTER, $(1), $(2)) - -ifdef USE_PYTHON - TESTGEN = ${ROOTPATH}/src/usr/cxxtest/cxxtestgen.py -else - TESTGEN = ${ROOTPATH}/src/usr/cxxtest/cxxtestgen.pl -endif - -ifdef TESTS -ifdef MODULE -OBJS += ${MODULE}.o -EXTRA_OBJS += ${OBJDIR}/${MODULE}.C -vpath %.C ${OBJDIR} $(shell mkdir -p ${OBJDIR}) -else -$(error MODULE must be defined for a testcase.) -endif -endif - - -INCDIR = ${ROOTPATH}/src/include/ -_INCDIRS = ${INCDIR} ${EXTRAINCDIR} -INCFLAGS = $(addprefix -I, ${_INCDIRS} ) -ASMINCFLAGS = $(addprefix $(lastword -Wa,-I), ${_INCDIRS}) - -OBJECTS = $(addprefix ${OBJDIR}/, ${OBJS}) -LIBRARIES = $(addprefix ${IMGDIR}/, ${LIBS}) - -ifdef IMGS -IMGS_ = $(addprefix ${IMGDIR}/, ${IMGS}) -LIDS = $(foreach lid,$(addsuffix _LIDNUMBER, $(IMGS)),$(addprefix ${IMGDIR}/,$(addsuffix .ruhx, $($(lid))))) -IMAGES = $(addsuffix .bin, ${IMGS_}) $(addsuffix .elf, ${IMGS_}) ${LIDS} -#$(addsuffix .ruhx, ${IMGS_}) -IMAGE_EXTRAS = $(addprefix ${IMGDIR}/, hbotStringFile) -endif - -ifdef EXTRA_LIDS -EXTRA_LIDS_ = $(foreach lid,$(addsuffix _LIDNUMBER, $(EXTRA_LIDS)),$(addprefix ${IMGDIR}/,$(addsuffix .lidhdr, $($(lid))))) -endif - -${OBJDIR}/%.o ${OBJDIR}/%.list : %.C - mkdir -p ${OBJDIR} - ${CXX} -c $(call FLAGS_FILTER, ${CXXFLAGS}, $<) $< \ - -o $@ ${INCFLAGS} -iquote . - ${OBJDUMP} -rdlCS $@ > $(basename $@).list - -# Compiling *.cc files -${OBJDIR}/%.o ${OBJDIR}/%.list : %.cc - mkdir -p ${OBJDIR} - ${CXX} -c ${CXXFLAGS} $< -o $@ ${INCFLAGS} -iquote . - ${OBJDUMP} -rdlCS $@ > $(basename $@).list - -${OBJDIR}/%.o ${OBJDIR}/%.list : %.c - mkdir -p ${OBJDIR} - # Override to use C++ compiler in place of C compiler - # CC_OVERRIDE is set in the makefile of the component -ifndef CC_OVERRIDE - ${CC} -c $(call FLAGS_FILTER, ${CFLAGS}, $<) $< \ - -o $@ ${INCFLAGS} -iquote . -else - ${CXX} -c $(call FLAGS_FILTER, ${CXXFLAGS}, $<) $< \ - -o $@ ${INCFLAGS} -iquote . -endif - ${OBJDUMP} -rdlCS $@ > $(basename $@).list - -${OBJDIR}/%.o : %.S - mkdir -p ${OBJDIR} - ${CC} -c ${ASMFLAGS} $< -o $@ ${ASMINCFLAGS} ${INCFLAGS} -iquote . - -${OBJDIR}/%.dep : %.C - mkdir -p ${OBJDIR}; \ - rm -f $@; \ - ${CXX_RAW} -M $(call FLAGS_FILTER, ${CXXFLAGS}, $<) $< \ - -o $@.$$$$ ${INCFLAGS} -iquote .; \ - sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$ - -${OBJDIR}/%.dep : %.cc - mkdir -p ${OBJDIR}; \ - rm -f $@; \ - ${CXX_RAW} -M ${CXXFLAGS} $< -o $@.$$$$ ${INCFLAGS} -iquote .; \ - sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$ - -${OBJDIR}/%.dep : %.c - mkdir -p ${OBJDIR}; \ - rm -f $@; \ - ${CC_RAW} -M $(call FLAGS_FILTER, ${CFLAGS}, $<) $< \ - -o $@.$$$$ ${INCFLAGS} -iquote .; \ - sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$ - -${OBJDIR}/%.dep : %.S - mkdir -p ${OBJDIR}; \ - rm -f $@; \ - ${CC_RAW} -M ${ASMFLAGS} $< -o $@.$$$$ ${ASMINCFLAGS} ${INCFLAGS} -iquote .; \ - sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ - rm -f $@.$$$$ - -ifdef MODULE -${IMGDIR}/%.so : ${OBJECTS} ${ROOTPATH}/src/module.ld ${MODULE_INIT} - ${LD} -shared -z now ${LDFLAGS} \ - $(filter-out ${ROOTPATH}/src/module.ld,$^) \ - -T ${ROOTPATH}/src/module.ld -o $@ -endif - -ifdef TESTS -${OBJDIR}/${MODULE}.C: ${TESTS} - mkdir -p ${OBJDIR} - ${TESTGEN} --hostboot -o $@ ${TESTS} -endif - -# Rules for BINARY_FILES directive. -# -# The BINARY_FILES directives are used to include files out of the binary -# files cache (see 'hb cacheadd' command). This cache exists to keep -# binary files outside of git, because they take a larger space in the git -# database, especially if they change frequently. -# -# The BINARY_FILES variable is a set of : pairs. -# The destination is where the make system should put the file. The hash -# value tells which version of a file to use and it comes from the -# 'hb cacheadd' tool when a version of the file is added to the binary -# files cache. -# -define __BINARY_CACHE_FILE -_BINARYFILES += $(1) - -ifneq "$(wildcard $(addprefix ${BINFILE_CACHE_LOCALDIR},$(2)))" "" -$(1) : $(addprefix $${BINFILE_CACHE_LOCALDIR},$(2)) - echo "$(2) $$<" | sha1sum --check - cp $$< $$@ -else -$(1) : $(addprefix $${BINFILE_CACHE_REMOTEDIR},$(2)) - echo "$(2) $$<" | sha1sum --check - cp $$< $$@ -endif -endef -ifdef BINARY_FILES -$(foreach file,$(BINARY_FILES), \ - $(eval $(call __BINARY_CACHE_FILE, \ - $(firstword $(subst :, ,$(file))), \ - $(lastword $(subst :, ,$(file))) \ - )) \ -) -endif -# end BINARY_FILES rules. - -define ELF_template -$${IMGDIR}/$(1).elf: $$(addprefix $${OBJDIR}/, $$($(1)_OBJECTS)) \ - $${ROOTPATH}/src/kernel.ld - $${LD} -static $${LDFLAGS} \ - $$(addprefix $${OBJDIR}/, $$($(1)_OBJECTS)) \ - $$($(1)_LDFLAGS) -T $${ROOTPATH}/src/kernel.ld -o $$@ -endef -$(foreach img,$(IMGS),$(eval $(call ELF_template,$(img)))) - -${IMGDIR}/%.bin ${IMGDIR}/%.list ${IMGDIR}/%.syms: ${IMGDIR}/%.elf \ - $(wildcard ${IMGDIR}/*.so) $(addprefix ${IMGDIR}/, $($*_DATA_MODULES)) \ - ${CUSTOM_LINKER_EXE} - ${CUSTOM_LINKER} $@ $< \ - $(addprefix ${IMGDIR}/lib, $(addsuffix .so, $($*_MODULES))) \ - --extended=0x40000 ${IMGDIR}/$*_extended.bin \ - $(addprefix ${IMGDIR}/lib, $(addsuffix .so, $($*_EXTENDED_MODULES))) \ - $(addprefix ${IMGDIR}/, $($*_DATA_MODULES)) \ - > ${IMGDIR}/.$*.lnkout - ${ROOTPATH}/src/build/tools/addimgid $@ $< - (cd ${ROOTPATH}; \ - src/build/tools/gensyms $*.bin $*_extended.bin 0x40000000 > ./img/$*.syms ; \ - src/build/tools/genlist $*.bin > ./img/$*.list) - - -define RUHX_template -${IMGDIR}/$$($(1)_LIDNUMBER).ruhx: $${ROOTPATH}/src/build/lids/$(1).lidhdr \ - $${IMGDIR}/$(1).bin - $${APYFIPSHDR} -r $$< -l $${IMGDIR}/$(1).bin -o $${IMGDIR}/$(1).fips - $${APYRUHHDR} -r $$< -l ${IMGDIR}/$(1).fips -o $${IMGDIR}/$$($(1)_LIDNUMBER).ruhx - (rm -f $${IMGDIR}/$(1).fips) - ln -sf $${IMGDIR}/$(1).bin $${IMGDIR}/$$($(1)_LIDNUMBER).lid - ln -sf $${ROOTPATH}/src/build/lids/$(1).lidhdr $${IMGDIR}/$$($(1)_LIDNUMBER).lidhdr -endef -$(foreach img,$(IMGS),$(eval $(call RUHX_template,$(img)))) - -define LIDHDR_template -${IMGDIR}/$$($(1)_LIDNUMBER).lidhdr: $${ROOTPATH}/src/build/lids/$(1).lidhdr - ln -sf $$^ $$@ -endef -$(foreach lid,$(EXTRA_LIDS),$(eval $(call LIDHDR_template,$(lid)))) - -${IMGDIR}/hbotStringFile : ${IMAGES} - ${ROOTPATH}/src/build/trace/tracehash_hb.pl -c -d ${ROOTPATH}/obj -s $@ - -${GENDIR}/hwp_id.html : ${SUBDIRS} - ${ROOTPATH}/src/build/tools/hwp_id.pl -i -l > $@ - -%.d: ${OBJECTS} - cd ${basename $@} && ${MAKE} code_pass - -%.gen_pass: - cd ${basename $@} && ${MAKE} gen_pass - -%.gcov_pass: - cd ${basename $@} && ${MAKE} gcov_pass -ik - -%.clean: - cd ${basename $@} && ${MAKE} clean - -%.beamdir: - cd ${basename $@} && ${MAKE} beam - -code_pass: ${OBJECTS} ${SUBDIRS} ${LIBRARIES} ${EXTRA_LIDS_} ${EXTRA_PARTS} -ifdef IMAGES - ${MAKE} ${IMAGES} ${IMAGE_EXTRAS} ${IMAGE_EXTRA_TARGETS} -endif - -gen_pass: - mkdir -p ${GENDIR} - mkdir -p ${GENDIR_PLUGINS} - ${MAKE} GEN_PASS - -_GENFILES = $(addprefix ${GENDIR}/, $(GENFILES)) -_GENFILES += $(addprefix ${GENDIR_PLUGINS}/, $(GENFILES_PLUGINS)) -GEN_PASS: $(_GENFILES) $(_BINARYFILES) ${SUBDIRS:.d=.gen_pass} - -GENTARGET = $(addprefix %/, $(1)) - -${BEAMDIR}/%.beam : %.C - mkdir -p ${BEAMDIR} - ${BEAMCMD} -I ${INCDIR} ${CXXFLAGS} ${BEAMFLAGS} $< \ - --beam::complaint_file=$@ --beam::parser_file=/dev/null - -${BEAMDIR}/%.beam : %.cc - mkdir -p ${BEAMDIR} - ${BEAMCMD} -I ${INCDIR} ${CXXFLAGS} ${BEAMFLAGS} $< \ - --beam::complaint_file=$@ --beam::parser_file=/dev/null - -${BEAMDIR}/%.beam : %.c - mkdir -p ${BEAMDIR} - ${BEAMCMD} -I ${INCDIR} ${CFLAGS} ${BEAMFLAGS} $< \ - --beam::complaint_file=$@ --beam::parser_file=/dev/null - -${BEAMDIR}/%.beam : %.S - echo Skipping ASM file. - -BEAMOBJS = $(addprefix ${BEAMDIR}/, ${OBJS:.o=.beam}) -beam: ${SUBDIRS:.d=.beamdir} ${BEAMOBJS} - -gcov_pass: - mkdir -p ${GCOVDIR} - ${MAKE} GCOV_PASS - -GCOV_PASS: ${SUBDIRS:.d=.gcov_pass} -ifdef OBJS - cp ${OBJECTS:.o=.gcno} ${OBJECTS:.o=.gcda} . - lcov --directory . -c -o ${GCOVDIR}/${GCOVNAME} \ - --gcov-tool ${GCOV} --ignore-errors source - rm ${OBJS:.o=.gcno} ${OBJS:.o=.gcda} -f -endif - -check_istep_modules: ${OBJS} - listdeps.pl ${IMGDIR} -v - -cleanud : - rm -f ${UD_OBJS} - -clean: cleanud ${SUBDIRS:.d=.clean} - (rm -f ${OBJECTS} ${OBJECTS:.o=.dep} ${OBJECTS:.o=.list} \ - ${OBJECTS:.o=.o.hash} ${OBJECTS:.o=.gcno} ${OBJECTS:.o=.gcda} \ - ${BEAMOBJS} ${LIBRARIES} \ - ${IMAGES} ${IMAGES:.bin=.list} ${IMAGES:.bin=.syms} \ - ${IMAGES:.bin=.bin.modinfo} ${IMAGES:.ruhx=.lid} \ - ${IMAGES:.ruhx=.lidhdr} ${IMAGES:.bin=_extended.bin} \ - ${IMAGE_EXTRAS} ${EXTRA_LIDS_} \ - ${EXTRA_OBJS} ${_GENFILES} ${_BINARYFILES} ${EXTRA_PARTS} ${EXTRA_CLEAN} ) - -cscope: ${SUBDIRS} - mkdir -p ${ROOTPATH}/obj/cscope - (cd ${ROOTPATH}/obj/cscope ; rm -f cscope.* ; \ - find ../../ -name '*.[CHchS]' -type f -fprint cscope.files; \ - cscope -bqk) - -ctags: ${SUBDIRS} - mkdir -p ${ROOTPATH}/obj/cscope - (cd ${ROOTPATH}/obj/cscope ; rm -f tags ; \ - ctags --recurse=yes --fields=+S ../../src) - -ifneq ($(MAKECMDGOALS),clean) -ifneq ($(MAKECMDGOALS),gen_pass) -ifneq ($(MAKECMDGOALS),GEN_PASS) - -include $(OBJECTS:.o=.dep) -endif -endif -endif +include $(MKRULESDIR)/util.mk +include $(MKRULESDIR)/env.mk +include $(MKRULESDIR)/rules.mk +include $(MKRULESDIR)/passes.mk -- cgit v1.2.1