]> git.ipfire.org Git - people/ms/u-boot.git/blame - scripts/Makefile.build
kbuild: change out-of-tree build
[people/ms/u-boot.git] / scripts / Makefile.build
CommitLineData
ce28d7ac
MY
1# our default target
2.PHONY: all
3all:
4
9e414032
MY
5ifeq ($(CONFIG_TPL_BUILD),y)
6 src := $(patsubst tpl/%,%,$(obj))
7else
8 ifeq ($(CONFIG_SPL_BUILD),y)
9 src := $(patsubst spl/%,%,$(obj))
10 else
11 src := $(obj)
12 endif
13endif
14
bf4b3de1 15include $(srctree)/scripts/Kbuild.include
9e414032 16include $(srctree)/config.mk
ce28d7ac 17
4a20df39 18# variable LIB is used in examples/standalone/Makefile
9e414032
MY
19__LIB := $(obj)/built-in.o
20LIBGCC = $(obj)/libgcc.o
ce28d7ac 21SRCS :=
ad71fa99
MY
22subdir-y :=
23obj-dirs :=
ce28d7ac 24
9e414032
MY
25kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
26include $(kbuild-dir)/Makefile
ce28d7ac 27
ad71fa99
MY
28# Do not include host rules unless needed
29ifneq ($(hostprogs-y)$(hostprogs-m),)
30include $(SRCTREE)/scripts/Makefile.host.tmp
31endif
32
ce28d7ac
MY
33# Going forward use the following
34obj-y := $(sort $(obj-y))
35extra-y := $(sort $(extra-y))
ad71fa99 36always := $(sort $(always))
ce28d7ac
MY
37lib-y := $(sort $(lib-y))
38
ad71fa99 39subdir-y += $(patsubst %/,%,$(filter %/, $(obj-y)))
ac7e7353
MY
40obj-y := $(patsubst %/, %/built-in.o, $(obj-y))
41subdir-obj-y := $(filter %/built-in.o, $(obj-y))
9e414032
MY
42subdir-obj-y := $(addprefix $(obj)/,$(subdir-obj-y))
43
44SRCS += $(obj-y:.o=.c) $(obj-y:.o=.S) $(lib-y:.o=.c) \
45 $(lib-y:.o=.S) $(extra-y:.o=.c) $(extra-y:.o=.S)
ac7e7353 46
9e414032
MY
47SRCS := $(addprefix $(if $(KBUILD_SRC),$(srctree)/$(src)/,$(src)/),$(SRCS))
48SRCS := $(wildcard $(SRCS))
49
50OBJS := $(addprefix $(obj)/,$(obj-y))
ce28d7ac 51
e5c5301f 52# $(obj-dirs) is a list of directories that contain object files
ad71fa99
MY
53
54obj-dirs += $(dir $(OBJS))
e5c5301f 55
9e414032
MY
56_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
57
e5c5301f
MY
58# Create directories for object files if directory does not exist
59# Needed when obj-y := dir/file.o syntax is used
60_dummy := $(foreach d,$(obj-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
61
9e414032 62LGOBJS := $(addprefix $(obj)/,$(sort $(lib-y)))
ce28d7ac 63
9e414032 64all: $(__LIB) $(addprefix $(obj)/,$(extra-y) $(always)) $(subdir-y)
ce28d7ac 65
9e414032 66$(__LIB): $(obj)/.depend $(OBJS)
ce28d7ac
MY
67 $(call cmd_link_o_target, $(OBJS))
68
69ifneq ($(strip $(lib-y)),)
70all: $(LIBGCC)
71
9e414032 72$(LIBGCC): $(obj)/.depend $(LGOBJS)
ce28d7ac
MY
73 $(call cmd_link_o_target, $(LGOBJS))
74endif
75
ac7e7353
MY
76ifneq ($(subdir-obj-y),)
77# Descending
78$(subdir-obj-y): $(subdir-y)
ad71fa99 79endif
ac7e7353 80
ad71fa99 81ifneq ($(subdir-y),)
ac7e7353 82$(subdir-y): FORCE
9e414032 83 $(MAKE) $(build)=$(obj)/$@
ac7e7353
MY
84endif
85
ce28d7ac
MY
86#########################################################################
87
5651ccff
MY
88# Allow boards to use custom optimize flags on a per dir/file basis
89ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(@F)) $(AFLAGS_$(BCURDIR))
90ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR))
91EXTRA_CPPFLAGS = $(CPPFLAGS_$(BCURDIR)/$(@F)) $(CPPFLAGS_$(BCURDIR))
92ALL_CFLAGS += $(EXTRA_CPPFLAGS)
93
94# The _DEP version uses the $< file target (for dependency generation)
95# See rules.mk
96EXTRA_CPPFLAGS_DEP = $(CPPFLAGS_$(BCURDIR)/$(addsuffix .o,$(basename $<))) \
97 $(CPPFLAGS_$(BCURDIR))
9e414032 98$(obj)/%.s: $(src)/%.S
5651ccff 99 $(CPP) $(ALL_AFLAGS) -o $@ $<
9e414032 100$(obj)/%.o: $(src)/%.S
5651ccff 101 $(CC) $(ALL_AFLAGS) -o $@ $< -c
9e414032 102$(obj)/%.o: $(src)/%.c
5651ccff
MY
103ifneq ($(CHECKSRC),0)
104 $(CHECK) $(CHECKFLAGS) $(ALL_CFLAGS) $<
105endif
106 $(CC) $(ALL_CFLAGS) -o $@ $< -c
9e414032 107$(obj)/%.i: $(src)/%.c
5651ccff 108 $(CPP) $(ALL_CFLAGS) -o $@ $< -c
9e414032 109$(obj)/%.s: $(src)/%.c
5651ccff
MY
110 $(CC) $(ALL_CFLAGS) -o $@ $< -c -S
111
112# If the list of objects to link is empty, just create an empty built-in.o
113cmd_link_o_target = $(if $(strip $1),\
114 $(LD) $(LDFLAGS) -r -o $@ $1,\
115 rm -f $@; $(AR) rcs $@ )
116
117#########################################################################
118
9e414032 119# defines $(obj)/.depend target
ce28d7ac
MY
120
121include $(TOPDIR)/rules.mk
122
9e414032 123sinclude $(obj)/.depend
ce28d7ac
MY
124
125#########################################################################
ac7e7353
MY
126
127.PHONY: FORCE