Skip to content

Commit 22433fc

Browse files
masahir0ytrini
authored andcommitted
kbuild: import more build scripts from Linux v3.13 tag
This commit imports build scripts from Linux Kernel v3.13 as they are. I know they include some trailing spaces but I am intentionally keeping them untouched. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
1 parent ec626f1 commit 22433fc

File tree

8 files changed

+1663
-0
lines changed

8 files changed

+1663
-0
lines changed

scripts/Makefile.build

Lines changed: 479 additions & 0 deletions
Large diffs are not rendered by default.

scripts/Makefile.clean

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# ==========================================================================
2+
# Cleaning up
3+
# ==========================================================================
4+
5+
src := $(obj)
6+
7+
PHONY := __clean
8+
__clean:
9+
10+
# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
11+
# Usage:
12+
# $(Q)$(MAKE) $(clean)=dir
13+
clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
14+
15+
# The filename Kbuild has precedence over Makefile
16+
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
17+
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
18+
19+
# Figure out what we need to build from the various variables
20+
# ==========================================================================
21+
22+
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y)))
23+
subdir-y += $(__subdir-y)
24+
__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m)))
25+
subdir-m += $(__subdir-m)
26+
__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n)))
27+
subdir-n += $(__subdir-n)
28+
__subdir- := $(patsubst %/,%,$(filter %/, $(obj-)))
29+
subdir- += $(__subdir-)
30+
31+
# Subdirectories we need to descend into
32+
33+
subdir-ym := $(sort $(subdir-y) $(subdir-m))
34+
subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-))
35+
36+
# Add subdir path
37+
38+
subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
39+
40+
# build a list of files to remove, usually relative to the current
41+
# directory
42+
43+
__clean-files := $(extra-y) $(always) \
44+
$(targets) $(clean-files) \
45+
$(host-progs) \
46+
$(hostprogs-y) $(hostprogs-m) $(hostprogs-)
47+
48+
__clean-files := $(filter-out $(no-clean-files), $(__clean-files))
49+
50+
# as clean-files is given relative to the current directory, this adds
51+
# a $(obj) prefix, except for absolute paths
52+
53+
__clean-files := $(wildcard \
54+
$(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \
55+
$(filter /%, $(__clean-files)))
56+
57+
# as clean-dirs is given relative to the current directory, this adds
58+
# a $(obj) prefix, except for absolute paths
59+
60+
__clean-dirs := $(wildcard \
61+
$(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \
62+
$(filter /%, $(clean-dirs)))
63+
64+
# ==========================================================================
65+
66+
quiet_cmd_clean = CLEAN $(obj)
67+
cmd_clean = rm -f $(__clean-files)
68+
quiet_cmd_cleandir = CLEAN $(__clean-dirs)
69+
cmd_cleandir = rm -rf $(__clean-dirs)
70+
71+
72+
__clean: $(subdir-ymn)
73+
ifneq ($(strip $(__clean-files)),)
74+
+$(call cmd,clean)
75+
endif
76+
ifneq ($(strip $(__clean-dirs)),)
77+
+$(call cmd,cleandir)
78+
endif
79+
ifneq ($(strip $(clean-rule)),)
80+
+$(clean-rule)
81+
endif
82+
@:
83+
84+
85+
# ===========================================================================
86+
# Generic stuff
87+
# ===========================================================================
88+
89+
# Descending
90+
# ---------------------------------------------------------------------------
91+
92+
PHONY += $(subdir-ymn)
93+
$(subdir-ymn):
94+
$(Q)$(MAKE) $(clean)=$@
95+
96+
# If quiet is set, only print short version of command
97+
98+
cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
99+
100+
101+
# Declare the contents of the .PHONY variable as phony. We keep that
102+
# information in a variable se we can use it in if_changed and friends.
103+
104+
.PHONY: $(PHONY)

scripts/Makefile.host

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
# ==========================================================================
2+
# Building binaries on the host system
3+
# Binaries are used during the compilation of the kernel, for example
4+
# to preprocess a data file.
5+
#
6+
# Both C and C++ are supported, but preferred language is C for such utilities.
7+
#
8+
# Sample syntax (see Documentation/kbuild/makefiles.txt for reference)
9+
# hostprogs-y := bin2hex
10+
# Will compile bin2hex.c and create an executable named bin2hex
11+
#
12+
# hostprogs-y := lxdialog
13+
# lxdialog-objs := checklist.o lxdialog.o
14+
# Will compile lxdialog.c and checklist.c, and then link the executable
15+
# lxdialog, based on checklist.o and lxdialog.o
16+
#
17+
# hostprogs-y := qconf
18+
# qconf-cxxobjs := qconf.o
19+
# qconf-objs := menu.o
20+
# Will compile qconf as a C++ program, and menu as a C program.
21+
# They are linked as C++ code to the executable qconf
22+
23+
# hostprogs-y := conf
24+
# conf-objs := conf.o libkconfig.so
25+
# libkconfig-objs := expr.o type.o
26+
# Will create a shared library named libkconfig.so that consists of
27+
# expr.o and type.o (they are both compiled as C code and the object files
28+
# are made as position independent code).
29+
# conf.c is compiled as a C program, and conf.o is linked together with
30+
# libkconfig.so as the executable conf.
31+
# Note: Shared libraries consisting of C++ files are not supported
32+
33+
__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
34+
35+
# C code
36+
# Executables compiled from a single .c file
37+
host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
38+
39+
# C executables linked based on several .o files
40+
host-cmulti := $(foreach m,$(__hostprogs),\
41+
$(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
42+
43+
# Object (.o) files compiled from .c files
44+
host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
45+
46+
# C++ code
47+
# C++ executables compiled from at least on .cc file
48+
# and zero or more .c files
49+
host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
50+
51+
# C++ Object (.o) files compiled from .cc files
52+
host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
53+
54+
# Shared libaries (only .c supported)
55+
# Shared libraries (.so) - all .so files referenced in "xxx-objs"
56+
host-cshlib := $(sort $(filter %.so, $(host-cobjs)))
57+
# Remove .so files from "xxx-objs"
58+
host-cobjs := $(filter-out %.so,$(host-cobjs))
59+
60+
#Object (.o) files used by the shared libaries
61+
host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
62+
63+
# output directory for programs/.o files
64+
# hostprogs-y := tools/build may have been specified. Retrieve directory
65+
host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
66+
# directory of .o files from prog-objs notation
67+
host-objdirs += $(foreach f,$(host-cmulti), \
68+
$(foreach m,$($(f)-objs), \
69+
$(if $(dir $(m)),$(dir $(m)))))
70+
# directory of .o files from prog-cxxobjs notation
71+
host-objdirs += $(foreach f,$(host-cxxmulti), \
72+
$(foreach m,$($(f)-cxxobjs), \
73+
$(if $(dir $(m)),$(dir $(m)))))
74+
75+
host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
76+
77+
78+
__hostprogs := $(addprefix $(obj)/,$(__hostprogs))
79+
host-csingle := $(addprefix $(obj)/,$(host-csingle))
80+
host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
81+
host-cobjs := $(addprefix $(obj)/,$(host-cobjs))
82+
host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti))
83+
host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs))
84+
host-cshlib := $(addprefix $(obj)/,$(host-cshlib))
85+
host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
86+
host-objdirs := $(addprefix $(obj)/,$(host-objdirs))
87+
88+
obj-dirs += $(host-objdirs)
89+
90+
#####
91+
# Handle options to gcc. Support building with separate output directory
92+
93+
_hostc_flags = $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
94+
$(HOSTCFLAGS_$(basetarget).o)
95+
_hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
96+
$(HOSTCXXFLAGS_$(basetarget).o)
97+
98+
ifeq ($(KBUILD_SRC),)
99+
__hostc_flags = $(_hostc_flags)
100+
__hostcxx_flags = $(_hostcxx_flags)
101+
else
102+
__hostc_flags = -I$(obj) $(call flags,_hostc_flags)
103+
__hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags)
104+
endif
105+
106+
hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags)
107+
hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags)
108+
109+
#####
110+
# Compile programs on the host
111+
112+
# Create executable from a single .c file
113+
# host-csingle -> Executable
114+
quiet_cmd_host-csingle = HOSTCC $@
115+
cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \
116+
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
117+
$(host-csingle): $(obj)/%: $(src)/%.c FORCE
118+
$(call if_changed_dep,host-csingle)
119+
120+
# Link an executable based on list of .o files, all plain c
121+
# host-cmulti -> executable
122+
quiet_cmd_host-cmulti = HOSTLD $@
123+
cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
124+
$(addprefix $(obj)/,$($(@F)-objs)) \
125+
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
126+
$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE
127+
$(call if_changed,host-cmulti)
128+
129+
# Create .o file from a single .c file
130+
# host-cobjs -> .o
131+
quiet_cmd_host-cobjs = HOSTCC $@
132+
cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $<
133+
$(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE
134+
$(call if_changed_dep,host-cobjs)
135+
136+
# Link an executable based on list of .o files, a mixture of .c and .cc
137+
# host-cxxmulti -> executable
138+
quiet_cmd_host-cxxmulti = HOSTLD $@
139+
cmd_host-cxxmulti = $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
140+
$(foreach o,objs cxxobjs,\
141+
$(addprefix $(obj)/,$($(@F)-$(o)))) \
142+
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
143+
$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
144+
$(call if_changed,host-cxxmulti)
145+
146+
# Create .o file from a single .cc (C++) file
147+
quiet_cmd_host-cxxobjs = HOSTCXX $@
148+
cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
149+
$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
150+
$(call if_changed_dep,host-cxxobjs)
151+
152+
# Compile .c file, create position independent .o file
153+
# host-cshobjs -> .o
154+
quiet_cmd_host-cshobjs = HOSTCC -fPIC $@
155+
cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
156+
$(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE
157+
$(call if_changed_dep,host-cshobjs)
158+
159+
# Link a shared library, based on position independent .o files
160+
# *.o -> .so shared library (host-cshlib)
161+
quiet_cmd_host-cshlib = HOSTLLD -shared $@
162+
cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
163+
$(addprefix $(obj)/,$($(@F:.so=-objs))) \
164+
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
165+
$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE
166+
$(call if_changed,host-cshlib)
167+
168+
targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\
169+
$(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs)
170+

0 commit comments

Comments
 (0)