aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-14 13:12:46 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-14 13:12:46 -0400
commit3b7b3e6ec5f56118046594d3c62469e7d1d0aadd (patch)
tree3a6eb410ee27b660b7c085c81619f9e69fb5f0fa
parente3b1fd56f175526db42ae94c457f29c2fa810aca (diff)
parent164f0d2efaaef835473e74b162eae750341d6a8c (diff)
Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
Pull kbuild updates from Michal Marek: - make clean also considers $(extra-m) and $(extra-) to be consistent - cleanup and fixes in scripts/Makefile.host - allow to override the name of the Python 2 executable with make PYTHON=... (only needed for ia64 in practice) - option to split debugingo into *.dwo files to save disk space if the compiler supports it (CONFIG_DEBUG_INFO_SPLIT) - option to use dwarf4 debuginfo if the compiler supports it (CONFIG_DEBUG_INFO_DWARF4) - fix for disabling certain warnings with clang - fix for unneeded rebuild with dash when a command contains backslashes * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: kbuild: Fix handling of backslashes in *.cmd files kbuild, LLVMLinux: Supress warnings unless W=1-3 Kbuild: Add a option to enable dwarf4 v2 kbuild: Support split debug info v4 kbuild: allow to override Python command name kbuild: clean-up and bug fix of scripts/Makefile.host kbuild: clean up scripts/Makefile.host kbuild: drop shared library support from Makefile.host kbuild: fix a bug of C++ host program handling kbuild: fix a typo in scripts/Makefile.host scripts/Makefile.clean: clean also $(extra-m) and $(extra-)
-rw-r--r--.gitignore1
-rw-r--r--Documentation/kbuild/makefiles.txt39
-rw-r--r--Makefile12
-rw-r--r--arch/ia64/Makefile2
-rw-r--r--lib/Kconfig.debug24
-rw-r--r--scripts/Kbuild.include14
-rw-r--r--scripts/Makefile.clean4
-rw-r--r--scripts/Makefile.extrawarn21
-rw-r--r--scripts/Makefile.host61
9 files changed, 75 insertions, 103 deletions
diff --git a/.gitignore b/.gitignore
index f4c0b091dcf4..e213b27f3921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,6 +34,7 @@
34*.gcno 34*.gcno
35modules.builtin 35modules.builtin
36Module.symvers 36Module.symvers
37*.dwo
37 38
38# 39#
39# Top-level generic files 40# Top-level generic files
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index c600e2f44a62..764f5991a3fc 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -23,11 +23,10 @@ This document describes the Linux kernel Makefiles.
23 === 4 Host Program support 23 === 4 Host Program support
24 --- 4.1 Simple Host Program 24 --- 4.1 Simple Host Program
25 --- 4.2 Composite Host Programs 25 --- 4.2 Composite Host Programs
26 --- 4.3 Defining shared libraries 26 --- 4.3 Using C++ for host programs
27 --- 4.4 Using C++ for host programs 27 --- 4.4 Controlling compiler options for host programs
28 --- 4.5 Controlling compiler options for host programs 28 --- 4.5 When host programs are actually built
29 --- 4.6 When host programs are actually built 29 --- 4.6 Using hostprogs-$(CONFIG_FOO)
30 --- 4.7 Using hostprogs-$(CONFIG_FOO)
31 30
32 === 5 Kbuild clean infrastructure 31 === 5 Kbuild clean infrastructure
33 32
@@ -643,29 +642,7 @@ Both possibilities are described in the following.
643 Finally, the two .o files are linked to the executable, lxdialog. 642 Finally, the two .o files are linked to the executable, lxdialog.
644 Note: The syntax <executable>-y is not permitted for host-programs. 643 Note: The syntax <executable>-y is not permitted for host-programs.
645 644
646--- 4.3 Defining shared libraries 645--- 4.3 Using C++ for host programs
647
648 Objects with extension .so are considered shared libraries, and
649 will be compiled as position independent objects.
650 Kbuild provides support for shared libraries, but the usage
651 shall be restricted.
652 In the following example the libkconfig.so shared library is used
653 to link the executable conf.
654
655 Example:
656 #scripts/kconfig/Makefile
657 hostprogs-y := conf
658 conf-objs := conf.o libkconfig.so
659 libkconfig-objs := expr.o type.o
660
661 Shared libraries always require a corresponding -objs line, and
662 in the example above the shared library libkconfig is composed by
663 the two objects expr.o and type.o.
664 expr.o and type.o will be built as position independent code and
665 linked as a shared library libkconfig.so. C++ is not supported for
666 shared libraries.
667
668--- 4.4 Using C++ for host programs
669 646
670 kbuild offers support for host programs written in C++. This was 647 kbuild offers support for host programs written in C++. This was
671 introduced solely to support kconfig, and is not recommended 648 introduced solely to support kconfig, and is not recommended
@@ -688,7 +665,7 @@ Both possibilities are described in the following.
688 qconf-cxxobjs := qconf.o 665 qconf-cxxobjs := qconf.o
689 qconf-objs := check.o 666 qconf-objs := check.o
690 667
691--- 4.5 Controlling compiler options for host programs 668--- 4.4 Controlling compiler options for host programs
692 669
693 When compiling host programs, it is possible to set specific flags. 670 When compiling host programs, it is possible to set specific flags.
694 The programs will always be compiled utilising $(HOSTCC) passed 671 The programs will always be compiled utilising $(HOSTCC) passed
@@ -716,7 +693,7 @@ Both possibilities are described in the following.
716 When linking qconf, it will be passed the extra option 693 When linking qconf, it will be passed the extra option
717 "-L$(QTDIR)/lib". 694 "-L$(QTDIR)/lib".
718 695
719--- 4.6 When host programs are actually built 696--- 4.5 When host programs are actually built
720 697
721 Kbuild will only build host-programs when they are referenced 698 Kbuild will only build host-programs when they are referenced
722 as a prerequisite. 699 as a prerequisite.
@@ -747,7 +724,7 @@ Both possibilities are described in the following.
747 This will tell kbuild to build lxdialog even if not referenced in 724 This will tell kbuild to build lxdialog even if not referenced in
748 any rule. 725 any rule.
749 726
750--- 4.7 Using hostprogs-$(CONFIG_FOO) 727--- 4.6 Using hostprogs-$(CONFIG_FOO)
751 728
752 A typical pattern in a Kbuild file looks like this: 729 A typical pattern in a Kbuild file looks like this:
753 730
diff --git a/Makefile b/Makefile
index a897c50db515..ada00f0d2a11 100644
--- a/Makefile
+++ b/Makefile
@@ -372,6 +372,7 @@ GENKSYMS = scripts/genksyms/genksyms
372INSTALLKERNEL := installkernel 372INSTALLKERNEL := installkernel
373DEPMOD = /sbin/depmod 373DEPMOD = /sbin/depmod
374PERL = perl 374PERL = perl
375PYTHON = python
375CHECK = sparse 376CHECK = sparse
376 377
377CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ 378CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
@@ -422,7 +423,7 @@ KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(S
422export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION 423export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
423export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC 424export ARCH SRCARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
424export CPP AR NM STRIP OBJCOPY OBJDUMP 425export CPP AR NM STRIP OBJCOPY OBJDUMP
425export MAKE AWK GENKSYMS INSTALLKERNEL PERL UTS_MACHINE 426export MAKE AWK GENKSYMS INSTALLKERNEL PERL PYTHON UTS_MACHINE
426export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS 427export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
427 428
428export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS 429export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
@@ -687,6 +688,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
687# source of a reference will be _MergedGlobals and not on of the whitelisted names. 688# source of a reference will be _MergedGlobals and not on of the whitelisted names.
688# See modpost pattern 2 689# See modpost pattern 2
689KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) 690KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
691KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
690else 692else
691 693
692# This warning generated too much noise in a regular build. 694# This warning generated too much noise in a regular build.
@@ -710,9 +712,16 @@ endif
710KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments) 712KBUILD_CFLAGS += $(call cc-option, -fno-var-tracking-assignments)
711 713
712ifdef CONFIG_DEBUG_INFO 714ifdef CONFIG_DEBUG_INFO
715ifdef CONFIG_DEBUG_INFO_SPLIT
716KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g)
717else
713KBUILD_CFLAGS += -g 718KBUILD_CFLAGS += -g
719endif
714KBUILD_AFLAGS += -Wa,-gdwarf-2 720KBUILD_AFLAGS += -Wa,-gdwarf-2
715endif 721endif
722ifdef CONFIG_DEBUG_INFO_DWARF4
723KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
724endif
716 725
717ifdef CONFIG_DEBUG_INFO_REDUCED 726ifdef CONFIG_DEBUG_INFO_REDUCED
718KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ 727KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \
@@ -1398,6 +1407,7 @@ clean: $(clean-dirs)
1398 @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \ 1407 @find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
1399 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \ 1408 \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
1400 -o -name '*.ko.*' \ 1409 -o -name '*.ko.*' \
1410 -o -name '*.dwo' \
1401 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \ 1411 -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
1402 -o -name '*.symtypes' -o -name 'modules.order' \ 1412 -o -name '*.symtypes' -o -name 'modules.order' \
1403 -o -name modules.builtin -o -name '.tmp_*.o.*' \ 1413 -o -name modules.builtin -o -name '.tmp_*.o.*' \
diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
index f37238f45bcd..5441b14994fc 100644
--- a/arch/ia64/Makefile
+++ b/arch/ia64/Makefile
@@ -76,7 +76,7 @@ vmlinux.gz: vmlinux
76 $(Q)$(MAKE) $(build)=$(boot) $@ 76 $(Q)$(MAKE) $(build)=$(boot) $@
77 77
78unwcheck: vmlinux 78unwcheck: vmlinux
79 -$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $< 79 -$(Q)READELF=$(READELF) $(PYTHON) $(srctree)/arch/ia64/scripts/unwcheck.py $<
80 80
81archclean: 81archclean:
82 $(Q)$(MAKE) $(clean)=$(boot) 82 $(Q)$(MAKE) $(clean)=$(boot)
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index cb45f59685e6..07c28323f88f 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -143,6 +143,30 @@ config DEBUG_INFO_REDUCED
143 DEBUG_INFO build and compile times are reduced too. 143 DEBUG_INFO build and compile times are reduced too.
144 Only works with newer gcc versions. 144 Only works with newer gcc versions.
145 145
146config DEBUG_INFO_SPLIT
147 bool "Produce split debuginfo in .dwo files"
148 depends on DEBUG_INFO
149 help
150 Generate debug info into separate .dwo files. This significantly
151 reduces the build directory size for builds with DEBUG_INFO,
152 because it stores the information only once on disk in .dwo
153 files instead of multiple times in object files and executables.
154 In addition the debug information is also compressed.
155
156 Requires recent gcc (4.7+) and recent gdb/binutils.
157 Any tool that packages or reads debug information would need
158 to know about the .dwo files and include them.
159 Incompatible with older versions of ccache.
160
161config DEBUG_INFO_DWARF4
162 bool "Generate dwarf4 debuginfo"
163 depends on DEBUG_INFO
164 help
165 Generate dwarf4 debug info. This requires recent versions
166 of gcc and gdb. It makes the debug information larger.
167 But it significantly improves the success of resolving
168 variables in gdb on optimized code.
169
146config ENABLE_WARN_DEPRECATED 170config ENABLE_WARN_DEPRECATED
147 bool "Enable __deprecated logic" 171 bool "Enable __deprecated logic"
148 default y 172 default y
diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
index 122f95c95869..8a9a4e1c7eab 100644
--- a/scripts/Kbuild.include
+++ b/scripts/Kbuild.include
@@ -215,11 +215,13 @@ else
215arg-check = $(if $(strip $(cmd_$@)),,1) 215arg-check = $(if $(strip $(cmd_$@)),,1)
216endif 216endif
217 217
218# >'< substitution is for echo to work, 218# Replace >$< with >$$< to preserve $ when reloading the .cmd file
219# >$< substitution to preserve $ when reloading .cmd file 219# (needed for make)
220# note: when using inline perl scripts [perl -e '...$$t=1;...'] 220# Replace >#< with >\#< to avoid starting a comment in the .cmd file
221# in $(cmd_xxx) double $$ your perl vars 221# (needed for make)
222make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))) 222# Replace >'< with >'\''< to be able to enclose the whole string in '...'
223# (needed for the shell)
224make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1)))))
223 225
224# Find any prerequisites that is newer than target or that does not exist. 226# Find any prerequisites that is newer than target or that does not exist.
225# PHONY targets skipped in both cases. 227# PHONY targets skipped in both cases.
@@ -230,7 +232,7 @@ any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^)
230if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ 232if_changed = $(if $(strip $(any-prereq) $(arg-check)), \
231 @set -e; \ 233 @set -e; \
232 $(echo-cmd) $(cmd_$(1)); \ 234 $(echo-cmd) $(cmd_$(1)); \
233 echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd) 235 printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
234 236
235# Execute the command and also postprocess generated .d dependencies file. 237# Execute the command and also postprocess generated .d dependencies file.
236if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ), \ 238if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ), \
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 686cb0d31c7c..a651cee84f2a 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -40,8 +40,8 @@ subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
40# build a list of files to remove, usually relative to the current 40# build a list of files to remove, usually relative to the current
41# directory 41# directory
42 42
43__clean-files := $(extra-y) $(always) \ 43__clean-files := $(extra-y) $(extra-m) $(extra-) \
44 $(targets) $(clean-files) \ 44 $(always) $(targets) $(clean-files) \
45 $(host-progs) \ 45 $(host-progs) \
46 $(hostprogs-y) $(hostprogs-m) $(hostprogs-) 46 $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
47 47
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index 65643506c71c..f734033af219 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -26,16 +26,6 @@ warning-1 += $(call cc-option, -Wmissing-include-dirs)
26warning-1 += $(call cc-option, -Wunused-but-set-variable) 26warning-1 += $(call cc-option, -Wunused-but-set-variable)
27warning-1 += $(call cc-disable-warning, missing-field-initializers) 27warning-1 += $(call cc-disable-warning, missing-field-initializers)
28 28
29# Clang
30warning-1 += $(call cc-disable-warning, initializer-overrides)
31warning-1 += $(call cc-disable-warning, unused-value)
32warning-1 += $(call cc-disable-warning, format)
33warning-1 += $(call cc-disable-warning, unknown-warning-option)
34warning-1 += $(call cc-disable-warning, sign-compare)
35warning-1 += $(call cc-disable-warning, format-zero-length)
36warning-1 += $(call cc-disable-warning, uninitialized)
37warning-1 += $(call cc-option, -fcatch-undefined-behavior)
38
39warning-2 := -Waggregate-return 29warning-2 := -Waggregate-return
40warning-2 += -Wcast-align 30warning-2 += -Wcast-align
41warning-2 += -Wdisabled-optimization 31warning-2 += -Wdisabled-optimization
@@ -64,4 +54,15 @@ ifeq ("$(strip $(warning))","")
64endif 54endif
65 55
66KBUILD_CFLAGS += $(warning) 56KBUILD_CFLAGS += $(warning)
57else
58
59ifeq ($(COMPILER),clang)
60KBUILD_CFLAGS += $(call cc-disable-warning, initializer-overrides)
61KBUILD_CFLAGS += $(call cc-disable-warning, unused-value)
62KBUILD_CFLAGS += $(call cc-disable-warning, format)
63KBUILD_CFLAGS += $(call cc-disable-warning, unknown-warning-option)
64KBUILD_CFLAGS += $(call cc-disable-warning, sign-compare)
65KBUILD_CFLAGS += $(call cc-disable-warning, format-zero-length)
66KBUILD_CFLAGS += $(call cc-disable-warning, uninitialized)
67endif
67endif 68endif
diff --git a/scripts/Makefile.host b/scripts/Makefile.host
index 66893643fd7d..ab5980f91714 100644
--- a/scripts/Makefile.host
+++ b/scripts/Makefile.host
@@ -20,21 +20,12 @@
20# Will compile qconf as a C++ program, and menu as a C program. 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 21# They are linked as C++ code to the executable qconf
22 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)) 23__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
34 24
35# C code 25# C code
36# Executables compiled from a single .c file 26# Executables compiled from a single .c file
37host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m))) 27host-csingle := $(foreach m,$(__hostprogs), \
28 $(if $($(m)-objs)$($(m)-cxxobjs),,$(m)))
38 29
39# C executables linked based on several .o files 30# C executables linked based on several .o files
40host-cmulti := $(foreach m,$(__hostprogs),\ 31host-cmulti := $(foreach m,$(__hostprogs),\
@@ -44,33 +35,17 @@ host-cmulti := $(foreach m,$(__hostprogs),\
44host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs))) 35host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
45 36
46# C++ code 37# C++ code
47# C++ executables compiled from at least on .cc file 38# C++ executables compiled from at least one .cc file
48# and zero or more .c files 39# and zero or more .c files
49host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m))) 40host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
50 41
51# C++ Object (.o) files compiled from .cc files 42# C++ Object (.o) files compiled from .cc files
52host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs))) 43host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
53 44
54# Shared libaries (only .c supported)
55# Shared libraries (.so) - all .so files referenced in "xxx-objs"
56host-cshlib := $(sort $(filter %.so, $(host-cobjs)))
57# Remove .so files from "xxx-objs"
58host-cobjs := $(filter-out %.so,$(host-cobjs))
59
60#Object (.o) files used by the shared libaries
61host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
62
63# output directory for programs/.o files 45# output directory for programs/.o files
64# hostprogs-y := tools/build may have been specified. Retrieve directory 46# hostprogs-y := tools/build may have been specified.
65host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f)))) 47# Retrieve also directory of .o files from prog-objs or prog-cxxobjs notation
66# directory of .o files from prog-objs notation 48host-objdirs := $(dir $(__hostprogs) $(host-cobjs) $(host-cxxobjs))
67host-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
71host-objdirs += $(foreach f,$(host-cxxmulti), \
72 $(foreach m,$($(f)-cxxobjs), \
73 $(if $(dir $(m)),$(dir $(m)))))
74 49
75host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs)))) 50host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
76 51
@@ -81,8 +56,6 @@ host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
81host-cobjs := $(addprefix $(obj)/,$(host-cobjs)) 56host-cobjs := $(addprefix $(obj)/,$(host-cobjs))
82host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti)) 57host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti))
83host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs)) 58host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs))
84host-cshlib := $(addprefix $(obj)/,$(host-cshlib))
85host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
86host-objdirs := $(addprefix $(obj)/,$(host-objdirs)) 59host-objdirs := $(addprefix $(obj)/,$(host-objdirs))
87 60
88obj-dirs += $(host-objdirs) 61obj-dirs += $(host-objdirs)
@@ -123,7 +96,7 @@ quiet_cmd_host-cmulti = HOSTLD $@
123 cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \ 96 cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
124 $(addprefix $(obj)/,$($(@F)-objs)) \ 97 $(addprefix $(obj)/,$($(@F)-objs)) \
125 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) 98 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
126$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE 99$(host-cmulti): $(obj)/%: $(host-cobjs) FORCE
127 $(call if_changed,host-cmulti) 100 $(call if_changed,host-cmulti)
128 101
129# Create .o file from a single .c file 102# Create .o file from a single .c file
@@ -140,7 +113,7 @@ quiet_cmd_host-cxxmulti = HOSTLD $@
140 $(foreach o,objs cxxobjs,\ 113 $(foreach o,objs cxxobjs,\
141 $(addprefix $(obj)/,$($(@F)-$(o)))) \ 114 $(addprefix $(obj)/,$($(@F)-$(o)))) \
142 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) 115 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
143$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE 116$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) FORCE
144 $(call if_changed,host-cxxmulti) 117 $(call if_changed,host-cxxmulti)
145 118
146# Create .o file from a single .cc (C++) file 119# Create .o file from a single .cc (C++) file
@@ -149,21 +122,5 @@ quiet_cmd_host-cxxobjs = HOSTCXX $@
149$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE 122$(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
150 $(call if_changed_dep,host-cxxobjs) 123 $(call if_changed_dep,host-cxxobjs)
151 124
152# Compile .c file, create position independent .o file
153# host-cshobjs -> .o
154quiet_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)
161quiet_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
168targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\ 125targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\
169 $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs) 126 $(host-cxxmulti) $(host-cxxobjs)