aboutsummaryrefslogtreecommitdiff
path: root/scripts/Makefile.host.tmp
blob: 4b57846f4a3ed1d0ad5275be36defead7f6a5c36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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)