aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/kbuild/makefiles.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/kbuild/makefiles.txt')
-rw-r--r--Documentation/kbuild/makefiles.txt172
1 files changed, 100 insertions, 72 deletions
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 443230b43e09..a9c00facdf40 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles.
17 --- 3.8 Command line dependency 17 --- 3.8 Command line dependency
18 --- 3.9 Dependency tracking 18 --- 3.9 Dependency tracking
19 --- 3.10 Special Rules 19 --- 3.10 Special Rules
20 --- 3.11 $(CC) support functions
20 21
21 === 4 Host Program support 22 === 4 Host Program support
22 --- 4.1 Simple Host Program 23 --- 4.1 Simple Host Program
@@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles.
38 --- 6.6 Commands useful for building a boot image 39 --- 6.6 Commands useful for building a boot image
39 --- 6.7 Custom kbuild commands 40 --- 6.7 Custom kbuild commands
40 --- 6.8 Preprocessing linker scripts 41 --- 6.8 Preprocessing linker scripts
41 --- 6.9 $(CC) support functions
42 42
43 === 7 Kbuild Variables 43 === 7 Kbuild Variables
44 === 8 Makefile language 44 === 8 Makefile language
@@ -106,9 +106,9 @@ This document is aimed towards normal developers and arch developers.
106Most Makefiles within the kernel are kbuild Makefiles that use the 106Most Makefiles within the kernel are kbuild Makefiles that use the
107kbuild infrastructure. This chapter introduce the syntax used in the 107kbuild infrastructure. This chapter introduce the syntax used in the
108kbuild makefiles. 108kbuild makefiles.
109The preferred name for the kbuild files is 'Kbuild' but 'Makefile' will 109The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
110continue to be supported. All new developmen is expected to use the 110be used and if both a 'Makefile' and a 'Kbuild' file exists then the 'Kbuild'
111Kbuild filename. 111file will be used.
112 112
113Section 3.1 "Goal definitions" is a quick intro, further chapters provide 113Section 3.1 "Goal definitions" is a quick intro, further chapters provide
114more details, with real examples. 114more details, with real examples.
@@ -385,6 +385,102 @@ more details, with real examples.
385 to prerequisites are referenced with $(src) (because they are not 385 to prerequisites are referenced with $(src) (because they are not
386 generated files). 386 generated files).
387 387
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
388 484
389=== 4 Host Program support 485=== 4 Host Program support
390 486
@@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly):
973 architecture specific files. 1069 architecture specific files.
974 1070
975 1071
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
1044=== 7 Kbuild Variables 1072=== 7 Kbuild Variables
1045 1073
1046The top Makefile exports the following variables: 1074The top Makefile exports the following variables: