From 706243ac48cf646d503a3f1ec9e6a28c916694bd Mon Sep 17 00:00:00 2001 From: Patrick Williams Date: Sat, 5 Mar 2011 10:01:45 -0600 Subject: Merge of PowerHAL project up to commit: dd45c30bd53d8e6c123165b83842d08117558a3c --- config.mk | 166 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 140 insertions(+), 26 deletions(-) (limited to 'config.mk') diff --git a/config.mk b/config.mk index f9030a4fd..f345d6501 100644 --- a/config.mk +++ b/config.mk @@ -1,69 +1,183 @@ -all: ALL +all: ALL ${EXTRA_PARTS} ifdef MODULE OBJDIR = ${ROOTPATH}/obj/modules/${MODULE} +BEAMDIR = ${ROOTPATH}/obj/beam/${MODULE} IMGDIR = ${ROOTPATH}/img -EXTRACOMMONFLAGS += -fPIC +EXTRACOMMONFLAGS += -fPIC -Bsymbolic -Bsymbolic-functions +LIBS += $(addsuffix .so, $(addprefix lib, ${MODULE})) +MODULE_INIT = ${ROOTPATH}/obj/core/module_init.o else -OBJDIR = ${ROOTPATH}/obj/hbicore +OBJDIR = ${ROOTPATH}/obj/core +BEAMDIR = ${ROOTPATH}/obj/beam/core IMGDIR = ${ROOTPATH}/img endif -CUSTOM_LINKER = i686-mcp6-jail ${ROOTPATH}/src/build/linker/linker TRACEPP = ${ROOTPATH}/src/build/trace/tracepp +CUSTOM_LINKER_EXE = ${ROOTPATH}/src/build/linker/linker +CUSTOM_LINKER = i686-mcp6-jail ${CUSTOM_LINKER_EXE} CC = ${TRACEPP} ppc64-mcp6-gcc CXX = ${TRACEPP} ppc64-mcp6-g++ LD = ppc64-mcp6-ld +OBJDUMP = ppc64-mcp6-objdump +APYFIPSHDR = apyfipshdr +APYRUHHDR = apyruhhdr + +BEAMVER = beam-3.5.2 +BEAMPATH = /afs/rch/projects/esw/beam/${BEAMVER} +BEAMCMD = i686-mcp6-jail ${BEAMPATH}/bin/beam_compile +BEAMFLAGS = \ + --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 COMMONFLAGS = -O3 -nostdlib ${EXTRACOMMONFLAGS} CFLAGS = ${COMMONFLAGS} -mcpu=power7 -nostdinc -g -msoft-float -mno-altivec \ - -Wall + -Wall -Werror ASMFLAGS = ${COMMONFLAGS} -mcpu=power7 CXXFLAGS = ${CFLAGS} -nostdinc++ -fno-rtti -fno-exceptions -Wall LDFLAGS = --nostdlib --sort-common ${COMMONFLAGS} -LDMAPFLAGS = -Map $@.map INCDIR = ${ROOTPATH}/src/include/ OBJECTS = $(addprefix ${OBJDIR}/, ${OBJS}) LIBRARIES = $(addprefix ${IMGDIR}/, ${LIBS}) -${OBJDIR}/%.o : %.C +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_}) +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 ${CXXFLAGS} $< -o $@ -I ${INCDIR} + ${OBJDUMP} -dCS $@ > $(basename $@).list -${OBJDIR}/%.o : %.c +${OBJDIR}/%.o ${OBJDIR}/%.list : %.c mkdir -p ${OBJDIR} - ${CC} -c ${CFLAGS} $< -o $@ -I ${INCDIR} + ${CC} -c ${CFLAGS} -std=c99 $< -o $@ -I ${INCDIR} + ${OBJDUMP} -dCS $@ > $(basename $@).list ${OBJDIR}/%.o : %.S mkdir -p ${OBJDIR} - ${CC} -c ${ASMFLAGS} $< -o $@ -Wa,-I${INCDIR} + ${CC} -c ${ASMFLAGS} $< -o $@ -Wa,-I${INCDIR} -I${INCDIR} + +${OBJDIR}/%.dep : %.C + mkdir -p ${OBJDIR}; \ + rm -f $@; \ + ${CXX} -M ${CXXFLAGS} $< -o $@.$$$$ -I ${INCDIR}; \ + sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + +${OBJDIR}/%.dep : %.c + mkdir -p ${OBJDIR}; \ + rm -f $@; \ + ${CC} -M ${CFLAGS} -std=c99 $< -o $@.$$$$ -I ${INCDIR}; \ + sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ + +${OBJDIR}/%.dep : %.S + mkdir -p ${OBJDIR}; \ + rm -f $@; \ + ${CC} -M ${ASMFLAGS} $< -o $@.$$$$ -Wa,-I${INCDIR} -I${INCDIR}; \ + sed 's,\($*\)\.o[ :]*,${OBJDIR}/\1.o $@ : ,g' < $@.$$$$ > $@; \ + rm -f $@.$$$$ -${IMGDIR}/%.so : ${OBJECTS} ${ROOTPATH}/src/module.ld - ${LD} -shared -z now --gc-sections ${LDFLAGS} $< \ +ifdef MODULE +${IMGDIR}/%.so : ${OBJECTS} ${ROOTPATH}/src/module.ld ${MODULE_INIT} ${SUBDIRS} + ${LD} -shared -z now ${LDFLAGS} \ + $(filter-out ${ROOTPATH}/src/module.ld,$^) \ -T ${ROOTPATH}/src/module.ld -o $@ +endif -${IMGDIR}/%.elf: kernel.ld ${OBJDIR}/*.o ${ROOTPATH}/src/kernel.ld - ${LD} -static ${LDFLAGS} ${LDMAPFLAGS} ${OBJDIR}/*.o \ - -T ${ROOTPATH}/src/kernel.ld -o $@ - -${IMGDIR}/%.bin: ${IMGDIR}/%.elf $(wildcard ${IMGDIR}/*.so) - ${CUSTOM_LINKER} $@ $^ - -%.d: +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) ${CUSTOM_LINKER_EXE} + ${CUSTOM_LINKER} $@ $< \ + $(addprefix ${IMGDIR}/lib, $(addsuffix .so, \ + $($*_MODULES))) > ${IMGDIR}/.$*.lnkout + ${ROOTPATH}/src/build/tools/addimgid $@ $< + (cd ${ROOTPATH}; \ + src/build/tools/gensyms $*.bin > ./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)))) + +%.d: ${OBJECTS} cd ${basename $@} && ${MAKE} %.clean: cd ${basename $@} && ${MAKE} clean -ALL: ${SUBDIRS} ${OBJECTS} ${LIBRARIES} +%.beamdir: + cd ${basename $@} && ${MAKE} beam + +ALL: ${OBJECTS} ${SUBDIRS} ${LIBRARIES} ${EXTRA_LIDS_} ifdef IMAGES - ${MAKE} ${IMAGES} + ${MAKE} ${IMAGES} endif -clean: $(patsubst %.d,%.clean, ${SUBDIRS}) - (rm -f ${OBJECTS} $(addsuffix .hash, ${OBJECTS}) ${LIBRARIES} \ - ${IMAGES} $(addsuffix .map, ${IMAGES}) ) - +${BEAMDIR}/%.beam : %.C + mkdir -p ${BEAMDIR} + ${BEAMCMD} -I ${INCDIR} ${CXXFLAGS} ${BEAMFLAGS} $< \ + --beam::complaint_file=$@ --beam::parser_file=$@ + +${BEAMDIR}/%.beam : %.c + mkdir -p ${BEAMDIR} + ${BEAMCMD} -I ${INCDIR} ${CXXFLAGS} ${BEAMFLAGS} $< \ + --beam::complaint_file=$@ --beam::parser_file=$@ + +${BEAMDIR}/%.beam : %.S + echo Skipping ASM file. + +BEAMOBJS = $(addprefix ${BEAMDIR}/, ${OBJS:.o=.beam}) +beam: ${SUBDIRS:.d=.beamdir} ${BEAMOBJS} + +clean: ${SUBDIRS:.d=.clean} + (rm -f ${OBJECTS} ${OBJECTS:.o=.dep} ${OBJECTS:.o=.list} \ + ${BEAMOBJS} ${LIBRARIES} \ + ${IMAGES} ${IMAGES:.bin=.list} ${IMAGES:.bin=.syms} \ + ${IMAGES:.bin=.bin.modinfo} ${IMAGES:.ruhx=.lid} \ + ${IMAGES:.ruhx=.lidhdr} ${EXTRA_LIDS_}) + +cscope: ALL + mkdir -p ${ROOTPATH}/obj/cscope + (cd ${ROOTPATH}/obj/cscope ; rm -f cscope.* ; \ + find ../../ -name '*.[CHchS]' -fprint cscope.files; \ + cscope -bqk) + +ifneq ($(MAKECMDGOALS),clean) + include $(OBJECTS:.o=.dep) +endif -- cgit v1.2.1