-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]>
- Loading branch information
Showing
8 changed files
with
1,663 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
# ========================================================================== | ||
# Cleaning up | ||
# ========================================================================== | ||
|
||
src := $(obj) | ||
|
||
PHONY := __clean | ||
__clean: | ||
|
||
# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir | ||
# Usage: | ||
# $(Q)$(MAKE) $(clean)=dir | ||
clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj | ||
|
||
# The filename Kbuild has precedence over Makefile | ||
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) | ||
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile) | ||
|
||
# Figure out what we need to build from the various variables | ||
# ========================================================================== | ||
|
||
__subdir-y := $(patsubst %/,%,$(filter %/, $(obj-y))) | ||
subdir-y += $(__subdir-y) | ||
__subdir-m := $(patsubst %/,%,$(filter %/, $(obj-m))) | ||
subdir-m += $(__subdir-m) | ||
__subdir-n := $(patsubst %/,%,$(filter %/, $(obj-n))) | ||
subdir-n += $(__subdir-n) | ||
__subdir- := $(patsubst %/,%,$(filter %/, $(obj-))) | ||
subdir- += $(__subdir-) | ||
|
||
# Subdirectories we need to descend into | ||
|
||
subdir-ym := $(sort $(subdir-y) $(subdir-m)) | ||
subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) | ||
|
||
# Add subdir path | ||
|
||
subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) | ||
|
||
# build a list of files to remove, usually relative to the current | ||
# directory | ||
|
||
__clean-files := $(extra-y) $(always) \ | ||
$(targets) $(clean-files) \ | ||
$(host-progs) \ | ||
$(hostprogs-y) $(hostprogs-m) $(hostprogs-) | ||
|
||
__clean-files := $(filter-out $(no-clean-files), $(__clean-files)) | ||
|
||
# as clean-files is given relative to the current directory, this adds | ||
# a $(obj) prefix, except for absolute paths | ||
|
||
__clean-files := $(wildcard \ | ||
$(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \ | ||
$(filter /%, $(__clean-files))) | ||
|
||
# as clean-dirs is given relative to the current directory, this adds | ||
# a $(obj) prefix, except for absolute paths | ||
|
||
__clean-dirs := $(wildcard \ | ||
$(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \ | ||
$(filter /%, $(clean-dirs))) | ||
|
||
# ========================================================================== | ||
|
||
quiet_cmd_clean = CLEAN $(obj) | ||
cmd_clean = rm -f $(__clean-files) | ||
quiet_cmd_cleandir = CLEAN $(__clean-dirs) | ||
cmd_cleandir = rm -rf $(__clean-dirs) | ||
|
||
|
||
__clean: $(subdir-ymn) | ||
ifneq ($(strip $(__clean-files)),) | ||
+$(call cmd,clean) | ||
endif | ||
ifneq ($(strip $(__clean-dirs)),) | ||
+$(call cmd,cleandir) | ||
endif | ||
ifneq ($(strip $(clean-rule)),) | ||
+$(clean-rule) | ||
endif | ||
@: | ||
|
||
|
||
# =========================================================================== | ||
# Generic stuff | ||
# =========================================================================== | ||
|
||
# Descending | ||
# --------------------------------------------------------------------------- | ||
|
||
PHONY += $(subdir-ymn) | ||
$(subdir-ymn): | ||
$(Q)$(MAKE) $(clean)=$@ | ||
|
||
# If quiet is set, only print short version of command | ||
|
||
cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1)) | ||
|
||
|
||
# Declare the contents of the .PHONY variable as phony. We keep that | ||
# information in a variable se we can use it in if_changed and friends. | ||
|
||
.PHONY: $(PHONY) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
# ========================================================================== | ||
# Building binaries on the host system | ||
# Binaries are used during the compilation of the kernel, for example | ||
# to preprocess a data file. | ||
# | ||
# Both C and C++ are supported, but preferred language is C for such utilities. | ||
# | ||
# Sample syntax (see Documentation/kbuild/makefiles.txt for reference) | ||
# hostprogs-y := bin2hex | ||
# Will compile bin2hex.c and create an executable named bin2hex | ||
# | ||
# hostprogs-y := lxdialog | ||
# lxdialog-objs := checklist.o lxdialog.o | ||
# Will compile lxdialog.c and checklist.c, and then link the executable | ||
# lxdialog, based on checklist.o and lxdialog.o | ||
# | ||
# hostprogs-y := qconf | ||
# qconf-cxxobjs := qconf.o | ||
# qconf-objs := menu.o | ||
# Will compile qconf as a C++ program, and menu as a C program. | ||
# They are linked as C++ code to the executable qconf | ||
|
||
# hostprogs-y := conf | ||
# conf-objs := conf.o libkconfig.so | ||
# libkconfig-objs := expr.o type.o | ||
# Will create a shared library named libkconfig.so that consists of | ||
# expr.o and type.o (they are both compiled as C code and the object files | ||
# are made as position independent code). | ||
# conf.c is compiled as a C program, and conf.o is linked together with | ||
# libkconfig.so as the executable conf. | ||
# Note: Shared libraries consisting of C++ files are not supported | ||
|
||
__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)-cxxobjs),,$(if $($(m)-objs),$(m)))) | ||
|
||
# Object (.o) files compiled from .c files | ||
host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs))) | ||
|
||
# C++ code | ||
# C++ executables compiled from at least on .cc file | ||
# and zero or more .c files | ||
host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m))) | ||
|
||
# C++ Object (.o) files compiled from .cc files | ||
host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs))) | ||
|
||
# Shared libaries (only .c supported) | ||
# Shared libraries (.so) - all .so files referenced in "xxx-objs" | ||
host-cshlib := $(sort $(filter %.so, $(host-cobjs))) | ||
# Remove .so files from "xxx-objs" | ||
host-cobjs := $(filter-out %.so,$(host-cobjs)) | ||
|
||
#Object (.o) files used by the shared libaries | ||
host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-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))))) | ||
# directory of .o files from prog-cxxobjs notation | ||
host-objdirs += $(foreach f,$(host-cxxmulti), \ | ||
$(foreach m,$($(f)-cxxobjs), \ | ||
$(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-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti)) | ||
host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs)) | ||
host-cshlib := $(addprefix $(obj)/,$(host-cshlib)) | ||
host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs)) | ||
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) | ||
_hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ | ||
$(HOSTCXXFLAGS_$(basetarget).o) | ||
|
||
ifeq ($(KBUILD_SRC),) | ||
__hostc_flags = $(_hostc_flags) | ||
__hostcxx_flags = $(_hostcxx_flags) | ||
else | ||
__hostc_flags = -I$(obj) $(call flags,_hostc_flags) | ||
__hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags) | ||
endif | ||
|
||
hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags) | ||
hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags) | ||
|
||
##### | ||
# Compile programs on the host | ||
|
||
# Create executable from a single .c file | ||
# host-csingle -> Executable | ||
quiet_cmd_host-csingle = HOSTCC $@ | ||
cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \ | ||
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
$(host-csingle): $(obj)/%: $(src)/%.c FORCE | ||
$(call if_changed_dep,host-csingle) | ||
|
||
# Link an executable based on list of .o files, all plain c | ||
# host-cmulti -> executable | ||
quiet_cmd_host-cmulti = HOSTLD $@ | ||
cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \ | ||
$(addprefix $(obj)/,$($(@F)-objs)) \ | ||
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE | ||
$(call if_changed,host-cmulti) | ||
|
||
# Create .o file from a single .c file | ||
# host-cobjs -> .o | ||
quiet_cmd_host-cobjs = HOSTCC $@ | ||
cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $< | ||
$(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE | ||
$(call if_changed_dep,host-cobjs) | ||
|
||
# Link an executable based on list of .o files, a mixture of .c and .cc | ||
# host-cxxmulti -> executable | ||
quiet_cmd_host-cxxmulti = HOSTLD $@ | ||
cmd_host-cxxmulti = $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \ | ||
$(foreach o,objs cxxobjs,\ | ||
$(addprefix $(obj)/,$($(@F)-$(o)))) \ | ||
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE | ||
$(call if_changed,host-cxxmulti) | ||
|
||
# Create .o file from a single .cc (C++) file | ||
quiet_cmd_host-cxxobjs = HOSTCXX $@ | ||
cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $< | ||
$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE | ||
$(call if_changed_dep,host-cxxobjs) | ||
|
||
# Compile .c file, create position independent .o file | ||
# host-cshobjs -> .o | ||
quiet_cmd_host-cshobjs = HOSTCC -fPIC $@ | ||
cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $< | ||
$(host-cshobjs): $(obj)/%.o: $(src)/%.c FORCE | ||
$(call if_changed_dep,host-cshobjs) | ||
|
||
# Link a shared library, based on position independent .o files | ||
# *.o -> .so shared library (host-cshlib) | ||
quiet_cmd_host-cshlib = HOSTLLD -shared $@ | ||
cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \ | ||
$(addprefix $(obj)/,$($(@F:.so=-objs))) \ | ||
$(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) | ||
$(host-cshlib): $(obj)/%: $(host-cshobjs) FORCE | ||
$(call if_changed,host-cshlib) | ||
|
||
targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ | ||
$(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) | ||
|
Oops, something went wrong.