diff options
| author | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-01-22 07:34:15 -0500 |
|---|---|---|
| committer | Sam Ravnborg <sam@mars.ravnborg.org> | 2006-02-19 03:51:20 -0500 |
| commit | 20a468b51325b3636785a8ca0047ae514b39cbd5 (patch) | |
| tree | 22e8d00b947cd110c9d600d24c4119ff30ff22c1 | |
| parent | b39927cf4cc5a9123d2b157ffd396884cb8156eb (diff) | |
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
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
| -rw-r--r-- | Documentation/kbuild/makefiles.txt | 166 | ||||
| -rw-r--r-- | Makefile | 32 | ||||
| -rw-r--r-- | scripts/Kbuild.include | 37 | ||||
| -rw-r--r-- | scripts/Makefile.build | 3 |
4 files changed, 136 insertions, 102 deletions
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 443230b43e09..99d51a5bb0d9 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 |
| @@ -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 | |||
