| @@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles. · 16 unmodified lines |
| 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. · 15 unmodified lines |
| 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. · 340 unmodified lines |
| 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): · 582 unmodified lines |
| 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 | |
| 1046 | The top Makefile exports the following variables: | 1074 | The top Makefile exports the following variables: |