]>
Commit | Line | Data |
---|---|---|
ce28d7ac MY |
1 | # our default target |
2 | .PHONY: all | |
3 | all: | |
4 | ||
9e414032 MY |
5 | ifeq ($(CONFIG_TPL_BUILD),y) |
6 | src := $(patsubst tpl/%,%,$(obj)) | |
7 | else | |
8 | ifeq ($(CONFIG_SPL_BUILD),y) | |
9 | src := $(patsubst spl/%,%,$(obj)) | |
10 | else | |
11 | src := $(obj) | |
12 | endif | |
13 | endif | |
14 | ||
bf4b3de1 | 15 | include $(srctree)/scripts/Kbuild.include |
9e414032 | 16 | include $(srctree)/config.mk |
ce28d7ac | 17 | |
4a20df39 | 18 | # variable LIB is used in examples/standalone/Makefile |
9e414032 MY |
19 | __LIB := $(obj)/built-in.o |
20 | LIBGCC = $(obj)/libgcc.o | |
ce28d7ac | 21 | SRCS := |
ad71fa99 MY |
22 | subdir-y := |
23 | obj-dirs := | |
ce28d7ac | 24 | |
9e414032 MY |
25 | kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) |
26 | include $(kbuild-dir)/Makefile | |
ce28d7ac | 27 | |
ad71fa99 MY |
28 | # Do not include host rules unless needed |
29 | ifneq ($(hostprogs-y)$(hostprogs-m),) | |
30 | include $(SRCTREE)/scripts/Makefile.host.tmp | |
31 | endif | |
32 | ||
ce28d7ac MY |
33 | # Going forward use the following |
34 | obj-y := $(sort $(obj-y)) | |
35 | extra-y := $(sort $(extra-y)) | |
ad71fa99 | 36 | always := $(sort $(always)) |
ce28d7ac MY |
37 | lib-y := $(sort $(lib-y)) |
38 | ||
ad71fa99 | 39 | subdir-y += $(patsubst %/,%,$(filter %/, $(obj-y))) |
ac7e7353 MY |
40 | obj-y := $(patsubst %/, %/built-in.o, $(obj-y)) |
41 | subdir-obj-y := $(filter %/built-in.o, $(obj-y)) | |
9e414032 MY |
42 | subdir-obj-y := $(addprefix $(obj)/,$(subdir-obj-y)) |
43 | ||
44 | SRCS += $(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 |
47 | SRCS := $(addprefix $(if $(KBUILD_SRC),$(srctree)/$(src)/,$(src)/),$(SRCS)) |
48 | SRCS := $(wildcard $(SRCS)) | |
49 | ||
50 | OBJS := $(addprefix $(obj)/,$(obj-y)) | |
ce28d7ac | 51 | |
e5c5301f | 52 | # $(obj-dirs) is a list of directories that contain object files |
ad71fa99 MY |
53 | |
54 | obj-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 | 62 | LGOBJS := $(addprefix $(obj)/,$(sort $(lib-y))) |
ce28d7ac | 63 | |
9e414032 | 64 | all: $(__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 | ||
69 | ifneq ($(strip $(lib-y)),) | |
70 | all: $(LIBGCC) | |
71 | ||
9e414032 | 72 | $(LIBGCC): $(obj)/.depend $(LGOBJS) |
ce28d7ac MY |
73 | $(call cmd_link_o_target, $(LGOBJS)) |
74 | endif | |
75 | ||
ac7e7353 MY |
76 | ifneq ($(subdir-obj-y),) |
77 | # Descending | |
78 | $(subdir-obj-y): $(subdir-y) | |
ad71fa99 | 79 | endif |
ac7e7353 | 80 | |
ad71fa99 | 81 | ifneq ($(subdir-y),) |
ac7e7353 | 82 | $(subdir-y): FORCE |
9e414032 | 83 | $(MAKE) $(build)=$(obj)/$@ |
ac7e7353 MY |
84 | endif |
85 | ||
ce28d7ac MY |
86 | ######################################################################### |
87 | ||
5651ccff MY |
88 | # Allow boards to use custom optimize flags on a per dir/file basis |
89 | ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(@F)) $(AFLAGS_$(BCURDIR)) | |
90 | ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) | |
91 | EXTRA_CPPFLAGS = $(CPPFLAGS_$(BCURDIR)/$(@F)) $(CPPFLAGS_$(BCURDIR)) | |
92 | ALL_CFLAGS += $(EXTRA_CPPFLAGS) | |
93 | ||
94 | # The _DEP version uses the $< file target (for dependency generation) | |
95 | # See rules.mk | |
96 | EXTRA_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 |
103 | ifneq ($(CHECKSRC),0) |
104 | $(CHECK) $(CHECKFLAGS) $(ALL_CFLAGS) $< | |
105 | endif | |
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 | |
113 | cmd_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 | |
121 | include $(TOPDIR)/rules.mk | |
122 | ||
9e414032 | 123 | sinclude $(obj)/.depend |
ce28d7ac MY |
124 | |
125 | ######################################################################### | |
ac7e7353 MY |
126 | |
127 | .PHONY: FORCE |