History

kbuild: make cc-version available in kbuild files

Move $(CC) support functions to Kbuild.include so they are available in the kbuild files. In addition the following was done: o as-option documented in Documentation/kbuild/makefiles.txt o Moved documentation to new section to match new scope of functions o added cc-ifversion used to conditionally select a text string dependent on actual $(CC) version o documented cc-ifversion o change so Kbuild.include is read before the kbuild file

Sam Ravnborg committed 20 years ago

Commit 20a468b1 parent b39927c4 files · +136 −102Browse files

Unified · Split

4 files
  1. Documentation/kbuild/makefiles.txt +97 −69
  2. Makefile +0 −32
  3. scripts/Kbuild.include +37 −0
  4. scripts/Makefile.build +2 −1
Documentation/kbuild/makefiles.txt+97−69
@@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles. · 16 unmodified lines
1717 --- 3.8 Command line dependency
1818 --- 3.9 Dependency tracking
1919 --- 3.10 Special Rules
20+ --- 3.11 $(CC) support functions
2021
2122 === 4 Host Program support
2223 --- 4.1 Simple Host Program
@@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles. · 15 unmodified lines
3839 --- 6.6 Commands useful for building a boot image
3940 --- 6.7 Custom kbuild commands
4041 --- 6.8 Preprocessing linker scripts
41− --- 6.9 $(CC) support functions
4242
4343 === 7 Kbuild Variables
4444 === 8 Makefile language
@@ -385,6 +385,102 @@ more details, with real examples. · 340 unmodified lines
385385 to prerequisites are referenced with $(src) (because they are not
386386 generated files).
387387
388+--- 3.11 $(CC) support functions
389+
390+ The kernel may be build with several different versions of
391+ $(CC), each supporting a unique set of features and options.
392+ kbuild provide basic support to check for valid options for $(CC).
393+ $(CC) is useally the gcc compiler, but other alternatives are
394+ available.
395+
396+ as-option
397+ as-option is used to check if $(CC) when used to compile
398+ assembler (*.S) files supports the given option. An optional
399+ second option may be specified if first option are not supported.
400+
401+ Example:
402+ #arch/sh/Makefile
403+ cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
404+
405+ In the above example cflags-y will be assinged the the option
406+ -Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
407+ The second argument is optional, and if supplied will be used
408+ if first argument is not supported.
409+
410+ cc-option
411+ cc-option is used to check if $(CC) support a given option, and not
412+ supported to use an optional second option.
413+
414+ Example:
415+ #arch/i386/Makefile
416+ cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
417+
418+ In the above example cflags-y will be assigned the option
419+ -march=pentium-mmx if supported by $(CC), otherwise -march-i586.
420+ The second argument to cc-option is optional, and if omitted
421+ cflags-y will be assigned no value if first option is not supported.
422+
423+ cc-option-yn
424+ cc-option-yn is used to check if gcc supports a given option
425+ and return 'y' if supported, otherwise 'n'.
426+
427+ Example:
428+ #arch/ppc/Makefile
429+ biarch := $(call cc-option-yn, -m32)
430+ aflags-$(biarch) += -a32
431+ cflags-$(biarch) += -m32
432+
433+ In the above example $(biarch) is set to y if $(CC) supports the -m32
434+ option. When $(biarch) equals to y the expanded variables $(aflags-y)
435+ and $(cflags-y) will be assigned the values -a32 and -m32.
436+
437+ cc-option-align
438+ gcc version >= 3.0 shifted type of options used to speify
439+ alignment of functions, loops etc. $(cc-option-align) whrn used
440+ as prefix to the align options will select the right prefix:
441+ gcc < 3.00
442+ cc-option-align = -malign
443+ gcc >= 3.00
444+ cc-option-align = -falign
445+
446+ Example:
447+ CFLAGS += $(cc-option-align)-functions=4
448+
449+ In the above example the option -falign-functions=4 is used for
450+ gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
451+
452+ cc-version
453+ cc-version return a numerical version of the $(CC) compiler version.
454+ The format is <major><minor> where both are two digits. So for example
455+ gcc 3.41 would return 0341.
456+ cc-version is useful when a specific $(CC) version is faulty in one
457+ area, for example the -mregparm=3 were broken in some gcc version
458+ even though the option was accepted by gcc.
459+
460+ Example:
461+ #arch/i386/Makefile
462+ cflags-y += $(shell \
463+ if [ $(call cc-version) -ge 0300 ] ; then \
464+ echo "-mregparm=3"; fi ;)
465+
466+ In the above example -mregparm=3 is only used for gcc version greater
467+ than or equal to gcc 3.0.
468+
469+ cc-ifversion
470+ cc-ifversion test the version of $(CC) and equals last argument if
471+ version expression is true.
472+
473+ Example:
474+ #fs/reiserfs/Makefile
475+ EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
476+
477+ In this example EXTRA_CFLAGS will be assigned the value -O1 if the
478+ $(CC) version is less than 4.2.
479+ cc-ifversion takes all the shell operators:
480+ -eq, -ne, -lt, -le, -gt, and -ge
481+ The third parameter may be a text as in this example, but it may also
482+ be an expanded variable or a macro.
483+
388484
389485 === 4 Host Program support
390486
@@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly): · 582 unmodified lines
9731069 architecture specific files.
9741070
9751071
976−--- 6.9 $(CC) support functions
977−
978− The kernel may be build with several different versions of
979− $(CC), each supporting a unique set of features and options.
980− kbuild provide basic support to check for valid options for $(CC).
981− $(CC) is useally the gcc compiler, but other alternatives are
982− available.
983−
984− cc-option
985− cc-option is used to check if $(CC) support a given option, and not
986− supported to use an optional second option.
987−
988− Example:
989− #arch/i386/Makefile
990− cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
991−
992− In the above example cflags-y will be assigned the option
993− -march=pentium-mmx if supported by $(CC), otherwise -march-i586.
994− The second argument to cc-option is optional, and if omitted
995− cflags-y will be assigned no value if first option is not supported.
996−
997− cc-option-yn
998− cc-option-yn is used to check if gcc supports a given option
999− and return 'y' if supported, otherwise 'n'.
1000−
1001− Example:
1002− #arch/ppc/Makefile
1003− biarch := $(call cc-option-yn, -m32)
1004− aflags-$(biarch) += -a32
1005− cflags-$(biarch) += -m32
1006−
1007− In the above example $(biarch) is set to y if $(CC) supports the -m32
1008− option. When $(biarch) equals to y the expanded variables $(aflags-y)
1009− and $(cflags-y) will be assigned the values -a32 and -m32.
1010−
1011− cc-option-align
1012− gcc version >= 3.0 shifted type of options used to speify
1013− alignment of functions, loops etc. $(cc-option-align) whrn used
1014− as prefix to the align options will select the right prefix:
1015− gcc < 3.00
1016− cc-option-align = -malign
1017− gcc >= 3.00
1018− cc-option-align = -falign
1019−
1020− Example:
1021− CFLAGS += $(cc-option-align)-functions=4
1022−
1023− In the above example the option -falign-functions=4 is used for
1024− gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
1025−
1026− cc-version
1027− cc-version return a numerical version of the $(CC) compiler version.
1028− The format is <major><minor> where both are two digits. So for example
1029− gcc 3.41 would return 0341.
1030− cc-version is useful when a specific $(CC) version is faulty in one
1031− area, for example the -mregparm=3 were broken in some gcc version
1032− even though the option was accepted by gcc.
1033−
1034− Example:
1035− #arch/i386/Makefile
1036− cflags-y += $(shell \
1037− if [ $(call cc-version) -ge 0300 ] ; then \
1038− echo "-mregparm=3"; fi ;)
1039−
1040− In the above example -mregparm=3 is only used for gcc version greater
1041− than or equal to gcc 3.0.
1042−
1043−
10441072 === 7 Kbuild Variables
10451073
10461074 The top Makefile exports the following variables:
Makefile+0−32
@@ -258,38 +258,6 @@ endif · 257 unmodified lines
258258
259259 export quiet Q KBUILD_VERBOSE
260260
261−######
262−# cc support functions to be used (only) in arch/$(ARCH)/Makefile
263−# See documentation in Documentation/kbuild/makefiles.txt
264−
265−# as-option
266−# Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
267−
268−as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
269− -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
270− else echo "$(2)"; fi ;)
271−
272−# cc-option
273−# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
274−
275−cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
276− > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
277−
278−# cc-option-yn
279−# Usage: flag := $(call cc-option-yn, -march=winchip-c6)
280−cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
281− > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
282−
283−# cc-option-align
284−# Prefix align with either -falign or -malign
285−cc-option-align = $(subst -functions=0,,\
286− $(call cc-option,-falign-functions=0,-malign-functions=0))
287−
288−# cc-version
289−# Usage gcc-ver := $(call cc-version $(CC))
290−cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
291− $(if $(1), $(1), $(CC)))
292−
293261
294262 # Look for make include files relative to root of kernel src
295263 MAKEFLAGS += --include-dir=$(srctree)
scripts/Kbuild.include+37−0
@@ -44,6 +44,43 @@ define filechk · 43 unmodified lines
4444 fi
4545 endef
4646
47+######
48+# cc support functions to be used (only) in arch/$(ARCH)/Makefile
49+# See documentation in Documentation/kbuild/makefiles.txt
50+
51+# as-option
52+# Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
53+
54+as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
55+ -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
56+ else echo "$(2)"; fi ;)
57+
58+# cc-option
59+# Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
60+
61+cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
62+ > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
63+
64+# cc-option-yn
65+# Usage: flag := $(call cc-option-yn, -march=winchip-c6)
66+cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
67+ > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
68+
69+# cc-option-align
70+# Prefix align with either -falign or -malign
71+cc-option-align = $(subst -functions=0,,\
72+ $(call cc-option,-falign-functions=0,-malign-functions=0))
73+
74+# cc-version
75+# Usage gcc-ver := $(call cc-version, $(CC))
76+cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh \
77+ $(if $(1), $(1), $(CC)))
78+
79+# cc-ifversion
80+# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
81+cc-ifversion = $(shell if [ $(call cc-version, $(CC)) $(1) $(2) ]; then \
82+ echo $(3); fi;)
83+
4784 ###
4885 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
4986 # Usage:
scripts/Makefile.build+2−1
@@ -10,11 +10,12 @@ __build: · 9 unmodified lines
1010 # Read .config if it exist, otherwise ignore
1111 -include .config
1212
13+include scripts/Kbuild.include
14+
1315 # The filename Kbuild has precedence over Makefile
1416 kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
1517 include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
1618
17−include scripts/Kbuild.include
1819 include scripts/Makefile.lib
1920
2021 ifdef host-progs

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t