summaryrefslogtreecommitdiffstats
path: root/config.mk
diff options
context:
space:
mode:
Diffstat (limited to 'config.mk')
-rw-r--r--config.mk166
1 files changed, 140 insertions, 26 deletions
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
OpenPOWER on IntegriCloud