Kbuild updates for v5.16
- Remove the global -isystem compiler flag, which was made possible by the introduction of <linux/stdarg.h> - Improve the Kconfig help to print the location in the top menu level - Fix "FORCE prerequisite is missing" build warning for sparc - Add new build targets, tarzst-pkg and perf-tarzst-src-pkg, which generate a zstd-compressed tarball - Prevent gen_init_cpio tool from generating a corrupted cpio when KBUILD_BUILD_TIMESTAMP is set to 2106-02-07 or later - Misc cleanups -----BEGIN PGP SIGNATURE----- iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAmGGkysVHG1hc2FoaXJv eUBrZXJuZWwub3JnAAoJED2LAQed4NsGgZkQAIX4i9Tt6pyl/2xGDGkzUqjprfoH QUIo1DoUclLUygoakrrrX3EnZLWrslgPTKjQxdiV6RA6xHfe4cYgNTSq8zM9lsPT lu+B4nEDqoXQ5gyLxMlnjS3FRQTNYIeBZEhSAIiW8TENdLKlKc+NYdoj7th50dO0 SkXRa2dpWHa6t7ZRqHIHMpUWA7gm0w22ZbgQmyUv1CDGO4IHPLqe2b2PMsrzhSZ1 yypP1l6aQVKuP0hN9aytbTRqDxUd0uOzBf00PK5zx23hjdwZ9wmZrFTKDf9fAu/+ nR7gBsa5YoYNQh3UkayZXjR5dClmgsCXZ25OXI7YucQp/8OJ5fadfn1NFpJHsw56 n5cckbHIXgnFUcel5YlkR6qTHjpzdr9vHm90MmiuX99b3oy9czl6pY3qkNfRkllQ v7ME5L1qlw3P3ia1KA+H4zW/LIJ8p5cbKBwaY22m3kY3bTx7PiOfMlep4UVqxXSb 0/OqxSsmYg5LlmwEQ0SSsx45hE0o9nG/cdjkHu1jUOUHxYfpt1T4MTILeGUwmjzd TydJym5MZyXBawu4NVB3QLoKm5Jt2BXtyaWOtq74VSrs77roNCdYuQWJ+1aBf2Pg 0s4CVC2cC7KlxJDImoqswZATGXPMfbiVDcuVSSukYRgBMeCBPUzRhB8YP36BZyD3 9vFYmqSujtUU7nWb =ATFN -----END PGP SIGNATURE----- Merge tag 'kbuild-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild Pull Kbuild updates from Masahiro Yamada: - Remove the global -isystem compiler flag, which was made possible by the introduction of <linux/stdarg.h> - Improve the Kconfig help to print the location in the top menu level - Fix "FORCE prerequisite is missing" build warning for sparc - Add new build targets, tarzst-pkg and perf-tarzst-src-pkg, which generate a zstd-compressed tarball - Prevent gen_init_cpio tool from generating a corrupted cpio when KBUILD_BUILD_TIMESTAMP is set to 2106-02-07 or later - Misc cleanups * tag 'kbuild-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild: (28 commits) kbuild: use more subdir- for visiting subdirectories while cleaning sh: remove meaningless archclean line initramfs: Check timestamp to prevent broken cpio archive kbuild: split DEBUG_CFLAGS out to scripts/Makefile.debug gen_init_cpio: add static const qualifiers kbuild: Add make tarzst-pkg build option scripts: update the comments of kallsyms support sparc: Add missing "FORCE" target when using if_changed kconfig: refactor conf_touch_dep() kconfig: refactor conf_write_dep() kconfig: refactor conf_write_autoconf() kconfig: add conf_get_autoheader_name() kconfig: move sym_escape_string_value() to confdata.c kconfig: refactor listnewconfig code kconfig: refactor conf_write_symbol() kconfig: refactor conf_write_heading() kconfig: remove 'const' from the return type of sym_escape_string_value() kconfig: rename a variable in the lexer to a clearer name kconfig: narrow the scope of variables in the lexer kconfig: Create links to main menu items in search ...
This commit is contained in:
Коммит
1e9ed9360f
|
@ -1050,22 +1050,9 @@ is not sufficient this sometimes needs to be explicit.
|
||||||
The above assignment instructs kbuild to descend down in the
|
The above assignment instructs kbuild to descend down in the
|
||||||
directory compressed/ when "make clean" is executed.
|
directory compressed/ when "make clean" is executed.
|
||||||
|
|
||||||
To support the clean infrastructure in the Makefiles that build the
|
|
||||||
final bootimage there is an optional target named archclean:
|
|
||||||
|
|
||||||
Example::
|
|
||||||
|
|
||||||
#arch/x86/Makefile
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/x86/boot
|
|
||||||
|
|
||||||
When "make clean" is executed, make will descend down in arch/x86/boot,
|
|
||||||
and clean as usual. The Makefile located in arch/x86/boot/ may use
|
|
||||||
the subdir- trick to descend further down.
|
|
||||||
|
|
||||||
Note 1: arch/$(SRCARCH)/Makefile cannot use "subdir-", because that file is
|
Note 1: arch/$(SRCARCH)/Makefile cannot use "subdir-", because that file is
|
||||||
included in the top level makefile, and the kbuild infrastructure
|
included in the top level makefile. Instead, arch/$(SRCARCH)/Kbuild can use
|
||||||
is not operational at that point.
|
"subdir-".
|
||||||
|
|
||||||
Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
|
Note 2: All directories listed in core-y, libs-y, drivers-y and net-y will
|
||||||
be visited during "make clean".
|
be visited during "make clean".
|
||||||
|
|
41
Makefile
41
Makefile
|
@ -850,44 +850,6 @@ ifdef CONFIG_ZERO_CALL_USED_REGS
|
||||||
KBUILD_CFLAGS += -fzero-call-used-regs=used-gpr
|
KBUILD_CFLAGS += -fzero-call-used-regs=used-gpr
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DEBUG_CFLAGS :=
|
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO
|
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO_SPLIT
|
|
||||||
DEBUG_CFLAGS += -gsplit-dwarf
|
|
||||||
else
|
|
||||||
DEBUG_CFLAGS += -g
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef CONFIG_AS_IS_LLVM
|
|
||||||
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
|
|
||||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
|
|
||||||
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
|
|
||||||
DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y)
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO_REDUCED
|
|
||||||
DEBUG_CFLAGS += -fno-var-tracking
|
|
||||||
ifdef CONFIG_CC_IS_GCC
|
|
||||||
DEBUG_CFLAGS += -femit-struct-debug-baseonly
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef CONFIG_DEBUG_INFO_COMPRESSED
|
|
||||||
DEBUG_CFLAGS += -gz=zlib
|
|
||||||
KBUILD_AFLAGS += -gz=zlib
|
|
||||||
KBUILD_LDFLAGS += --compress-debug-sections=zlib
|
|
||||||
endif
|
|
||||||
|
|
||||||
endif # CONFIG_DEBUG_INFO
|
|
||||||
|
|
||||||
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
|
|
||||||
export DEBUG_CFLAGS
|
|
||||||
|
|
||||||
ifdef CONFIG_FUNCTION_TRACER
|
ifdef CONFIG_FUNCTION_TRACER
|
||||||
ifdef CONFIG_FTRACE_MCOUNT_USE_CC
|
ifdef CONFIG_FTRACE_MCOUNT_USE_CC
|
||||||
CC_FLAGS_FTRACE += -mrecord-mcount
|
CC_FLAGS_FTRACE += -mrecord-mcount
|
||||||
|
@ -984,7 +946,7 @@ KBUILD_CFLAGS += -falign-functions=64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||||
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
NOSTDINC_FLAGS += -nostdinc
|
||||||
|
|
||||||
# warn about C99 declaration after statement
|
# warn about C99 declaration after statement
|
||||||
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
KBUILD_CFLAGS += -Wdeclaration-after-statement
|
||||||
|
@ -1051,6 +1013,7 @@ KBUILD_CPPFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
||||||
|
|
||||||
# include additional Makefiles when needed
|
# include additional Makefiles when needed
|
||||||
include-y := scripts/Makefile.extrawarn
|
include-y := scripts/Makefile.extrawarn
|
||||||
|
include-$(CONFIG_DEBUG_INFO) += scripts/Makefile.debug
|
||||||
include-$(CONFIG_KASAN) += scripts/Makefile.kasan
|
include-$(CONFIG_KASAN) += scripts/Makefile.kasan
|
||||||
include-$(CONFIG_KCSAN) += scripts/Makefile.kcsan
|
include-$(CONFIG_KCSAN) += scripts/Makefile.kcsan
|
||||||
include-$(CONFIG_UBSAN) += scripts/Makefile.ubsan
|
include-$(CONFIG_UBSAN) += scripts/Makefile.ubsan
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y += kernel/ mm/
|
obj-y += kernel/ mm/
|
||||||
obj-$(CONFIG_MATHEMU) += math-emu/
|
obj-$(CONFIG_MATHEMU) += math-emu/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -55,9 +55,6 @@ $(boot)/vmlinux.gz: vmlinux
|
||||||
bootimage bootpfile bootpzfile: vmlinux
|
bootimage bootpfile bootpzfile: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/alpha/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/alpha/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
obj-y += kernel/
|
obj-y += kernel/
|
||||||
obj-y += mm/
|
obj-y += mm/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -112,6 +112,3 @@ uImage: $(uimage-default-y)
|
||||||
@$(kecho) ' Image $(boot)/uImage is ready'
|
@$(kecho) ' Image $(boot)/uImage is ready'
|
||||||
|
|
||||||
CLEAN_FILES += $(boot)/uImage
|
CLEAN_FILES += $(boot)/uImage
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
|
@ -9,3 +9,6 @@ obj-y += kernel/ mm/ common/
|
||||||
obj-y += probes/
|
obj-y += probes/
|
||||||
obj-y += net/
|
obj-y += net/
|
||||||
obj-y += crypto/
|
obj-y += crypto/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -318,10 +318,6 @@ ifeq ($(CONFIG_VDSO),y)
|
||||||
$(Q)$(MAKE) $(build)=arch/arm/vdso $@
|
$(Q)$(MAKE) $(build)=arch/arm/vdso $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
# My testing targets (bypasses dependencies)
|
# My testing targets (bypasses dependencies)
|
||||||
bp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
|
bp:; $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/bootpImage
|
||||||
|
|
||||||
|
|
|
@ -4,3 +4,6 @@ obj-$(CONFIG_KVM) += kvm/
|
||||||
obj-$(CONFIG_XEN) += xen/
|
obj-$(CONFIG_XEN) += xen/
|
||||||
obj-$(subst m,y,$(CONFIG_HYPERV)) += hyperv/
|
obj-$(subst m,y,$(CONFIG_HYPERV)) += hyperv/
|
||||||
obj-$(CONFIG_CRYPTO) += crypto/
|
obj-$(CONFIG_CRYPTO) += crypto/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -182,13 +182,6 @@ ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
# We use MRPROPER_FILES and CLEAN_FILES now
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/arm64/kernel/vdso
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/arm64/kernel/vdso32
|
|
||||||
|
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
||||||
# In order to do that, we should use the archprepare target, but we can't since
|
# In order to do that, we should use the archprepare target, but we can't since
|
||||||
|
|
|
@ -81,3 +81,6 @@ extra-y += $(head-y) vmlinux.lds
|
||||||
ifeq ($(CONFIG_DEBUG_EFI),y)
|
ifeq ($(CONFIG_DEBUG_EFI),y)
|
||||||
AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
|
AFLAGS_head.o += -DVMLINUX_PATH="\"$(realpath $(objtree)/vmlinux)\""
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += vdso vdso32
|
||||||
|
|
|
@ -9,6 +9,8 @@ ifeq ($(CONFIG_KERNEL_MODE_NEON), y)
|
||||||
obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
|
obj-$(CONFIG_XOR_BLOCKS) += xor-neon.o
|
||||||
CFLAGS_REMOVE_xor-neon.o += -mgeneral-regs-only
|
CFLAGS_REMOVE_xor-neon.o += -mgeneral-regs-only
|
||||||
CFLAGS_xor-neon.o += -ffreestanding
|
CFLAGS_xor-neon.o += -ffreestanding
|
||||||
|
# Enable <arm_neon.h>
|
||||||
|
CFLAGS_xor-neon.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
|
lib-$(CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE) += uaccess_flushcache.o
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -76,9 +76,6 @@ all: zImage
|
||||||
zImage Image uImage: vmlinux
|
zImage Image uImage: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
define archhelp
|
define archhelp
|
||||||
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
|
echo '* zImage - Compressed kernel image (arch/$(ARCH)/boot/zImage)'
|
||||||
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
|
echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y += kernel/ mm/ boot/dts/
|
obj-y += kernel/ mm/ boot/dts/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -34,9 +34,6 @@ libs-y += arch/$(ARCH)/lib/
|
||||||
|
|
||||||
boot := arch/h8300/boot
|
boot := arch/h8300/boot
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
vmlinux.srec vmlinux.bin zImage uImage.bin: vmlinux
|
vmlinux.srec vmlinux.bin zImage uImage.bin: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,6 @@ vmlinux.bin: vmlinux FORCE
|
||||||
unwcheck: vmlinux
|
unwcheck: vmlinux
|
||||||
-$(Q)READELF=$(READELF) $(PYTHON3) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
-$(Q)READELF=$(READELF) $(PYTHON3) $(srctree)/arch/ia64/scripts/unwcheck.py $<
|
||||||
|
|
||||||
archclean:
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/ia64/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/ia64/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
# m68k/Makefile
|
# m68k/Makefile
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
#
|
#
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
|
|
@ -3,3 +3,6 @@ obj-y += kernel/
|
||||||
obj-y += mm/
|
obj-y += mm/
|
||||||
obj-$(CONFIG_PCI) += pci/
|
obj-$(CONFIG_PCI) += pci/
|
||||||
obj-y += boot/dts/
|
obj-y += boot/dts/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -60,9 +60,6 @@ export DTB
|
||||||
|
|
||||||
all: linux.bin
|
all: linux.bin
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/microblaze/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/microblaze/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -25,3 +25,6 @@ obj-y += vdso/
|
||||||
ifdef CONFIG_KVM
|
ifdef CONFIG_KVM
|
||||||
obj-y += kvm/
|
obj-y += kvm/
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
# Copyright (C) 2002, 2003, 2004 Maciej W. Rozycki
|
# Copyright (C) 2002, 2003, 2004 Maciej W. Rozycki
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" cleaning up for this architecture.
|
|
||||||
#
|
#
|
||||||
|
|
||||||
archscripts: scripts_basic
|
archscripts: scripts_basic
|
||||||
|
@ -426,11 +425,6 @@ endif
|
||||||
$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
|
$(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE)
|
||||||
$(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)
|
$(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE)
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/mips/boot
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/mips/boot/compressed
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/mips/boot/tools
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/mips/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/mips/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -171,3 +171,6 @@ $(obj)/vmlinux.itb: $(obj)/vmlinux.its $(obj)/vmlinux.bin FORCE
|
||||||
|
|
||||||
$(obj)/vmlinux.%.itb: $(obj)/vmlinux.%.its $(obj)/vmlinux.bin.% FORCE
|
$(obj)/vmlinux.%.itb: $(obj)/vmlinux.%.its $(obj)/vmlinux.bin.% FORCE
|
||||||
$(call if_changed,itb-image,$<)
|
$(call if_changed,itb-image,$<)
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += compressed tools
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -9,6 +9,8 @@ endif
|
||||||
# Avoid generating FPU instructions
|
# Avoid generating FPU instructions
|
||||||
arch-y += -mno-ext-fpu-sp -mno-ext-fpu-dp -mfloat-abi=soft
|
arch-y += -mno-ext-fpu-sp -mno-ext-fpu-dp -mfloat-abi=soft
|
||||||
|
|
||||||
|
# Enable <nds32_intrinsic.h>
|
||||||
|
KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
KBUILD_CFLAGS += $(call cc-option, -mno-sched-prolog-epilog)
|
KBUILD_CFLAGS += $(call cc-option, -mno-sched-prolog-epilog)
|
||||||
KBUILD_CFLAGS += -mcmodel=large
|
KBUILD_CFLAGS += -mcmodel=large
|
||||||
|
|
||||||
|
@ -62,9 +64,6 @@ prepare: vdso_prepare
|
||||||
vdso_prepare: prepare0
|
vdso_prepare: prepare0
|
||||||
$(Q)$(MAKE) $(build)=arch/nds32/kernel/vdso include/generated/vdso-offsets.h
|
$(Q)$(MAKE) $(build)=arch/nds32/kernel/vdso include/generated/vdso-offsets.h
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
define archhelp
|
define archhelp
|
||||||
echo ' Image - kernel image (arch/$(ARCH)/boot/Image)'
|
echo ' Image - kernel image (arch/$(ARCH)/boot/Image)'
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
# Written by Fredrik Markstrom
|
# Written by Fredrik Markstrom
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" cleaning up for this architecture.
|
|
||||||
#
|
#
|
||||||
# Nios2 port by Wind River Systems Inc trough:
|
# Nios2 port by Wind River Systems Inc trough:
|
||||||
# fredrik.markstrom@gmail.com and ivarholmqvist@gmail.com
|
# fredrik.markstrom@gmail.com and ivarholmqvist@gmail.com
|
||||||
|
@ -53,14 +52,12 @@ core-y += $(nios2-boot)/dts/
|
||||||
|
|
||||||
all: vmImage
|
all: vmImage
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(nios2-boot)
|
|
||||||
|
|
||||||
$(BOOT_TARGETS): vmlinux
|
$(BOOT_TARGETS): vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@
|
$(Q)$(MAKE) $(build)=$(nios2-boot) $(nios2-boot)/$@
|
||||||
|
|
||||||
install:
|
install:
|
||||||
$(Q)$(MAKE) $(build)=$(nios2-boot) BOOTIMAGE=$(KBUILD_IMAGE) install
|
sh $(srctree)/$(nios2-boot)/install.sh $(KERNELRELEASE) \
|
||||||
|
$(KBUILD_IMAGE) System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
define archhelp
|
define archhelp
|
||||||
echo '* vmImage - Kernel-only image for U-Boot ($(KBUILD_IMAGE))'
|
echo '* vmImage - Kernel-only image for U-Boot ($(KBUILD_IMAGE))'
|
||||||
|
|
|
@ -30,6 +30,3 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE
|
||||||
|
|
||||||
$(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE
|
$(obj)/compressed/vmlinux: $(obj)/vmlinux.gz FORCE
|
||||||
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
||||||
|
|
||||||
install:
|
|
||||||
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)"
|
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
obj-y += lib/ kernel/ mm/
|
obj-y += lib/ kernel/ mm/
|
||||||
obj-y += boot/dts/
|
obj-y += boot/dts/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
# BK Id: %F% %I% %G% %U% %#%
|
# BK Id: %F% %I% %G% %U% %#%
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
#
|
#
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
@ -48,6 +46,3 @@ PHONY += vmlinux.bin
|
||||||
|
|
||||||
vmlinux.bin: vmlinux
|
vmlinux.bin: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
|
@ -1,2 +1,5 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0-only
|
# SPDX-License-Identifier: GPL-2.0-only
|
||||||
obj-y += mm/ kernel/ math-emu/
|
obj-y += mm/ kernel/ math-emu/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -2,9 +2,7 @@
|
||||||
# parisc/Makefile
|
# parisc/Makefile
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
#
|
#
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
@ -181,8 +179,5 @@ define archhelp
|
||||||
@echo ' zinstall - Install compressed vmlinuz kernel'
|
@echo ' zinstall - Install compressed vmlinuz kernel'
|
||||||
endef
|
endef
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/parisc/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/parisc/kernel/syscalls all
|
||||||
|
|
|
@ -16,3 +16,6 @@ obj-$(CONFIG_KVM) += kvm/
|
||||||
obj-$(CONFIG_PERF_EVENTS) += perf/
|
obj-$(CONFIG_PERF_EVENTS) += perf/
|
||||||
obj-$(CONFIG_KEXEC_CORE) += kexec/
|
obj-$(CONFIG_KEXEC_CORE) += kexec/
|
||||||
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture.
|
|
||||||
#
|
#
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
@ -411,9 +409,6 @@ install:
|
||||||
sh -x $(srctree)/$(boot)/install.sh "$(KERNELRELEASE)" vmlinux \
|
sh -x $(srctree)/$(boot)/install.sh "$(KERNELRELEASE)" vmlinux \
|
||||||
System.map "$(INSTALL_PATH)"
|
System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
# We need to generate vdso-offsets.h before compiling certain files in kernel/.
|
||||||
# In order to do that, we should use the archprepare target, but we can't since
|
# In order to do that, we should use the archprepare target, but we can't since
|
||||||
|
|
|
@ -65,5 +65,7 @@ obj-$(CONFIG_FTR_FIXUP_SELFTEST) += feature-fixups-test.o
|
||||||
|
|
||||||
obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
|
obj-$(CONFIG_ALTIVEC) += xor_vmx.o xor_vmx_glue.o
|
||||||
CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
|
CFLAGS_xor_vmx.o += -maltivec $(call cc-option,-mabi=altivec)
|
||||||
|
# Enable <altivec.h>
|
||||||
|
CFLAGS_xor_vmx.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
|
|
||||||
obj-$(CONFIG_PPC64) += $(obj64-y)
|
obj-$(CONFIG_PPC64) += $(obj64-y)
|
||||||
|
|
|
@ -2,3 +2,6 @@
|
||||||
|
|
||||||
obj-y += kernel/ mm/ net/
|
obj-y += kernel/ mm/ net/
|
||||||
obj-$(CONFIG_BUILTIN_DTB) += boot/dts/
|
obj-$(CONFIG_BUILTIN_DTB) += boot/dts/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
#
|
#
|
||||||
# This file is subject to the terms and conditions of the GNU General Public
|
# This file is subject to the terms and conditions of the GNU General Public
|
||||||
# License. See the file "COPYING" in the main directory of this archive
|
# License. See the file "COPYING" in the main directory of this archive
|
||||||
|
@ -138,6 +136,3 @@ zinstall: install-image = Image.gz
|
||||||
install zinstall:
|
install zinstall:
|
||||||
$(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
|
$(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
|
||||||
$(boot)/$(install-image) System.map "$(INSTALL_PATH)"
|
$(boot)/$(install-image) System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
|
@ -8,3 +8,6 @@ obj-$(CONFIG_APPLDATA_BASE) += appldata/
|
||||||
obj-y += net/
|
obj-y += net/
|
||||||
obj-$(CONFIG_PCI) += pci/
|
obj-$(CONFIG_PCI) += pci/
|
||||||
obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
|
obj-$(CONFIG_ARCH_HAS_KEXEC_PURGATORY) += purgatory/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot tools
|
||||||
|
|
|
@ -3,9 +3,7 @@
|
||||||
# s390/Makefile
|
# s390/Makefile
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1994 by Linus Torvalds
|
# Copyright (C) 1994 by Linus Torvalds
|
||||||
#
|
#
|
||||||
|
@ -147,10 +145,6 @@ zfcpdump:
|
||||||
vdso_install:
|
vdso_install:
|
||||||
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
|
$(Q)$(MAKE) $(build)=arch/$(ARCH)/kernel/vdso64 $@
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
$(Q)$(MAKE) $(clean)=$(tools)
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=$(syscalls) uapi
|
$(Q)$(MAKE) $(build)=$(syscalls) uapi
|
||||||
|
|
||||||
|
|
|
@ -2,3 +2,6 @@
|
||||||
obj-y += kernel/ mm/ boards/
|
obj-y += kernel/ mm/ boards/
|
||||||
obj-$(CONFIG_SH_FPU_EMU) += math-emu/
|
obj-$(CONFIG_SH_FPU_EMU) += math-emu/
|
||||||
obj-$(CONFIG_USE_BUILTIN_DTB) += boot/dts/
|
obj-$(CONFIG_USE_BUILTIN_DTB) += boot/dts/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -198,10 +198,6 @@ compressed: zImage
|
||||||
archprepare:
|
archprepare:
|
||||||
$(Q)$(MAKE) $(build)=arch/sh/tools include/generated/machtypes.h
|
$(Q)$(MAKE) $(build)=arch/sh/tools include/generated/machtypes.h
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/sh/kernel/vsyscall
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/sh/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/sh/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,6 @@ obj-y += math-emu/
|
||||||
obj-y += net/
|
obj-y += net/
|
||||||
obj-y += crypto/
|
obj-y += crypto/
|
||||||
obj-$(CONFIG_SPARC64) += vdso/
|
obj-$(CONFIG_SPARC64) += vdso/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot
|
||||||
|
|
|
@ -75,9 +75,6 @@ install:
|
||||||
sh $(srctree)/$(boot)/install.sh $(KERNELRELEASE) $(KBUILD_IMAGE) \
|
sh $(srctree)/$(boot)/install.sh $(KERNELRELEASE) $(KBUILD_IMAGE) \
|
||||||
System.map "$(INSTALL_PATH)"
|
System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
archclean:
|
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
|
|
||||||
archheaders:
|
archheaders:
|
||||||
$(Q)$(MAKE) $(build)=arch/sparc/kernel/syscalls all
|
$(Q)$(MAKE) $(build)=arch/sparc/kernel/syscalls all
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ ifeq ($(CONFIG_SPARC64),y)
|
||||||
|
|
||||||
# Actual linking
|
# Actual linking
|
||||||
|
|
||||||
$(obj)/zImage: $(obj)/image
|
$(obj)/zImage: $(obj)/image FORCE
|
||||||
$(call if_changed,gzip)
|
$(call if_changed,gzip)
|
||||||
@echo ' kernel: $@ is ready'
|
@echo ' kernel: $@ is ready'
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ $(obj)/vmlinux.aout: vmlinux FORCE
|
||||||
@echo ' kernel: $@ is ready'
|
@echo ' kernel: $@ is ready'
|
||||||
else
|
else
|
||||||
|
|
||||||
$(obj)/zImage: $(obj)/image
|
$(obj)/zImage: $(obj)/image FORCE
|
||||||
$(call if_changed,strip)
|
$(call if_changed,strip)
|
||||||
@echo ' kernel: $@ is ready'
|
@echo ' kernel: $@ is ready'
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ OBJCOPYFLAGS_image.bin := -S -O binary -R .note -R .comment
|
||||||
$(obj)/image.bin: $(obj)/image FORCE
|
$(obj)/image.bin: $(obj)/image FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
$(obj)/image.gz: $(obj)/image.bin
|
$(obj)/image.gz: $(obj)/image.bin FORCE
|
||||||
$(call if_changed,gzip)
|
$(call if_changed,gzip)
|
||||||
|
|
||||||
UIMAGE_LOADADDR = $(CONFIG_UBOOT_LOAD_ADDR)
|
UIMAGE_LOADADDR = $(CONFIG_UBOOT_LOAD_ADDR)
|
||||||
|
@ -56,7 +56,7 @@ quiet_cmd_uimage.o = UIMAGE.O $@
|
||||||
-r -b binary $@ -o $@.o
|
-r -b binary $@ -o $@.o
|
||||||
|
|
||||||
targets += uImage
|
targets += uImage
|
||||||
$(obj)/uImage: $(obj)/image.gz
|
$(obj)/uImage: $(obj)/image.gz FORCE
|
||||||
$(call if_changed,uimage)
|
$(call if_changed,uimage)
|
||||||
$(call if_changed,uimage.o)
|
$(call if_changed,uimage.o)
|
||||||
@echo ' Image $@ is ready'
|
@echo ' Image $@ is ready'
|
||||||
|
|
|
@ -25,3 +25,6 @@ obj-y += platform/
|
||||||
obj-y += net/
|
obj-y += net/
|
||||||
|
|
||||||
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
obj-$(CONFIG_KEXEC_FILE) += purgatory/
|
||||||
|
|
||||||
|
# for cleaning
|
||||||
|
subdir- += boot tools
|
||||||
|
|
|
@ -283,8 +283,6 @@ endif
|
||||||
archclean:
|
archclean:
|
||||||
$(Q)rm -rf $(objtree)/arch/i386
|
$(Q)rm -rf $(objtree)/arch/i386
|
||||||
$(Q)rm -rf $(objtree)/arch/x86_64
|
$(Q)rm -rf $(objtree)/arch/x86_64
|
||||||
$(Q)$(MAKE) $(clean)=$(boot)
|
|
||||||
$(Q)$(MAKE) $(clean)=arch/x86/tools
|
|
||||||
|
|
||||||
define archhelp
|
define archhelp
|
||||||
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
|
echo '* bzImage - Compressed kernel image (arch/x86/boot/bzImage)'
|
||||||
|
|
|
@ -7,9 +7,7 @@
|
||||||
# Copyright (C) 2014 Cadence Design Systems Inc.
|
# Copyright (C) 2014 Cadence Design Systems Inc.
|
||||||
#
|
#
|
||||||
# This file is included by the global makefile so that you can add your own
|
# This file is included by the global makefile so that you can add your own
|
||||||
# architecture-specific flags and dependencies. Remember to do have actions
|
# architecture-specific flags and dependencies.
|
||||||
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
||||||
# this architecture
|
|
||||||
|
|
||||||
# Core configuration.
|
# Core configuration.
|
||||||
# (Use VAR=<xtensa_config> to use another default compiler.)
|
# (Use VAR=<xtensa_config> to use another default compiler.)
|
||||||
|
|
|
@ -119,6 +119,8 @@ CFLAGS_aegis128-neon-inner.o += $(aegis128-cflags-y)
|
||||||
CFLAGS_REMOVE_aegis128-neon-inner.o += -mgeneral-regs-only
|
CFLAGS_REMOVE_aegis128-neon-inner.o += -mgeneral-regs-only
|
||||||
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
aegis128-$(CONFIG_CRYPTO_AEGIS128_SIMD) += aegis128-neon.o aegis128-neon-inner.o
|
||||||
endif
|
endif
|
||||||
|
# Enable <arm_neon.h>
|
||||||
|
CFLAGS_aegis128-neon-inner.o += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
|
|
||||||
obj-$(CONFIG_CRYPTO_PCRYPT) += pcrypt.o
|
obj-$(CONFIG_CRYPTO_PCRYPT) += pcrypt.o
|
||||||
obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o
|
obj-$(CONFIG_CRYPTO_CRYPTD) += cryptd.o
|
||||||
|
|
|
@ -14,6 +14,8 @@ hostprogs += mktables
|
||||||
|
|
||||||
ifeq ($(CONFIG_ALTIVEC),y)
|
ifeq ($(CONFIG_ALTIVEC),y)
|
||||||
altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
|
altivec_flags := -maltivec $(call cc-option,-mabi=altivec)
|
||||||
|
# Enable <altivec.h>
|
||||||
|
altivec_flags += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
|
|
||||||
ifdef CONFIG_CC_IS_CLANG
|
ifdef CONFIG_CC_IS_CLANG
|
||||||
# clang ppc port does not yet support -maltivec when -msoft-float is
|
# clang ppc port does not yet support -maltivec when -msoft-float is
|
||||||
|
@ -34,6 +36,8 @@ endif
|
||||||
# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
|
# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
|
||||||
ifeq ($(CONFIG_KERNEL_MODE_NEON),y)
|
ifeq ($(CONFIG_KERNEL_MODE_NEON),y)
|
||||||
NEON_FLAGS := -ffreestanding
|
NEON_FLAGS := -ffreestanding
|
||||||
|
# Enable <arm_neon.h>
|
||||||
|
NEON_FLAGS += -isystem $(shell $(CC) -print-file-name=include)
|
||||||
ifeq ($(ARCH),arm)
|
ifeq ($(ARCH),arm)
|
||||||
NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
|
NEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -155,7 +155,7 @@ $(obj)/%.ll: $(src)/%.c FORCE
|
||||||
# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
|
# (See cmd_cc_o_c + relevant part of rule_cc_o_c)
|
||||||
|
|
||||||
quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
|
quiet_cmd_cc_o_c = CC $(quiet_modtag) $@
|
||||||
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< $(cmd_objtool)
|
||||||
|
|
||||||
ifdef CONFIG_MODVERSIONS
|
ifdef CONFIG_MODVERSIONS
|
||||||
# When module versioning is enabled the following steps are executed:
|
# When module versioning is enabled the following steps are executed:
|
||||||
|
@ -224,27 +224,38 @@ cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)),
|
||||||
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
||||||
|
|
||||||
ifdef CONFIG_STACK_VALIDATION
|
ifdef CONFIG_STACK_VALIDATION
|
||||||
ifndef CONFIG_LTO_CLANG
|
|
||||||
|
|
||||||
__objtool_obj := $(objtree)/tools/objtool/objtool
|
objtool := $(objtree)/tools/objtool/objtool
|
||||||
|
|
||||||
|
objtool_args = \
|
||||||
|
$(if $(CONFIG_UNWINDER_ORC),orc generate,check) \
|
||||||
|
$(if $(part-of-module), --module) \
|
||||||
|
$(if $(CONFIG_FRAME_POINTER),, --no-fp) \
|
||||||
|
$(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\
|
||||||
|
$(if $(CONFIG_RETPOLINE), --retpoline) \
|
||||||
|
$(if $(CONFIG_X86_SMAP), --uaccess) \
|
||||||
|
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)
|
||||||
|
|
||||||
|
cmd_objtool = $(if $(objtool-enabled), ; $(objtool) $(objtool_args) $@)
|
||||||
|
cmd_gen_objtooldep = $(if $(objtool-enabled), { echo ; echo '$@: $$(wildcard $(objtool))' ; } >> $(dot-target).cmd)
|
||||||
|
|
||||||
|
endif # CONFIG_STACK_VALIDATION
|
||||||
|
|
||||||
|
ifdef CONFIG_LTO_CLANG
|
||||||
|
|
||||||
|
# Skip objtool for LLVM bitcode
|
||||||
|
$(obj)/%.o: objtool-enabled :=
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
|
# 'OBJECT_FILES_NON_STANDARD := y': skip objtool checking for a directory
|
||||||
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
|
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'y': skip objtool checking for a file
|
||||||
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
|
# 'OBJECT_FILES_NON_STANDARD_foo.o := 'n': override directory skip for a file
|
||||||
cmd_objtool = $(if $(patsubst y%,, \
|
|
||||||
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
|
||||||
$(__objtool_obj) $(objtool_args) $@)
|
|
||||||
objtool_obj = $(if $(patsubst y%,, \
|
|
||||||
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \
|
|
||||||
$(__objtool_obj))
|
|
||||||
|
|
||||||
endif # CONFIG_LTO_CLANG
|
$(obj)/%.o: objtool-enabled = $(if $(filter-out y%, \
|
||||||
endif # CONFIG_STACK_VALIDATION
|
$(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n),y)
|
||||||
|
|
||||||
# Rebuild all objects when objtool changes, or is enabled/disabled.
|
endif
|
||||||
objtool_dep = $(objtool_obj) \
|
|
||||||
$(wildcard include/config/ORC_UNWINDER \
|
|
||||||
include/config/STACK_VALIDATION)
|
|
||||||
|
|
||||||
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
ifdef CONFIG_TRIM_UNUSED_KSYMS
|
||||||
cmd_gen_ksymdeps = \
|
cmd_gen_ksymdeps = \
|
||||||
|
@ -259,7 +270,7 @@ define rule_cc_o_c
|
||||||
$(call cmd,gen_ksymdeps)
|
$(call cmd,gen_ksymdeps)
|
||||||
$(call cmd,checksrc)
|
$(call cmd,checksrc)
|
||||||
$(call cmd,checkdoc)
|
$(call cmd,checkdoc)
|
||||||
$(call cmd,objtool)
|
$(call cmd,gen_objtooldep)
|
||||||
$(call cmd,modversions_c)
|
$(call cmd,modversions_c)
|
||||||
$(call cmd,record_mcount)
|
$(call cmd,record_mcount)
|
||||||
endef
|
endef
|
||||||
|
@ -267,13 +278,12 @@ endef
|
||||||
define rule_as_o_S
|
define rule_as_o_S
|
||||||
$(call cmd_and_fixdep,as_o_S)
|
$(call cmd_and_fixdep,as_o_S)
|
||||||
$(call cmd,gen_ksymdeps)
|
$(call cmd,gen_ksymdeps)
|
||||||
$(call cmd,objtool)
|
$(call cmd,gen_objtooldep)
|
||||||
$(call cmd,modversions_S)
|
$(call cmd,modversions_S)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Built-in and composite module parts
|
# Built-in and composite module parts
|
||||||
.SECONDEXPANSION:
|
$(obj)/%.o: $(src)/%.c $(recordmcount_source) FORCE
|
||||||
$(obj)/%.o: $(src)/%.c $(recordmcount_source) $$(objtool_dep) FORCE
|
|
||||||
$(call if_changed_rule,cc_o_c)
|
$(call if_changed_rule,cc_o_c)
|
||||||
$(call cmd,force_checksrc)
|
$(call cmd,force_checksrc)
|
||||||
|
|
||||||
|
@ -285,14 +295,13 @@ cmd_cc_lto_link_modules = \
|
||||||
$(LD) $(ld_flags) -r -o $@ \
|
$(LD) $(ld_flags) -r -o $@ \
|
||||||
$(shell [ -s $(@:.lto.o=.o.symversions) ] && \
|
$(shell [ -s $(@:.lto.o=.o.symversions) ] && \
|
||||||
echo -T $(@:.lto.o=.o.symversions)) \
|
echo -T $(@:.lto.o=.o.symversions)) \
|
||||||
--whole-archive $(filter-out FORCE,$^)
|
--whole-archive $(filter-out FORCE,$^) \
|
||||||
|
$(cmd_objtool)
|
||||||
|
|
||||||
ifdef CONFIG_STACK_VALIDATION
|
|
||||||
# objtool was skipped for LLVM bitcode, run it now that we have compiled
|
# objtool was skipped for LLVM bitcode, run it now that we have compiled
|
||||||
# modules into native code
|
# modules into native code
|
||||||
cmd_cc_lto_link_modules += ; \
|
$(obj)/%.lto.o: objtool-enabled = y
|
||||||
$(objtree)/tools/objtool/objtool $(objtool_args) --module $@
|
$(obj)/%.lto.o: part-of-module := y
|
||||||
endif
|
|
||||||
|
|
||||||
$(obj)/%.lto.o: $(obj)/%.o FORCE
|
$(obj)/%.lto.o: $(obj)/%.o FORCE
|
||||||
$(call if_changed,cc_lto_link_modules)
|
$(call if_changed,cc_lto_link_modules)
|
||||||
|
@ -356,7 +365,7 @@ $(obj)/%.s: $(src)/%.S FORCE
|
||||||
$(call if_changed_dep,cpp_s_S)
|
$(call if_changed_dep,cpp_s_S)
|
||||||
|
|
||||||
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
|
quiet_cmd_as_o_S = AS $(quiet_modtag) $@
|
||||||
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $<
|
cmd_as_o_S = $(CC) $(a_flags) -c -o $@ $< $(cmd_objtool)
|
||||||
|
|
||||||
ifdef CONFIG_ASM_MODVERSIONS
|
ifdef CONFIG_ASM_MODVERSIONS
|
||||||
|
|
||||||
|
@ -375,7 +384,7 @@ cmd_modversions_S = \
|
||||||
fi
|
fi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(obj)/%.o: $(src)/%.S $$(objtool_dep) FORCE
|
$(obj)/%.o: $(src)/%.S FORCE
|
||||||
$(call if_changed_rule,as_o_S)
|
$(call if_changed_rule,as_o_S)
|
||||||
|
|
||||||
targets += $(filter-out $(subdir-builtin), $(real-obj-y))
|
targets += $(filter-out $(subdir-builtin), $(real-obj-y))
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
DEBUG_CFLAGS :=
|
||||||
|
|
||||||
|
ifdef CONFIG_DEBUG_INFO_SPLIT
|
||||||
|
DEBUG_CFLAGS += -gsplit-dwarf
|
||||||
|
else
|
||||||
|
DEBUG_CFLAGS += -g
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef CONFIG_AS_IS_LLVM
|
||||||
|
KBUILD_AFLAGS += -Wa,-gdwarf-2
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
|
||||||
|
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4
|
||||||
|
dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5
|
||||||
|
DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||||
|
DEBUG_CFLAGS += -fno-var-tracking
|
||||||
|
ifdef CONFIG_CC_IS_GCC
|
||||||
|
DEBUG_CFLAGS += -femit-struct-debug-baseonly
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_DEBUG_INFO_COMPRESSED
|
||||||
|
DEBUG_CFLAGS += -gz=zlib
|
||||||
|
KBUILD_AFLAGS += -gz=zlib
|
||||||
|
KBUILD_LDFLAGS += --compress-debug-sections=zlib
|
||||||
|
endif
|
||||||
|
|
||||||
|
KBUILD_CFLAGS += $(DEBUG_CFLAGS)
|
||||||
|
export DEBUG_CFLAGS
|
|
@ -232,17 +232,6 @@ ifeq ($(CONFIG_LTO_CLANG),y)
|
||||||
mod-prelink-ext := .lto
|
mod-prelink-ext := .lto
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Objtool arguments are also needed for modfinal with LTO, so we define
|
|
||||||
# then here to avoid duplication.
|
|
||||||
objtool_args = \
|
|
||||||
$(if $(CONFIG_UNWINDER_ORC),orc generate,check) \
|
|
||||||
$(if $(part-of-module), --module) \
|
|
||||||
$(if $(CONFIG_FRAME_POINTER),, --no-fp) \
|
|
||||||
$(if $(CONFIG_GCOV_KERNEL)$(CONFIG_LTO_CLANG), --no-unreachable)\
|
|
||||||
$(if $(CONFIG_RETPOLINE), --retpoline) \
|
|
||||||
$(if $(CONFIG_X86_SMAP), --uaccess) \
|
|
||||||
$(if $(CONFIG_FTRACE_MCOUNT_USE_OBJTOOL), --mcount)
|
|
||||||
|
|
||||||
# Useful for describing the dependency of composite objects
|
# Useful for describing the dependency of composite objects
|
||||||
# Usage:
|
# Usage:
|
||||||
# $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
|
# $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
|
||||||
|
|
|
@ -103,7 +103,7 @@ snap-pkg:
|
||||||
|
|
||||||
# tarball targets
|
# tarball targets
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
tar-pkgs := dir-pkg tar-pkg targz-pkg tarbz2-pkg tarxz-pkg
|
tar-pkgs := dir-pkg tar-pkg targz-pkg tarbz2-pkg tarxz-pkg tarzst-pkg
|
||||||
PHONY += $(tar-pkgs)
|
PHONY += $(tar-pkgs)
|
||||||
$(tar-pkgs):
|
$(tar-pkgs):
|
||||||
$(MAKE) -f $(srctree)/Makefile
|
$(MAKE) -f $(srctree)/Makefile
|
||||||
|
@ -130,10 +130,12 @@ $(if $(findstring tar-src,$@),, \
|
||||||
$(if $(findstring bz2,$@),$(KBZIP2), \
|
$(if $(findstring bz2,$@),$(KBZIP2), \
|
||||||
$(if $(findstring gz,$@),$(KGZIP), \
|
$(if $(findstring gz,$@),$(KGZIP), \
|
||||||
$(if $(findstring xz,$@),$(XZ), \
|
$(if $(findstring xz,$@),$(XZ), \
|
||||||
$(error unknown target $@)))) \
|
$(if $(findstring zst,$@),$(ZSTD), \
|
||||||
|
$(error unknown target $@))))) \
|
||||||
-f -9 $(perf-tar).tar)
|
-f -9 $(perf-tar).tar)
|
||||||
|
|
||||||
perf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg perf-tarxz-src-pkg
|
perf-tar-pkgs := perf-tar-src-pkg perf-targz-src-pkg perf-tarbz2-src-pkg \
|
||||||
|
perf-tarxz-src-pkg perf-tarzst-src-pkg
|
||||||
PHONY += $(perf-tar-pkgs)
|
PHONY += $(perf-tar-pkgs)
|
||||||
$(perf-tar-pkgs):
|
$(perf-tar-pkgs):
|
||||||
$(call cmd,perf_tar)
|
$(call cmd,perf_tar)
|
||||||
|
@ -153,9 +155,11 @@ help:
|
||||||
@echo ' targz-pkg - Build the kernel as a gzip compressed tarball'
|
@echo ' targz-pkg - Build the kernel as a gzip compressed tarball'
|
||||||
@echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'
|
@echo ' tarbz2-pkg - Build the kernel as a bzip2 compressed tarball'
|
||||||
@echo ' tarxz-pkg - Build the kernel as a xz compressed tarball'
|
@echo ' tarxz-pkg - Build the kernel as a xz compressed tarball'
|
||||||
|
@echo ' tarzst-pkg - Build the kernel as a zstd compressed tarball'
|
||||||
@echo ' perf-tar-src-pkg - Build $(perf-tar).tar source tarball'
|
@echo ' perf-tar-src-pkg - Build $(perf-tar).tar source tarball'
|
||||||
@echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball'
|
@echo ' perf-targz-src-pkg - Build $(perf-tar).tar.gz source tarball'
|
||||||
@echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
|
@echo ' perf-tarbz2-src-pkg - Build $(perf-tar).tar.bz2 source tarball'
|
||||||
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
|
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
|
||||||
|
@echo ' perf-tarzst-src-pkg - Build $(perf-tar).tar.zst source tarball'
|
||||||
|
|
||||||
.PHONY: $(PHONY)
|
.PHONY: $(PHONY)
|
||||||
|
|
|
@ -646,19 +646,8 @@ static void check_conf(struct menu *menu)
|
||||||
|
|
||||||
switch (input_mode) {
|
switch (input_mode) {
|
||||||
case listnewconfig:
|
case listnewconfig:
|
||||||
if (sym->name) {
|
if (sym->name)
|
||||||
const char *str;
|
print_symbol_for_listconfig(sym);
|
||||||
|
|
||||||
if (sym->type == S_STRING) {
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
str = sym_escape_string_value(str);
|
|
||||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
|
||||||
free((void *)str);
|
|
||||||
} else {
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
printf("%s%s=%s\n", CONFIG_, sym->name, str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case helpnewconfig:
|
case helpnewconfig:
|
||||||
printf("-----\n");
|
printf("-----\n");
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -129,41 +130,22 @@ static size_t depfile_prefix_len;
|
||||||
/* touch depfile for symbol 'name' */
|
/* touch depfile for symbol 'name' */
|
||||||
static int conf_touch_dep(const char *name)
|
static int conf_touch_dep(const char *name)
|
||||||
{
|
{
|
||||||
int fd, ret;
|
int fd;
|
||||||
char *d;
|
|
||||||
|
|
||||||
/* check overflow: prefix + name + '\0' must fit in buffer. */
|
/* check overflow: prefix + name + '\0' must fit in buffer. */
|
||||||
if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
|
if (depfile_prefix_len + strlen(name) + 1 > sizeof(depfile_path))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
d = depfile_path + depfile_prefix_len;
|
strcpy(depfile_path + depfile_prefix_len, name);
|
||||||
strcpy(d, name);
|
|
||||||
|
|
||||||
/* Assume directory path already exists. */
|
|
||||||
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||||
if (fd == -1) {
|
if (fd == -1)
|
||||||
if (errno != ENOENT)
|
return -1;
|
||||||
return -1;
|
|
||||||
|
|
||||||
ret = make_parent_dir(depfile_path);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/* Try it again. */
|
|
||||||
fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
|
||||||
if (fd == -1)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct conf_printer {
|
|
||||||
void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
|
|
||||||
void (*print_comment)(FILE *, const char *, void *);
|
|
||||||
};
|
|
||||||
|
|
||||||
static void conf_warning(const char *fmt, ...)
|
static void conf_warning(const char *fmt, ...)
|
||||||
__attribute__ ((format (printf, 1, 2)));
|
__attribute__ ((format (printf, 1, 2)));
|
||||||
|
|
||||||
|
@ -227,6 +209,13 @@ static const char *conf_get_autoconfig_name(void)
|
||||||
return name ? name : "include/config/auto.conf";
|
return name ? name : "include/config/auto.conf";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *conf_get_autoheader_name(void)
|
||||||
|
{
|
||||||
|
char *name = getenv("KCONFIG_AUTOHEADER");
|
||||||
|
|
||||||
|
return name ? name : "include/generated/autoconf.h";
|
||||||
|
}
|
||||||
|
|
||||||
static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
|
||||||
{
|
{
|
||||||
char *p2;
|
char *p2;
|
||||||
|
@ -594,169 +583,171 @@ int conf_read(const char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct comment_style {
|
||||||
|
const char *decoration;
|
||||||
|
const char *prefix;
|
||||||
|
const char *postfix;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct comment_style comment_style_pound = {
|
||||||
|
.decoration = "#",
|
||||||
|
.prefix = "#",
|
||||||
|
.postfix = "#",
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct comment_style comment_style_c = {
|
||||||
|
.decoration = " *",
|
||||||
|
.prefix = "/*",
|
||||||
|
.postfix = " */",
|
||||||
|
};
|
||||||
|
|
||||||
|
static void conf_write_heading(FILE *fp, const struct comment_style *cs)
|
||||||
|
{
|
||||||
|
fprintf(fp, "%s\n", cs->prefix);
|
||||||
|
|
||||||
|
fprintf(fp, "%s Automatically generated file; DO NOT EDIT.\n",
|
||||||
|
cs->decoration);
|
||||||
|
|
||||||
|
fprintf(fp, "%s %s\n", cs->decoration, rootmenu.prompt->text);
|
||||||
|
|
||||||
|
fprintf(fp, "%s\n", cs->postfix);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The returned pointer must be freed on the caller side */
|
||||||
|
static char *escape_string_value(const char *in)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
char *out;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
len = strlen(in) + strlen("\"\"") + 1;
|
||||||
|
|
||||||
|
p = in;
|
||||||
|
while (1) {
|
||||||
|
p += strcspn(p, "\"\\");
|
||||||
|
|
||||||
|
if (p[0] == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
len++;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
out = xmalloc(len);
|
||||||
|
out[0] = '\0';
|
||||||
|
|
||||||
|
strcat(out, "\"");
|
||||||
|
|
||||||
|
p = in;
|
||||||
|
while (1) {
|
||||||
|
len = strcspn(p, "\"\\");
|
||||||
|
strncat(out, p, len);
|
||||||
|
p += len;
|
||||||
|
|
||||||
|
if (p[0] == '\0')
|
||||||
|
break;
|
||||||
|
|
||||||
|
strcat(out, "\\");
|
||||||
|
strncat(out, p++, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(out, "\"");
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Kconfig configuration printer
|
* Kconfig configuration printer
|
||||||
*
|
*
|
||||||
* This printer is used when generating the resulting configuration after
|
* This printer is used when generating the resulting configuration after
|
||||||
* kconfig invocation and `defconfig' files. Unset symbol might be omitted by
|
* kconfig invocation and `defconfig' files. Unset symbol might be omitted by
|
||||||
* passing a non-NULL argument to the printer.
|
* passing a non-NULL argument to the printer.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
static void
|
enum output_n { OUTPUT_N, OUTPUT_N_AS_UNSET, OUTPUT_N_NONE };
|
||||||
kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
|
||||||
|
static void __print_symbol(FILE *fp, struct symbol *sym, enum output_n output_n,
|
||||||
|
bool escape_string)
|
||||||
{
|
{
|
||||||
|
const char *val;
|
||||||
|
char *escaped = NULL;
|
||||||
|
|
||||||
|
if (sym->type == S_UNKNOWN)
|
||||||
|
return;
|
||||||
|
|
||||||
|
val = sym_get_string_value(sym);
|
||||||
|
|
||||||
|
if ((sym->type == S_BOOLEAN || sym->type == S_TRISTATE) &&
|
||||||
|
output_n != OUTPUT_N && *val == 'n') {
|
||||||
|
if (output_n == OUTPUT_N_AS_UNSET)
|
||||||
|
fprintf(fp, "# %s%s is not set\n", CONFIG_, sym->name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sym->type == S_STRING && escape_string) {
|
||||||
|
escaped = escape_string_value(val);
|
||||||
|
val = escaped;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, val);
|
||||||
|
|
||||||
|
free(escaped);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_symbol_for_dotconfig(FILE *fp, struct symbol *sym)
|
||||||
|
{
|
||||||
|
__print_symbol(fp, sym, OUTPUT_N_AS_UNSET, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_symbol_for_autoconf(FILE *fp, struct symbol *sym)
|
||||||
|
{
|
||||||
|
__print_symbol(fp, sym, OUTPUT_N_NONE, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_symbol_for_listconfig(struct symbol *sym)
|
||||||
|
{
|
||||||
|
__print_symbol(stdout, sym, OUTPUT_N, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_symbol_for_c(FILE *fp, struct symbol *sym)
|
||||||
|
{
|
||||||
|
const char *val;
|
||||||
|
const char *sym_suffix = "";
|
||||||
|
const char *val_prefix = "";
|
||||||
|
char *escaped = NULL;
|
||||||
|
|
||||||
|
if (sym->type == S_UNKNOWN)
|
||||||
|
return;
|
||||||
|
|
||||||
|
val = sym_get_string_value(sym);
|
||||||
|
|
||||||
switch (sym->type) {
|
switch (sym->type) {
|
||||||
case S_BOOLEAN:
|
case S_BOOLEAN:
|
||||||
case S_TRISTATE:
|
case S_TRISTATE:
|
||||||
if (*value == 'n') {
|
switch (*val) {
|
||||||
bool skip_unset = (arg != NULL);
|
|
||||||
|
|
||||||
if (!skip_unset)
|
|
||||||
fprintf(fp, "# %s%s is not set\n",
|
|
||||||
CONFIG_, sym->name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
kconfig_print_comment(FILE *fp, const char *value, void *arg)
|
|
||||||
{
|
|
||||||
const char *p = value;
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
l = strcspn(p, "\n");
|
|
||||||
fprintf(fp, "#");
|
|
||||||
if (l) {
|
|
||||||
fprintf(fp, " ");
|
|
||||||
xfwrite(p, l, 1, fp);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
fprintf(fp, "\n");
|
|
||||||
if (*p++ == '\0')
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct conf_printer kconfig_printer_cb =
|
|
||||||
{
|
|
||||||
.print_symbol = kconfig_print_symbol,
|
|
||||||
.print_comment = kconfig_print_comment,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Header printer
|
|
||||||
*
|
|
||||||
* This printer is used when generating the `include/generated/autoconf.h' file.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (sym->type) {
|
|
||||||
case S_BOOLEAN:
|
|
||||||
case S_TRISTATE: {
|
|
||||||
const char *suffix = "";
|
|
||||||
|
|
||||||
switch (*value) {
|
|
||||||
case 'n':
|
case 'n':
|
||||||
break;
|
return;
|
||||||
case 'm':
|
case 'm':
|
||||||
suffix = "_MODULE";
|
sym_suffix = "_MODULE";
|
||||||
/* fall through */
|
/* fall through */
|
||||||
default:
|
default:
|
||||||
fprintf(fp, "#define %s%s%s 1\n",
|
val = "1";
|
||||||
CONFIG_, sym->name, suffix);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
case S_HEX:
|
||||||
case S_HEX: {
|
if (val[0] != '0' || (val[1] != 'x' && val[1] != 'X'))
|
||||||
const char *prefix = "";
|
val_prefix = "0x";
|
||||||
|
|
||||||
if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
|
|
||||||
prefix = "0x";
|
|
||||||
fprintf(fp, "#define %s%s %s%s\n",
|
|
||||||
CONFIG_, sym->name, prefix, value);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case S_STRING:
|
case S_STRING:
|
||||||
case S_INT:
|
escaped = escape_string_value(val);
|
||||||
fprintf(fp, "#define %s%s %s\n",
|
val = escaped;
|
||||||
CONFIG_, sym->name, value);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
fprintf(fp, "#define %s%s%s %s%s\n", CONFIG_, sym->name, sym_suffix,
|
||||||
|
val_prefix, val);
|
||||||
|
|
||||||
static void
|
free(escaped);
|
||||||
header_print_comment(FILE *fp, const char *value, void *arg)
|
|
||||||
{
|
|
||||||
const char *p = value;
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
fprintf(fp, "/*\n");
|
|
||||||
for (;;) {
|
|
||||||
l = strcspn(p, "\n");
|
|
||||||
fprintf(fp, " *");
|
|
||||||
if (l) {
|
|
||||||
fprintf(fp, " ");
|
|
||||||
xfwrite(p, l, 1, fp);
|
|
||||||
p += l;
|
|
||||||
}
|
|
||||||
fprintf(fp, "\n");
|
|
||||||
if (*p++ == '\0')
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fprintf(fp, " */\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct conf_printer header_printer_cb =
|
|
||||||
{
|
|
||||||
.print_symbol = header_print_symbol,
|
|
||||||
.print_comment = header_print_comment,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void conf_write_symbol(FILE *fp, struct symbol *sym,
|
|
||||||
struct conf_printer *printer, void *printer_arg)
|
|
||||||
{
|
|
||||||
const char *str;
|
|
||||||
|
|
||||||
switch (sym->type) {
|
|
||||||
case S_UNKNOWN:
|
|
||||||
break;
|
|
||||||
case S_STRING:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
str = sym_escape_string_value(str);
|
|
||||||
printer->print_symbol(fp, sym, str, printer_arg);
|
|
||||||
free((void *)str);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
str = sym_get_string_value(sym);
|
|
||||||
printer->print_symbol(fp, sym, str, printer_arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf),
|
|
||||||
"\n"
|
|
||||||
"Automatically generated file; DO NOT EDIT.\n"
|
|
||||||
"%s\n",
|
|
||||||
rootmenu.prompt->text);
|
|
||||||
|
|
||||||
printer->print_comment(fp, buf, printer_arg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -815,7 +806,7 @@ int conf_write_defconfig(const char *filename)
|
||||||
goto next_menu;
|
goto next_menu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
print_symbol_for_dotconfig(out, sym);
|
||||||
}
|
}
|
||||||
next_menu:
|
next_menu:
|
||||||
if (menu->list != NULL) {
|
if (menu->list != NULL) {
|
||||||
|
@ -875,7 +866,7 @@ int conf_write(const char *name)
|
||||||
if (!out)
|
if (!out)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
conf_write_heading(out, &comment_style_pound);
|
||||||
|
|
||||||
if (!conf_get_changed())
|
if (!conf_get_changed())
|
||||||
sym_clear_all_valid();
|
sym_clear_all_valid();
|
||||||
|
@ -902,7 +893,7 @@ int conf_write(const char *name)
|
||||||
need_newline = false;
|
need_newline = false;
|
||||||
}
|
}
|
||||||
sym->flags |= SYMBOL_WRITTEN;
|
sym->flags |= SYMBOL_WRITTEN;
|
||||||
conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
|
print_symbol_for_dotconfig(out, sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
next:
|
next:
|
||||||
|
@ -952,32 +943,50 @@ next:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write a dependency file as used by kbuild to track dependencies */
|
/* write a dependency file as used by kbuild to track dependencies */
|
||||||
static int conf_write_dep(const char *name)
|
static int conf_write_autoconf_cmd(const char *autoconf_name)
|
||||||
{
|
{
|
||||||
|
char name[PATH_MAX], tmp[PATH_MAX];
|
||||||
struct file *file;
|
struct file *file;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
|
int ret;
|
||||||
|
|
||||||
out = fopen("..config.tmp", "w");
|
ret = snprintf(name, sizeof(name), "%s.cmd", autoconf_name);
|
||||||
if (!out)
|
if (ret >= sizeof(name)) /* check truncation */
|
||||||
return 1;
|
return -1;
|
||||||
fprintf(out, "deps_config := \\\n");
|
|
||||||
for (file = file_list; file; file = file->next) {
|
|
||||||
if (file->next)
|
|
||||||
fprintf(out, "\t%s \\\n", file->name);
|
|
||||||
else
|
|
||||||
fprintf(out, "\t%s\n", file->name);
|
|
||||||
}
|
|
||||||
fprintf(out, "\n%s: \\\n"
|
|
||||||
"\t$(deps_config)\n\n", conf_get_autoconfig_name());
|
|
||||||
|
|
||||||
env_write_dep(out, conf_get_autoconfig_name());
|
|
||||||
|
|
||||||
fprintf(out, "\n$(deps_config): ;\n");
|
|
||||||
fclose(out);
|
|
||||||
|
|
||||||
if (make_parent_dir(name))
|
if (make_parent_dir(name))
|
||||||
return 1;
|
return -1;
|
||||||
rename("..config.tmp", name);
|
|
||||||
|
ret = snprintf(tmp, sizeof(tmp), "%s.cmd.tmp", autoconf_name);
|
||||||
|
if (ret >= sizeof(tmp)) /* check truncation */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
out = fopen(tmp, "w");
|
||||||
|
if (!out) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(out, "deps_config := \\\n");
|
||||||
|
for (file = file_list; file; file = file->next)
|
||||||
|
fprintf(out, "\t%s \\\n", file->name);
|
||||||
|
|
||||||
|
fprintf(out, "\n%s: $(deps_config)\n\n", autoconf_name);
|
||||||
|
|
||||||
|
env_write_dep(out, autoconf_name);
|
||||||
|
|
||||||
|
fprintf(out, "\n$(deps_config): ;\n");
|
||||||
|
|
||||||
|
if (ferror(out)) /* error check for all fprintf() calls */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
fclose(out);
|
||||||
|
|
||||||
|
if (rename(tmp, name)) {
|
||||||
|
perror("rename");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1053,63 +1062,83 @@ static int conf_touch_deps(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __conf_write_autoconf(const char *filename,
|
||||||
|
void (*print_symbol)(FILE *, struct symbol *),
|
||||||
|
const struct comment_style *comment_style)
|
||||||
|
{
|
||||||
|
char tmp[PATH_MAX];
|
||||||
|
FILE *file;
|
||||||
|
struct symbol *sym;
|
||||||
|
int ret, i;
|
||||||
|
|
||||||
|
if (make_parent_dir(filename))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
ret = snprintf(tmp, sizeof(tmp), "%s.tmp", filename);
|
||||||
|
if (ret >= sizeof(tmp)) /* check truncation */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
file = fopen(tmp, "w");
|
||||||
|
if (!file) {
|
||||||
|
perror("fopen");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
conf_write_heading(file, comment_style);
|
||||||
|
|
||||||
|
for_all_symbols(i, sym)
|
||||||
|
if ((sym->flags & SYMBOL_WRITE) && sym->name)
|
||||||
|
print_symbol(file, sym);
|
||||||
|
|
||||||
|
/* check possible errors in conf_write_heading() and print_symbol() */
|
||||||
|
if (ferror(file))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
if (rename(tmp, filename)) {
|
||||||
|
perror("rename");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int conf_write_autoconf(int overwrite)
|
int conf_write_autoconf(int overwrite)
|
||||||
{
|
{
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
const char *name;
|
|
||||||
const char *autoconf_name = conf_get_autoconfig_name();
|
const char *autoconf_name = conf_get_autoconfig_name();
|
||||||
FILE *out, *out_h;
|
int ret, i;
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!overwrite && is_present(autoconf_name))
|
if (!overwrite && is_present(autoconf_name))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
conf_write_dep("include/config/auto.conf.cmd");
|
ret = conf_write_autoconf_cmd(autoconf_name);
|
||||||
|
if (ret)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (conf_touch_deps())
|
if (conf_touch_deps())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
out = fopen(".tmpconfig", "w");
|
for_all_symbols(i, sym)
|
||||||
if (!out)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
out_h = fopen(".tmpconfig.h", "w");
|
|
||||||
if (!out_h) {
|
|
||||||
fclose(out);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
conf_write_heading(out, &kconfig_printer_cb, NULL);
|
|
||||||
conf_write_heading(out_h, &header_printer_cb, NULL);
|
|
||||||
|
|
||||||
for_all_symbols(i, sym) {
|
|
||||||
sym_calc_value(sym);
|
sym_calc_value(sym);
|
||||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* write symbols to auto.conf and autoconf.h */
|
ret = __conf_write_autoconf(conf_get_autoheader_name(),
|
||||||
conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
|
print_symbol_for_c,
|
||||||
conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
|
&comment_style_c);
|
||||||
}
|
if (ret)
|
||||||
fclose(out);
|
return ret;
|
||||||
fclose(out_h);
|
|
||||||
|
|
||||||
name = getenv("KCONFIG_AUTOHEADER");
|
|
||||||
if (!name)
|
|
||||||
name = "include/generated/autoconf.h";
|
|
||||||
if (make_parent_dir(name))
|
|
||||||
return 1;
|
|
||||||
if (rename(".tmpconfig.h", name))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (make_parent_dir(autoconf_name))
|
|
||||||
return 1;
|
|
||||||
/*
|
/*
|
||||||
* This must be the last step, kbuild has a dependency on auto.conf
|
* Create include/config/auto.conf. This must be the last step because
|
||||||
* and this marks the successful completion of the previous steps.
|
* Kbuild has a dependency on auto.conf and this marks the successful
|
||||||
|
* completion of the previous steps.
|
||||||
*/
|
*/
|
||||||
if (rename(".tmpconfig", autoconf_name))
|
ret = __conf_write_autoconf(conf_get_autoconfig_name(),
|
||||||
return 1;
|
print_symbol_for_autoconf,
|
||||||
|
&comment_style_pound);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,8 +84,7 @@ static void warn_ignored_character(char chr)
|
||||||
n [A-Za-z0-9_-]
|
n [A-Za-z0-9_-]
|
||||||
|
|
||||||
%%
|
%%
|
||||||
int str = 0;
|
char open_quote = 0;
|
||||||
int ts, i;
|
|
||||||
|
|
||||||
#.* /* ignore comment */
|
#.* /* ignore comment */
|
||||||
[ \t]* /* whitespaces */
|
[ \t]* /* whitespaces */
|
||||||
|
@ -134,7 +133,7 @@ n [A-Za-z0-9_-]
|
||||||
":=" return T_COLON_EQUAL;
|
":=" return T_COLON_EQUAL;
|
||||||
"+=" return T_PLUS_EQUAL;
|
"+=" return T_PLUS_EQUAL;
|
||||||
\"|\' {
|
\"|\' {
|
||||||
str = yytext[0];
|
open_quote = yytext[0];
|
||||||
new_string();
|
new_string();
|
||||||
BEGIN(STRING);
|
BEGIN(STRING);
|
||||||
}
|
}
|
||||||
|
@ -171,7 +170,7 @@ n [A-Za-z0-9_-]
|
||||||
append_string(yytext + 1, yyleng - 1);
|
append_string(yytext + 1, yyleng - 1);
|
||||||
}
|
}
|
||||||
\'|\" {
|
\'|\" {
|
||||||
if (str == yytext[0]) {
|
if (open_quote == yytext[0]) {
|
||||||
BEGIN(INITIAL);
|
BEGIN(INITIAL);
|
||||||
yylval.string = text;
|
yylval.string = text;
|
||||||
return T_WORD_QUOTE;
|
return T_WORD_QUOTE;
|
||||||
|
@ -196,6 +195,8 @@ n [A-Za-z0-9_-]
|
||||||
|
|
||||||
<HELP>{
|
<HELP>{
|
||||||
[ \t]+ {
|
[ \t]+ {
|
||||||
|
int ts, i;
|
||||||
|
|
||||||
ts = 0;
|
ts = 0;
|
||||||
for (i = 0; i < yyleng; i++) {
|
for (i = 0; i < yyleng; i++) {
|
||||||
if (yytext[i] == '\t')
|
if (yytext[i] == '\t')
|
||||||
|
|
|
@ -18,7 +18,7 @@ extern struct symbol * symbol_hash[SYMBOL_HASHSIZE];
|
||||||
|
|
||||||
struct symbol * sym_lookup(const char *name, int flags);
|
struct symbol * sym_lookup(const char *name, int flags);
|
||||||
struct symbol * sym_find(const char *name);
|
struct symbol * sym_find(const char *name);
|
||||||
const char * sym_escape_string_value(const char *in);
|
void print_symbol_for_listconfig(struct symbol *sym);
|
||||||
struct symbol ** sym_re_search(const char *pattern);
|
struct symbol ** sym_re_search(const char *pattern);
|
||||||
const char * sym_type_name(enum symbol_type type);
|
const char * sym_type_name(enum symbol_type type);
|
||||||
void sym_calc_value(struct symbol *sym);
|
void sym_calc_value(struct symbol *sym);
|
||||||
|
|
|
@ -728,7 +728,7 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||||
get_dep_str(r, prop->visible.expr, " Visible if: ");
|
get_dep_str(r, prop->visible.expr, " Visible if: ");
|
||||||
|
|
||||||
menu = prop->menu->parent;
|
menu = prop->menu->parent;
|
||||||
for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
|
for (i = 0; menu && i < 8; menu = menu->parent) {
|
||||||
bool accessible = menu_is_visible(menu);
|
bool accessible = menu_is_visible(menu);
|
||||||
|
|
||||||
submenu[i++] = menu;
|
submenu[i++] = menu;
|
||||||
|
@ -758,21 +758,24 @@ static void get_prompt_str(struct gstr *r, struct property *prop,
|
||||||
list_add_tail(&jump->entries, head);
|
list_add_tail(&jump->entries, head);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > 0) {
|
str_printf(r, " Location:\n");
|
||||||
str_printf(r, " Location:\n");
|
for (j = 4; --i >= 0; j += 2) {
|
||||||
for (j = 4; --i >= 0; j += 2) {
|
menu = submenu[i];
|
||||||
menu = submenu[i];
|
if (jump && menu == location)
|
||||||
if (jump && menu == location)
|
jump->offset = strlen(r->s);
|
||||||
jump->offset = strlen(r->s);
|
|
||||||
str_printf(r, "%*c-> %s", j, ' ',
|
if (menu == &rootmenu)
|
||||||
menu_get_prompt(menu));
|
/* The real rootmenu prompt is ugly */
|
||||||
if (menu->sym) {
|
str_printf(r, "%*cMain menu", j, ' ');
|
||||||
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
else
|
||||||
menu->sym->name : "<choice>",
|
str_printf(r, "%*c-> %s", j, ' ', menu_get_prompt(menu));
|
||||||
sym_get_string_value(menu->sym));
|
|
||||||
}
|
if (menu->sym) {
|
||||||
str_append(r, "\n");
|
str_printf(r, " (%s [=%s])", menu->sym->name ?
|
||||||
|
menu->sym->name : "<choice>",
|
||||||
|
sym_get_string_value(menu->sym));
|
||||||
}
|
}
|
||||||
|
str_append(r, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -871,49 +871,6 @@ struct symbol *sym_find(const char *name)
|
||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *sym_escape_string_value(const char *in)
|
|
||||||
{
|
|
||||||
const char *p;
|
|
||||||
size_t reslen;
|
|
||||||
char *res;
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
reslen = strlen(in) + strlen("\"\"") + 1;
|
|
||||||
|
|
||||||
p = in;
|
|
||||||
for (;;) {
|
|
||||||
l = strcspn(p, "\"\\");
|
|
||||||
p += l;
|
|
||||||
|
|
||||||
if (p[0] == '\0')
|
|
||||||
break;
|
|
||||||
|
|
||||||
reslen++;
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = xmalloc(reslen);
|
|
||||||
res[0] = '\0';
|
|
||||||
|
|
||||||
strcat(res, "\"");
|
|
||||||
|
|
||||||
p = in;
|
|
||||||
for (;;) {
|
|
||||||
l = strcspn(p, "\"\\");
|
|
||||||
strncat(res, p, l);
|
|
||||||
p += l;
|
|
||||||
|
|
||||||
if (p[0] == '\0')
|
|
||||||
break;
|
|
||||||
|
|
||||||
strcat(res, "\\");
|
|
||||||
strncat(res, p++, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(res, "\"");
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct sym_match {
|
struct sym_match {
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
off_t so, eo;
|
off_t so, eo;
|
||||||
|
|
|
@ -360,14 +360,14 @@ if [ -n "${CONFIG_KALLSYMS}" ]; then
|
||||||
# kallsyms support
|
# kallsyms support
|
||||||
# Generate section listing all symbols and add it into vmlinux
|
# Generate section listing all symbols and add it into vmlinux
|
||||||
# It's a three step process:
|
# It's a three step process:
|
||||||
# 1) Link .tmp_vmlinux1 so it has all symbols and sections,
|
# 1) Link .tmp_vmlinux.kallsyms1 so it has all symbols and sections,
|
||||||
# but __kallsyms is empty.
|
# but __kallsyms is empty.
|
||||||
# Running kallsyms on that gives us .tmp_kallsyms1.o with
|
# Running kallsyms on that gives us .tmp_kallsyms1.o with
|
||||||
# the right size
|
# the right size
|
||||||
# 2) Link .tmp_vmlinux2 so it now has a __kallsyms section of
|
# 2) Link .tmp_vmlinux.kallsyms2 so it now has a __kallsyms section of
|
||||||
# the right size, but due to the added section, some
|
# the right size, but due to the added section, some
|
||||||
# addresses have shifted.
|
# addresses have shifted.
|
||||||
# From here, we generate a correct .tmp_kallsyms2.o
|
# From here, we generate a correct .tmp_vmlinux.kallsyms2.o
|
||||||
# 3) That link may have expanded the kernel image enough that
|
# 3) That link may have expanded the kernel image enough that
|
||||||
# more linker branch stubs / trampolines had to be added, which
|
# more linker branch stubs / trampolines had to be added, which
|
||||||
# introduces new names, which further expands kallsyms. Do another
|
# introduces new names, which further expands kallsyms. Do another
|
||||||
|
|
|
@ -39,6 +39,10 @@ case "${1}" in
|
||||||
opts="-I ${XZ}"
|
opts="-I ${XZ}"
|
||||||
tarball=${tarball}.xz
|
tarball=${tarball}.xz
|
||||||
;;
|
;;
|
||||||
|
tarzst-pkg)
|
||||||
|
opts="-I ${ZSTD}"
|
||||||
|
tarball=${tarball}.zst
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2
|
echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
@ -188,7 +188,7 @@ struct generic_type {
|
||||||
mode_t mode;
|
mode_t mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct generic_type generic_type_table[] = {
|
static const struct generic_type generic_type_table[] = {
|
||||||
[GT_DIR] = {
|
[GT_DIR] = {
|
||||||
.type = "dir",
|
.type = "dir",
|
||||||
.mode = S_IFDIR
|
.mode = S_IFDIR
|
||||||
|
@ -320,6 +320,12 @@ static int cpio_mkfile(const char *name, const char *location,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (buf.st_mtime > 0xffffffff) {
|
||||||
|
fprintf(stderr, "%s: Timestamp exceeds maximum cpio timestamp, clipping.\n",
|
||||||
|
location);
|
||||||
|
buf.st_mtime = 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
filebuf = malloc(buf.st_size);
|
filebuf = malloc(buf.st_size);
|
||||||
if (!filebuf) {
|
if (!filebuf) {
|
||||||
fprintf (stderr, "out of memory\n");
|
fprintf (stderr, "out of memory\n");
|
||||||
|
@ -491,7 +497,7 @@ static void usage(const char *prog)
|
||||||
prog);
|
prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct file_handler file_handler_table[] = {
|
static const struct file_handler file_handler_table[] = {
|
||||||
{
|
{
|
||||||
.type = "file",
|
.type = "file",
|
||||||
.handler = cpio_mkfile_line,
|
.handler = cpio_mkfile_line,
|
||||||
|
@ -551,6 +557,16 @@ int main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Timestamps after 2106-02-07 06:28:15 UTC have an ascii hex time_t
|
||||||
|
* representation that exceeds 8 chars and breaks the cpio header
|
||||||
|
* specification.
|
||||||
|
*/
|
||||||
|
if (default_mtime > 0xffffffff) {
|
||||||
|
fprintf(stderr, "ERROR: Timestamp too large for cpio format\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
if (argc - optind != 1) {
|
if (argc - optind != 1) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче