# SPDX-License-Identifier: GPL-2.0-onlyconfig CC_VERSION_TEXT string default "$(CC_VERSION_TEXT)" help This is used in unclear ways: - Re-run Kconfig when the compiler is updated The 'default' property references the environment variable, CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd. When the compiler is updated, Kconfig will be invoked. - Ensure full rebuild when the compiler is updated include/linux/compiler-version.h contains this option in the comment line so fixdep adds include/config/CC_VERSION_TEXT into the auto-generated dependency. When the compiler is updated, syncconfig will touch it and then every file will be rebuilt. config CC_IS_GCC def_bool $(success,test "$(cc-name)" = GCC) config GCC_VERSION int default $(cc-version) if CC_IS_GCC default 0 config CC_IS_CLANG def_bool $(success,test "$(cc-name)" = Clang) config CLANG_VERSION int default $(cc-version) if CC_IS_CLANG default 0 config AS_IS_GNU def_bool $(success,test "$(as-name)" = GNU) config AS_IS_LLVM def_bool $(success,test "$(as-name)" = LLVM) config AS_VERSION int # Use clang version if this is the integrated assembler default CLANG_VERSION if AS_IS_LLVM default $(as-version) config LD_IS_BFD def_bool $(success,test "$(ld-name)" = BFD) config LD_VERSION int default $(ld-version) if LD_IS_BFD default 0 config LD_IS_LLD def_bool $(success,test "$(ld-name)" = LLD) config LLD_VERSION int default $(ld-version) if LD_IS_LLD default 0 config RUSTC_VERSION int default $(rustc-version) help It does not depend on `RUST` since that one may need to use the version in a `depends on`. config RUST_IS_AVAILABLE def_bool $(success,$(srctree)/scripts/rust_is_available.sh) help This shows whether a suitable Rust toolchain is available (found). Please see Documentation/rust/quick-start.rst for instructions on how to satisfy the build requirements of Rust support. In particular, the Makefile target 'rustavailable' is useful to check why the Rust toolchain is not being detected. config RUSTC_LLVM_VERSION int default $(rustc-llvm-version) config RUSTC_LLVM_MAJOR_VERSION int default $(shell,expr $(rustc-llvm-version) / 10000) config RUSTC_CLANG_LLVM_COMPATIBLE bool default y if CC_IS_CLANG && RUSTC_LLVM_MAJOR_VERSION = $(shell,expr $(cc-version) / 10000) help This indicates whether Rust and Clang use LLVM of the same major version. Operations involving handling LLVM IR or bitcode (e.g. cross-language LTO) require the same LLVM major version to work properly. For best compatibility it is recommended that the exact same LLVM is used. config ARCH_HAS_CC_CAN_LINK bool config CC_CAN_LINK bool default ARCH_CC_CAN_LINK if ARCH_HAS_CC_CAN_LINK default $(cc_can_link_user,$(m64-flag)) if 64BIT default $(cc_can_link_user,$(m32-flag)) # Fixed in GCC 14, 13.3, 12.4 and 11.5# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113921config GCC_ASM_GOTO_OUTPUT_BROKEN bool depends on CC_IS_GCC default y if GCC_VERSION < 110500 default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400 default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300 config CC_HAS_ASM_GOTO_OUTPUT def_bool y depends on !GCC_ASM_GOTO_OUTPUT_BROKEN depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null) config CC_HAS_ASM_GOTO_TIED_OUTPUT depends on CC_HAS_ASM_GOTO_OUTPUT # Detect buggy gcc and clang, fixed in gcc-11 clang-14. def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null) config TOOLS_SUPPORT_RELR def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh) config CC_HAS_ASM_INLINE def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null) config CC_HAS_ASSUME bool # clang needs to be at least 19.1.0 since the meaning of the assume # attribute changed: # https://github.com/llvm/llvm-project/commit/c44fa3e8a9a44c2e9a575768a3c185354b9f6c17 default y if CC_IS_CLANG && CLANG_VERSION >= 190100 # supported since gcc 13.1.0 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106654 default y if CC_IS_GCC && GCC_VERSION >= 130100 config CC_HAS_NO_PROFILE_FN_ATTR def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror) config CC_HAS_COUNTED_BY bool # clang needs to be at least 20.1.0 to avoid potential crashes # when building structures that contain __counted_by # https://github.com/ClangBuiltLinux/linux/issues/2114 # https://github.com/llvm/llvm-project/commit/160fb1121cdf703c3ef5e61fb26c5659eb581489 default y if CC_IS_CLANG && CLANG_VERSION >= 200100 # supported since gcc 15.1.0 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896 default y if CC_IS_GCC && GCC_VERSION >= 150100 config CC_HAS_COUNTED_BY_PTR bool # supported since clang 22 default y if CC_IS_CLANG && CLANG_VERSION >= 220100 # supported since gcc 16.0.0 default y if CC_IS_GCC && GCC_VERSION >= 160000 config CC_HAS_BROKEN_COUNTED_BY_REF bool # https://github.com/llvm/llvm-project/issues/182575 default y if CC_IS_CLANG && CLANG_VERSION < 220100 config CC_HAS_ALLOC_TOKEN def_bool $(cc-option,-falloc-token-max=123) config CC_HAS_MULTIDIMENSIONAL_NONSTRING def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror) config LD_CAN_USE_KEEP_IN_OVERLAY # ld.lld prior to 21.0.0 did not support KEEP within an overlay description # https://github.com/llvm/llvm-project/pull/130661 def_bool LD_IS_BFD || LLD_VERSION >= 210000 config RUSTC_HAS_SPAN_FILE def_bool RUSTC_VERSION >= 108800 config RUSTC_HAS_UNNECESSARY_TRANSMUTES def_bool RUSTC_VERSION >= 108800 config RUSTC_HAS_FILE_WITH_NUL def_bool RUSTC_VERSION >= 108900 config RUSTC_HAS_FILE_AS_C_STR def_bool RUSTC_VERSION >= 109100 config RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS def_bool RUSTC_VERSION >= 109800 config PAHOLE_VERSION int default "$(PAHOLE_VERSION)" config CONSTRUCTORS bool config IRQ_WORK def_bool y if SMP config BUILDTIME_TABLE_SORT bool config THREAD_INFO_IN_TASK bool help Select this to move thread_info off the stack into task_struct. To make this work, an arch will need to remove all thread_info fields except flags and fix any runtime bugs. One subtle change that will be needed is to use try_get_task_stack() and put_task_stack() in save_thread_stack_tsk() and get_wchan(). menu "General setup" config BROKEN bool help This option allows you to choose whether you want to try to compile (and fix) old drivers that haven't been updated to new infrastructure. config BROKEN_ON_SMP bool depends on BROKEN || !SMP default y config INIT_ENV_ARG_LIMIT int default 32 if !UML default 128 if UML help Maximum of each of the number of arguments and environment variables passed to init from the kernel command line. config COMPILE_TEST bool "Compile also drivers which will not load" depends on HAS_IOMEM help Some drivers can be compiled on a different platform than they are intended to be run on. Despite they cannot be loaded there (or even when they load they cannot be used due to missing HW support), developers still, opposing to distributors, might want to build such drivers to compile-test them. If you are a developer and want to build everything available, say Y here. If you are a user/distributor, say N here to exclude useless drivers to be distributed. config WERROR bool "Compile the kernel with warnings as errors" default COMPILE_TEST help A kernel build should not cause any compiler warnings, and this enables the '-Werror' (for C) and '-Dwarnings' (for Rust) flags to enforce that rule by default. Certain warnings from other tools such as the linker may be upgraded to errors with this option as well. However, if you have a new (or very old) compiler or linker with odd and unusual warnings, or you have some architecture with problems, you may need to disable this config option in order to successfully build the kernel. If in doubt, say Y. config UAPI_HEADER_TEST bool "Compile test UAPI headers" depends on HEADERS_INSTALL help Compile test headers exported to user-space to ensure they are self-contained, i.e. compilable as standalone units. If you are a developer or tester and want to ensure the exported headers are self-contained, say Y here. Otherwise, choose N. config LOCALVERSION string "Local version - append to kernel release" help Append an extra string to the end of your kernel version. This will show up when you type uname, for example. The string you set here will be appended after the contents of any files with a filename matching localversion* in your object and source tree, in that order. Your total string can be a maximum of 64 characters. config LOCALVERSION_AUTO bool "Automatically append version information to the version string" default y depends on !COMPILE_TEST help This will try to automatically determine if the current tree is a release tree by looking for git tags that belong to the current top of tree revision. A string of the format -gxxxxxxxx will be added to the localversion if a git-based tree is found. The string generated by this will be appended after any matching localversion* files, and after the value set in CONFIG_LOCALVERSION. (The actual string used here is the first 12 characters produced by running the command: $ git rev-parse --verify HEAD which is done within the script "scripts/setlocalversion".) config BUILD_SALT string "Build ID Salt" default "" help The build ID is used to link binaries and their debug info. Setting this option will use the value in the calculation of the build id. This is mostly useful for distributions which want to ensure the build is unique between builds. It's safe to leave the default. config HAVE_KERNEL_GZIP bool config HAVE_KERNEL_BZIP2 bool config HAVE_KERNEL_LZMA bool config HAVE_KERNEL_XZ bool config HAVE_KERNEL_LZO bool config HAVE_KERNEL_LZ4 bool config HAVE_KERNEL_ZSTD bool config HAVE_KERNEL_UNCOMPRESSED bool choice prompt "Kernel compression mode" default KERNEL_GZIP depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_ZSTD || HAVE_KERNEL_UNCOMPRESSED help The linux kernel is a kind of self-extracting executable. Several compression algorithms are available, which differ in efficiency, compression and decompression speed. Compression speed is only relevant when building a kernel. Decompression speed is relevant at each boot. If you have any problems with bzip2 or lzma compressed kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older version of this functionality (bzip2 only), for 2.4, was supplied by Christian Ludwig) High compression options are mostly useful for users, who are low on disk space (embedded systems), but for whom ram size matters less. If in doubt, select 'gzip' config KERNEL_GZIP bool "Gzip" depends on HAVE_KERNEL_GZIP help The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed. config KERNEL_BZIP2 bool "Bzip2" depends on HAVE_KERNEL_BZIP2 help Its compression ratio and speed is intermediate. Decompression speed is slowest among the choices. The kernel size is about 10% smaller with bzip2, in comparison to gzip. Bzip2 uses a large amount of memory. For modern kernels you will need at least 8MB RAM or more for booting. config KERNEL_LZMA bool "LZMA" depends on HAVE_KERNEL_LZMA help This compression algorithm's ratio is best. Decompression speed is between gzip and bzip2. Compression is slowest. The kernel size is about 33% smaller with LZMA in comparison to gzip. config KERNEL_XZ bool "XZ" depends on HAVE_KERNEL_XZ help XZ uses the LZMA2 algorithm and instruction set specific BCJ filters which can improve compression ratio of executable code. The size of the kernel is about 30% smaller with XZ in comparison to gzip. On architectures for which there is a BCJ filter (i386, x86_64, ARM, ARM64, RISC-V, big endian PowerPC, and SPARC), XZ will create a few percent smaller kernel than plain LZMA. The speed is about the same as with LZMA: The decompression speed of XZ is better than that of bzip2 but worse than gzip and LZO. Compression is slow. config KERNEL_LZO bool "LZO" depends on HAVE_KERNEL_LZO help Its compression ratio is the poorest among the choices. The kernel size is about 10% bigger than gzip; however its speed (both compression and decompression) is the fastest. config KERNEL_LZ4 bool "LZ4" depends on HAVE_KERNEL_LZ4 help LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding. A preliminary version of LZ4 de/compression tool is available at <https://code.google.com/p/lz4/>. Its compression ratio is worse than LZO. The size of the kernel is about 8% bigger than LZO. But the decompression speed is faster than LZO. config KERNEL_ZSTD bool "ZSTD" depends on HAVE_KERNEL_ZSTD help ZSTD is a compression algorithm targeting intermediate compression with fast decompression speed. It will compress better than GZIP and decompress around the same speed as LZO, but slower than LZ4. You will need at least 192 KB RAM or more for booting. The zstd command line tool is required for compression. config KERNEL_UNCOMPRESSED bool "None" depends on HAVE_KERNEL_UNCOMPRESSED help Produce uncompressed kernel image. This option is usually not what you want. It is useful for debugging the kernel in slow simulation environments, where decompressing and moving the kernel is awfully slow. This option allows early boot code to skip the decompressor and jump right at uncompressed kernel image. endchoice config DEFAULT_INIT string "Default init path" default "" help This option determines the default init for the system if no init= option is passed on the kernel command line. If the requested path is not present, we will still then move on to attempting further locations (e.g. /sbin/init, etc). If this is empty, we will just use the fallback list when init= is not passed. config DEFAULT_HOSTNAME string "Default hostname" default "(none)" help This option determines the default system hostname before userspace calls sethostname(2). The kernel traditionally uses "(none)" here, but you may wish to use a different default here to make a minimal system more usable with less configuration. config SYSVIPC bool "System V IPC" help Inter Process Communication is a suite of library functions and system calls which let processes (running programs) synchronize and exchange information. It is generally considered to be a good thing, and some programs won't run unless you say Y here. In particular, if you want to run the DOS emulator dosemu under Linux (read the DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>), you'll need to say Y here. You can find documentation about IPC with "info ipc" and also in section 6.4 of the Linux Programmer's Guide, available from <http://www.tldp.org/guides.html>. config SYSVIPC_SYSCTL bool depends on SYSVIPC depends on SYSCTL default y config SYSVIPC_COMPAT def_bool y depends on COMPAT && SYSVIPC config POSIX_MQUEUE bool "POSIX Message Queues" depends on NET help POSIX variant of message queues is a part of IPC. In POSIX message queues every message has a priority which decides about successionLines 1–500 of 2321. Load more
# SPDX-License-Identifier: GPL-2.0-only config CC_VERSION_TEXT string default "$(CC_VERSION_TEXT)" help This is used in unclear ways: - Re-run Kconfig when the compiler is updated The 'default' property references the environment variable, CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd. When the compiler is updated, Kconfig will be invoked. - Ensure full rebuild when the compiler is updated include/linux/compiler-version.h contains this option in the comment line so fixdep adds include/config/CC_VERSION_TEXT into the auto-generated dependency. When the compiler is updated, syncconfig will touch it and then every file will be rebuilt. config CC_IS_GCC def_bool $(success,test "$(cc-name)" = GCC) config GCC_VERSION int default $(cc-version) if CC_IS_GCC default 0 config CC_IS_CLANG def_bool $(success,test "$(cc-name)" = Clang) config CLANG_VERSION int default $(cc-version) if CC_IS_CLANG default 0 config AS_IS_GNU def_bool $(success,test "$(as-name)" = GNU) config AS_IS_LLVM def_bool $(success,test "$(as-name)" = LLVM) config AS_VERSION int # Use clang version if this is the integrated assembler default CLANG_VERSION if AS_IS_LLVM default $(as-version) config LD_IS_BFD def_bool $(success,test "$(ld-name)" = BFD) config LD_VERSION int default $(ld-version) if LD_IS_BFD default 0 config LD_IS_LLD def_bool $(success,test "$(ld-name)" = LLD) config LLD_VERSION int default $(ld-version) if LD_IS_LLD default 0 config RUSTC_VERSION int default $(rustc-version) help It does not depend on `RUST` since that one may need to use the version in a `depends on`. config RUST_IS_AVAILABLE def_bool $(success,$(srctree)/scripts/rust_is_available.sh) help This shows whether a suitable Rust toolchain is available (found). Please see Documentation/rust/quick-start.rst for instructions on how to satisfy the build requirements of Rust support. In particular, the Makefile target 'rustavailable' is useful to check why the Rust toolchain is not being detected. config RUSTC_LLVM_VERSION int default $(rustc-llvm-version) config RUSTC_LLVM_MAJOR_VERSION int default $(shell,expr $(rustc-llvm-version) / 10000) config RUSTC_CLANG_LLVM_COMPATIBLE bool default y if CC_IS_CLANG && RUSTC_LLVM_MAJOR_VERSION = $(shell,expr $(cc-version) / 10000) help This indicates whether Rust and Clang use LLVM of the same major version. Operations involving handling LLVM IR or bitcode (e.g. cross-language LTO) require the same LLVM major version to work properly. For best compatibility it is recommended that the exact same LLVM is used. config ARCH_HAS_CC_CAN_LINK bool config CC_CAN_LINK bool default ARCH_CC_CAN_LINK if ARCH_HAS_CC_CAN_LINK default $(cc_can_link_user,$(m64-flag)) if 64BIT default $(cc_can_link_user,$(m32-flag)) # Fixed in GCC 14, 13.3, 12.4 and 11.5 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113921 config GCC_ASM_GOTO_OUTPUT_BROKEN bool depends on CC_IS_GCC default y if GCC_VERSION < 110500 default y if GCC_VERSION >= 120000 && GCC_VERSION < 120400 default y if GCC_VERSION >= 130000 && GCC_VERSION < 130300 config CC_HAS_ASM_GOTO_OUTPUT def_bool y depends on !GCC_ASM_GOTO_OUTPUT_BROKEN depends on $(success,echo 'int foo(int x) { asm goto ("": "=r"(x) ::: bar); return x; bar: return 0; }' | $(CC) -x c - -c -o /dev/null) config CC_HAS_ASM_GOTO_TIED_OUTPUT depends on CC_HAS_ASM_GOTO_OUTPUT # Detect buggy gcc and clang, fixed in gcc-11 clang-14. def_bool $(success,echo 'int foo(int *x) { asm goto (".long (%l[bar]) - .": "+m"(*x) ::: bar); return *x; bar: return 0; }' | $CC -x c - -c -o /dev/null) config TOOLS_SUPPORT_RELR def_bool $(success,env "CC=$(CC)" "LD=$(LD)" "NM=$(NM)" "OBJCOPY=$(OBJCOPY)" $(srctree)/scripts/tools-support-relr.sh) config CC_HAS_ASM_INLINE def_bool $(success,echo 'void foo(void) { asm inline (""); }' | $(CC) -x c - -c -o /dev/null) config CC_HAS_ASSUME bool # clang needs to be at least 19.1.0 since the meaning of the assume # attribute changed: # https://github.com/llvm/llvm-project/commit/c44fa3e8a9a44c2e9a575768a3c185354b9f6c17 default y if CC_IS_CLANG && CLANG_VERSION >= 190100 # supported since gcc 13.1.0 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106654 default y if CC_IS_GCC && GCC_VERSION >= 130100 config CC_HAS_NO_PROFILE_FN_ATTR def_bool $(success,echo '__attribute__((no_profile_instrument_function)) int x();' | $(CC) -x c - -c -o /dev/null -Werror) config CC_HAS_COUNTED_BY bool # clang needs to be at least 20.1.0 to avoid potential crashes # when building structures that contain __counted_by # https://github.com/ClangBuiltLinux/linux/issues/2114 # https://github.com/llvm/llvm-project/commit/160fb1121cdf703c3ef5e61fb26c5659eb581489 default y if CC_IS_CLANG && CLANG_VERSION >= 200100 # supported since gcc 15.1.0 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896 default y if CC_IS_GCC && GCC_VERSION >= 150100 config CC_HAS_COUNTED_BY_PTR bool # supported since clang 22 default y if CC_IS_CLANG && CLANG_VERSION >= 220100 # supported since gcc 16.0.0 default y if CC_IS_GCC && GCC_VERSION >= 160000 config CC_HAS_BROKEN_COUNTED_BY_REF bool # https://github.com/llvm/llvm-project/issues/182575 default y if CC_IS_CLANG && CLANG_VERSION < 220100 config CC_HAS_ALLOC_TOKEN def_bool $(cc-option,-falloc-token-max=123) config CC_HAS_MULTIDIMENSIONAL_NONSTRING def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror) config LD_CAN_USE_KEEP_IN_OVERLAY # ld.lld prior to 21.0.0 did not support KEEP within an overlay description # https://github.com/llvm/llvm-project/pull/130661 def_bool LD_IS_BFD || LLD_VERSION >= 210000 config RUSTC_HAS_SPAN_FILE def_bool RUSTC_VERSION >= 108800 config RUSTC_HAS_UNNECESSARY_TRANSMUTES def_bool RUSTC_VERSION >= 108800 config RUSTC_HAS_FILE_WITH_NUL def_bool RUSTC_VERSION >= 108900 config RUSTC_HAS_FILE_AS_C_STR def_bool RUSTC_VERSION >= 109100 config RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS def_bool RUSTC_VERSION >= 109800 config PAHOLE_VERSION int default "$(PAHOLE_VERSION)" config CONSTRUCTORS bool config IRQ_WORK def_bool y if SMP config BUILDTIME_TABLE_SORT bool config THREAD_INFO_IN_TASK bool help Select this to move thread_info off the stack into task_struct. To make this work, an arch will need to remove all thread_info fields except flags and fix any runtime bugs. One subtle change that will be needed is to use try_get_task_stack() and put_task_stack() in save_thread_stack_tsk() and get_wchan(). menu "General setup" config BROKEN bool help This option allows you to choose whether you want to try to compile (and fix) old drivers that haven't been updated to new infrastructure. config BROKEN_ON_SMP bool depends on BROKEN || !SMP default y config INIT_ENV_ARG_LIMIT int default 32 if !UML default 128 if UML help Maximum of each of the number of arguments and environment variables passed to init from the kernel command line. config COMPILE_TEST bool "Compile also drivers which will not load" depends on HAS_IOMEM help Some drivers can be compiled on a different platform than they are intended to be run on. Despite they cannot be loaded there (or even when they load they cannot be used due to missing HW support), developers still, opposing to distributors, might want to build such drivers to compile-test them. If you are a developer and want to build everything available, say Y here. If you are a user/distributor, say N here to exclude useless drivers to be distributed. config WERROR bool "Compile the kernel with warnings as errors" default COMPILE_TEST help A kernel build should not cause any compiler warnings, and this enables the '-Werror' (for C) and '-Dwarnings' (for Rust) flags to enforce that rule by default. Certain warnings from other tools such as the linker may be upgraded to errors with this option as well. However, if you have a new (or very old) compiler or linker with odd and unusual warnings, or you have some architecture with problems, you may need to disable this config option in order to successfully build the kernel. If in doubt, say Y. config UAPI_HEADER_TEST bool "Compile test UAPI headers" depends on HEADERS_INSTALL help Compile test headers exported to user-space to ensure they are self-contained, i.e. compilable as standalone units. If you are a developer or tester and want to ensure the exported headers are self-contained, say Y here. Otherwise, choose N. config LOCALVERSION string "Local version - append to kernel release" help Append an extra string to the end of your kernel version. This will show up when you type uname, for example. The string you set here will be appended after the contents of any files with a filename matching localversion* in your object and source tree, in that order. Your total string can be a maximum of 64 characters. config LOCALVERSION_AUTO bool "Automatically append version information to the version string" default y depends on !COMPILE_TEST help This will try to automatically determine if the current tree is a release tree by looking for git tags that belong to the current top of tree revision. A string of the format -gxxxxxxxx will be added to the localversion if a git-based tree is found. The string generated by this will be appended after any matching localversion* files, and after the value set in CONFIG_LOCALVERSION. (The actual string used here is the first 12 characters produced by running the command: $ git rev-parse --verify HEAD which is done within the script "scripts/setlocalversion".) config BUILD_SALT string "Build ID Salt" default "" help The build ID is used to link binaries and their debug info. Setting this option will use the value in the calculation of the build id. This is mostly useful for distributions which want to ensure the build is unique between builds. It's safe to leave the default. config HAVE_KERNEL_GZIP bool config HAVE_KERNEL_BZIP2 bool config HAVE_KERNEL_LZMA bool config HAVE_KERNEL_XZ bool config HAVE_KERNEL_LZO bool config HAVE_KERNEL_LZ4 bool config HAVE_KERNEL_ZSTD bool config HAVE_KERNEL_UNCOMPRESSED bool choice prompt "Kernel compression mode" default KERNEL_GZIP depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4 || HAVE_KERNEL_ZSTD || HAVE_KERNEL_UNCOMPRESSED help The linux kernel is a kind of self-extracting executable. Several compression algorithms are available, which differ in efficiency, compression and decompression speed. Compression speed is only relevant when building a kernel. Decompression speed is relevant at each boot. If you have any problems with bzip2 or lzma compressed kernels, mail me (Alain Knaff) <alain@knaff.lu>. (An older version of this functionality (bzip2 only), for 2.4, was supplied by Christian Ludwig) High compression options are mostly useful for users, who are low on disk space (embedded systems), but for whom ram size matters less. If in doubt, select 'gzip' config KERNEL_GZIP bool "Gzip" depends on HAVE_KERNEL_GZIP help The old and tried gzip compression. It provides a good balance between compression ratio and decompression speed. config KERNEL_BZIP2 bool "Bzip2" depends on HAVE_KERNEL_BZIP2 help Its compression ratio and speed is intermediate. Decompression speed is slowest among the choices. The kernel size is about 10% smaller with bzip2, in comparison to gzip. Bzip2 uses a large amount of memory. For modern kernels you will need at least 8MB RAM or more for booting. config KERNEL_LZMA bool "LZMA" depends on HAVE_KERNEL_LZMA help This compression algorithm's ratio is best. Decompression speed is between gzip and bzip2. Compression is slowest. The kernel size is about 33% smaller with LZMA in comparison to gzip. config KERNEL_XZ bool "XZ" depends on HAVE_KERNEL_XZ help XZ uses the LZMA2 algorithm and instruction set specific BCJ filters which can improve compression ratio of executable code. The size of the kernel is about 30% smaller with XZ in comparison to gzip. On architectures for which there is a BCJ filter (i386, x86_64, ARM, ARM64, RISC-V, big endian PowerPC, and SPARC), XZ will create a few percent smaller kernel than plain LZMA. The speed is about the same as with LZMA: The decompression speed of XZ is better than that of bzip2 but worse than gzip and LZO. Compression is slow. config KERNEL_LZO bool "LZO" depends on HAVE_KERNEL_LZO help Its compression ratio is the poorest among the choices. The kernel size is about 10% bigger than gzip; however its speed (both compression and decompression) is the fastest. config KERNEL_LZ4 bool "LZ4" depends on HAVE_KERNEL_LZ4 help LZ4 is an LZ77-type compressor with a fixed, byte-oriented encoding. A preliminary version of LZ4 de/compression tool is available at <https://code.google.com/p/lz4/>. Its compression ratio is worse than LZO. The size of the kernel is about 8% bigger than LZO. But the decompression speed is faster than LZO. config KERNEL_ZSTD bool "ZSTD" depends on HAVE_KERNEL_ZSTD help ZSTD is a compression algorithm targeting intermediate compression with fast decompression speed. It will compress better than GZIP and decompress around the same speed as LZO, but slower than LZ4. You will need at least 192 KB RAM or more for booting. The zstd command line tool is required for compression. config KERNEL_UNCOMPRESSED bool "None" depends on HAVE_KERNEL_UNCOMPRESSED help Produce uncompressed kernel image. This option is usually not what you want. It is useful for debugging the kernel in slow simulation environments, where decompressing and moving the kernel is awfully slow. This option allows early boot code to skip the decompressor and jump right at uncompressed kernel image. endchoice config DEFAULT_INIT string "Default init path" default "" help This option determines the default init for the system if no init= option is passed on the kernel command line. If the requested path is not present, we will still then move on to attempting further locations (e.g. /sbin/init, etc). If this is empty, we will just use the fallback list when init= is not passed. config DEFAULT_HOSTNAME string "Default hostname" default "(none)" help This option determines the default system hostname before userspace calls sethostname(2). The kernel traditionally uses "(none)" here, but you may wish to use a different default here to make a minimal system more usable with less configuration. config SYSVIPC bool "System V IPC" help Inter Process Communication is a suite of library functions and system calls which let processes (running programs) synchronize and exchange information. It is generally considered to be a good thing, and some programs won't run unless you say Y here. In particular, if you want to run the DOS emulator dosemu under Linux (read the DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>), you'll need to say Y here. You can find documentation about IPC with "info ipc" and also in section 6.4 of the Linux Programmer's Guide, available from <http://www.tldp.org/guides.html>. config SYSVIPC_SYSCTL bool depends on SYSVIPC depends on SYSCTL default y config SYSVIPC_COMPAT def_bool y depends on COMPAT && SYSVIPC config POSIX_MQUEUE bool "POSIX Message Queues" depends on NET help POSIX variant of message queues is a part of IPC. In POSIX message queues every message has a priority which decides about succession