From ad71fa9971aeb0340221f82884b7794c497322be Mon Sep 17 00:00:00 2001 From: Masahiro Yamada Date: Tue, 4 Feb 2014 17:24:09 +0900 Subject: Makefile.host.tmp: add a new script to refactor tools This commit adds scripts/Makefile.host.tmp which will be used in the next commit to convert makefiles under tools/ directory to Kbuild style. Notice this script, scripts/Makefile.host.tmp is temporary. When switching over to real Kbuild, it will be replaced with scripts/Makefile.host of Linux Kernel. Signed-off-by: Masahiro Yamada --- scripts/Makefile.host.tmp | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 scripts/Makefile.host.tmp (limited to 'scripts/Makefile.host.tmp') diff --git a/scripts/Makefile.host.tmp b/scripts/Makefile.host.tmp new file mode 100644 index 0000000000..4b57846f4a --- /dev/null +++ b/scripts/Makefile.host.tmp @@ -0,0 +1,61 @@ + +__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m)) + +# C code +# Executables compiled from a single .c file +host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m))) + +# C executables linked based on several .o files +host-cmulti := $(foreach m,$(__hostprogs),$(if $($(m)-objs),$(m))) + +# Object (.o) files compiled from .c files +host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs))) + +# output directory for programs/.o files +# hostprogs-y := tools/build may have been specified. Retrieve directory +host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f)))) +# directory of .o files from prog-objs notation +host-objdirs += $(foreach f,$(host-cmulti), \ + $(foreach m,$($(f)-objs), \ + $(if $(dir $(m)),$(dir $(m))))) + +host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs)))) + +__hostprogs := $(addprefix $(obj),$(__hostprogs)) +host-csingle := $(addprefix $(obj),$(host-csingle)) +host-cmulti := $(addprefix $(obj),$(host-cmulti)) +host-cobjs := $(addprefix $(obj),$(host-cobjs)) +host-objdirs := $(addprefix $(obj),$(host-objdirs)) + +obj-dirs += $(host-objdirs) + +##### +# Handle options to gcc. Support building with separate output directory + +_hostc_flags = $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ + $(HOSTCFLAGS_$(basetarget).o) + +# Find all -I options and call addtree +flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o))) + +ifeq ($(OBJTREE),$(SRCTREE)) +__hostc_flags = $(_hostc_flags) +else +__hostc_flags = -I$(obj) $(call flags,_hostc_flags) +endif + +hostc_flags = $(__hostc_flags) + +##### +# Compile programs on the host + +$(host-csingle): $(obj)%: %.c + $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(HOSTLDFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< + +$(host-cmulti): $(obj)%: $(host-cobjs) + $(HOSTCC) $(HOSTLDFLAGS) -o $@ $(addprefix $(obj),$($(@F)-objs)) $(HOSTLOADLIBES_$(@F)) + +$(host-cobjs): $(obj)%.o: %.c + $(HOSTCC) $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS_$(@F)) $(HOSTCFLAGS_$(BCURDIR)) -o $@ $< -c + +targets += $(host-csingle) $(host-cmulti) $(host-cobjs) -- cgit v1.2.1