1ifeq ($(RUMPRUN_MKCONF),) 2$(error RUMPRUN_MKCONF missing) 3endif 4 5include ${RUMPRUN_MKCONF} 6ifeq (${BUILDRUMP_TOOLFLAGS},) 7$(error invalid config file ${RUMPRUN_MKCONF}) 8endif 9include ${BUILDRUMP_TOOLFLAGS} 10 11TOOLOBJ:= ${RROBJ}/app-tools 12 13_CCVARIANT:=$(shell ${RUMPMAKE} -f bsd.own.mk -V '$${HAVE_LLVM:Dclang:Ugcc}') 14_CXXVARIANT:=$(shell ${RUMPMAKE} -f bsd.own.mk -V '$${HAVE_LLVM:Dclang++:Ug++}') 15MACHINE_GNU_PLATFORM:=\ 16 $(shell ${RUMPMAKE} -f bsd.own.mk -V '$${MACHINE_GNU_PLATFORM}') 17 18_FILES= toolchain.cmake recipe.s 19FILES= $(_FILES:%=$(TOOLTUPLE)-%) 20 21SPECS_ARCH:= specs-compile_or_ferment specs-stub 22SPECS_MACH:= specs-bake 23SPECS:= ${SPECS_ARCH} ${SPECS_MACH} 24 25_BIN_G= ar as cpp ld nm objcopy objdump ranlib readelf size strings strip 26BIN_G= $(_BIN_G:%=$(TOOLTUPLE)-%) 27BIN_G+= $(TOOLTUPLE)-$(_CCVARIANT) 28CCWRP= ${CC} 29ifeq (${CONFIG_CXX},yes) 30BIN_G+= $(TOOLTUPLE)-$(_CXXVARIANT) 31CCWRP+= ${CXX} 32endif 33BIN_G+= rumprun-bake 34BIN_G+= $(TOOLTUPLE)-cookfs 35STATICBIN= rumprun rumpstop 36 37GENS.bin= ${BIN_G:%=${TOOLOBJ}/%} 38GENS.files= ${FILES:%=${TOOLOBJ}/%} 39GENS.archspecs= ${SPECS_ARCH:%=${TOOLOBJ}/%} 40GENS.machspecs= ${SPECS_MACH:%=${TOOLOBJ}/%} 41GENS= ${GENS.bin} ${GENS.files} ${GENS.archspecs} ${GENS.machspecs} 42 43.PHONY: app-tools 44app-tools: ${GENS} 45 46include ../global.mk 47LDFLAGS_BAKE:= ${LDFLAGS.${MACHINE_GNU_ARCH}.${PLATFORM}} 48 49BRSOURCEDIR:=$(dir ${AR}) 50BRLIBEXECINST:= ${INSTALLDIR}/libexec/rumprun-${MACHINE_GNU_ARCH}-${PLATFORM}/ 51BRLIBEXECDEST:= ${RRDEST}/libexec/rumprun-${MACHINE_GNU_ARCH}-${PLATFORM}/ 52 53INSTALLDIR_ARCH:= ${INSTALLDIR}/rumprun-${MACHINE_GNU_ARCH} 54 55ARCHDIR:= rumprun-${MACHINE_GNU_ARCH} 56MACHDIR:= rumprun-${MACHINE_GNU_ARCH}-${PLATFORM} 57 58LIBEXEC_CC:= $(subst ${BRSOURCEDIR},${BRLIBEXECDEST},${CC}) 59LIBEXEC_CXX:= $(subst ${BRSOURCEDIR},${BRLIBEXECDEST},${CXX}) 60LIBEXEC_OBJCOPY:= ${BRLIBEXECDEST}/${MACHINE_GNU_PLATFORM}-objcopy 61LIBEXEC_SIZE:= ${BRLIBEXECDEST}/${MACHINE_GNU_PLATFORM}-size 62LIBEXEC_READELF:= ${BRLIBEXECDEST}/${MACHINE_GNU_PLATFORM}-readelf 63 64TOOLS_CC := ${RRDEST}/bin/$(TOOLTUPLE)-${_CCVARIANT} 65TOOLS_CXX := ${RRDEST}/bin/$(TOOLTUPLE)-${_CXXVARIANT} 66 67${TOOLOBJ}: 68 mkdir -p "$@" 69 70define templ 71${TOOLOBJ}/${2}: ${1} Makefile ${TOOLOBJ} 72 sed <$$< > $$@ \ 73 -e 's#!LIBEXEC_CC!#$(LIBEXEC_CC)#g;' \ 74 -e 's#!LIBEXEC_CXX!#$(LIBEXEC_CXX)#g;' \ 75 -e 's#!LIBEXEC_OBJCOPY!#$(LIBEXEC_OBJCOPY)#g;' \ 76 -e 's#!LIBEXEC_READELF!#$(LIBEXEC_READELF)#g;' \ 77 -e 's#!LIBEXEC_SIZE!#$(LIBEXEC_SIZE)#g;' \ 78 -e 's#!TOOLS_CC!#$(TOOLS_CC)#g;' \ 79 -e 's#!TOOLS_CXX!#$(TOOLS_CXX)#g;' \ 80 -e 's#!MACHINE_GNU_ARCH!#$(MACHINE_GNU_ARCH)#g;' \ 81 -e 's#!TOOLTUPLE!#$(TOOLTUPLE)#g;' \ 82 -e 's#!DESTDIR!#$(RRDEST)#g;' \ 83 -e 's#!PLATFORM!#$(PLATFORM)#g;' \ 84 -e 's#!CPPFLAGS!#$(BUILDRUMP_TOOL_CPPFLAGS)#g;' \ 85 -e 's#!CFLAGS!#$(BUILDRUMP_TOOL_CFLAGS)#g;' \ 86 -e 's#!EXTRACCFLAGS!#$(EXTRACCFLAGS)#g;' \ 87 -e 's#!CXXFLAGS!#$(BUILDRUMP_TOOL_CXXFLAGS)#g;' \ 88 -e 's#!LDFLAGS_BAKE!#$(LDFLAGS_BAKE)#g;' 89 chmod 755 $$@ 90endef 91$(foreach file,${_FILES},$(eval $(call templ,${file}.in,${TOOLTUPLE}-${file}))) 92$(foreach spec,${SPECS},$(eval $(call templ,${spec}.in,${spec}))) 93$(eval $(call templ,cc.in,$(TOOLTUPLE)-${_CCVARIANT})) 94$(eval $(call templ,cc.in,$(TOOLTUPLE)-${_CXXVARIANT})) 95$(eval $(call templ,specs-bake.in,specs-bake-$(TOOLTUPLE)-$(PLATFORM))) 96$(eval $(call templ,rumprun-bake.in,rumprun-bake)) 97$(eval $(call templ,cookfs.in,$(TOOLTUPLE)-cookfs)) 98 99define binwrapper 100uptool_$1=$(shell echo $1 | tr '[:lower:]' '[:upper:]') 101toolval_$1=$${$${uptool_$1}} 102${TOOLOBJ}/$(TOOLTUPLE)-$1: ${TOOLOBJ} 103 printf '#!/bin/sh\n\nexec %s "$$$${@}"\n' \ 104 $$(subst ${BRSOURCEDIR},${BRLIBEXECDEST},$${toolval_${1}}) > $$@ 105 chmod 755 $$@ 106 107BRTOOLS+= $${toolval_${1}} 108endef 109$(foreach t,${_BIN_G},$(eval $(call binwrapper,${t}))) 110 111${BRLIBEXECINST}: 112 mkdir -p $@ 113 114${INSTALLDIR}/etc: 115 mkdir -p $@ 116 117${INSTALLDIR_ARCH}/share: 118 mkdir -p $@ 119 120install-buildrumpwrappers: ${BRLIBEXECINST} ${BRTOOLS} 121 install -m 0755 ${BRTOOLS} ${CCWRP} ${BRLIBEXECINST} 122 install -m 0755 ${BRSOURCEDIR}/brprintmetainfo ${BRLIBEXECINST} 123 124install-bins: ${GENS.bin} ${STATICBIN} 125 install -m 0755 ${GENS.bin} ${INSTALLDIR}/bin 126 install -m 0755 ${STATICBIN} ${INSTALLDIR}/bin 127 ln -f ${INSTALLDIR}/bin/rumprun-bake ${INSTALLDIR}/bin/rumpbake 128 129install-files: ${GENS.files} ${GENS.archspecs} ${GENS.machspecs} \ 130 ${INSTALLDIR}/etc ${INSTALLDIR_ARCH}/share 131 install -m 0644 ${GENS.files} ${INSTALLDIR_ARCH}/share 132 install -m 0644 ${GENS.archspecs} ${INSTALLDIR_ARCH}/lib 133 install -m 0644 ${GENS.machspecs} ${INSTALLDIR_ARCH}/lib/rumprun-${PLATFORM} 134 install -m 0644 rumprun-bake.conf ${INSTALLDIR}/etc 135 136install: install-buildrumpwrappers install-bins install-files 137 138clean: 139 rm -f ${GENS} 140