| @@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles. · 16 unmodified lines |
| 17 | 17 | --- 3.8 Command line dependency |
| 18 | 18 | --- 3.9 Dependency tracking |
| 19 | 19 | --- 3.10 Special Rules |
| 20 | + --- 3.11 $(CC) support functions |
| 20 | 21 | |
| 21 | 22 | === 4 Host Program support |
| 22 | 23 | --- 4.1 Simple Host Program |
| @@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles. · 15 unmodified lines |
| 38 | 39 | --- 6.6 Commands useful for building a boot image |
| 39 | 40 | --- 6.7 Custom kbuild commands |
| 40 | 41 | --- 6.8 Preprocessing linker scripts |
| 41 | | − --- 6.9 $(CC) support functions |
| 42 | 42 | |
| 43 | 43 | === 7 Kbuild Variables |
| 44 | 44 | === 8 Makefile language |
| @@ -385,6 +385,102 @@ more details, with real examples. · 340 unmodified lines |
| 385 | 385 | to prerequisites are referenced with $(src) (because they are not |
| 386 | 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 | 485 | === 4 Host Program support |
| 390 | 486 | |
| @@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly): · 582 unmodified lines |
| 973 | 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 | 1072 | === 7 Kbuild Variables |
| 1045 | 1073 | |
| 1046 | 1074 | The top Makefile exports the following variables: |