+LTO_CFLAGS :=
+LTO_FINAL_LDFLAGS :=
+export LTO_CFLAGS LTO_FINAL_LDFLAGS
+ifdef CONFIG_LTO
+ ifeq ($(cc-name),clang)
+ LTO_CFLAGS += -flto
+ LTO_FINAL_LDFLAGS += -flto
+
+ AR = $(shell $(CC) -print-prog-name=llvm-ar)
+ NM = $(shell $(CC) -print-prog-name=llvm-nm)
+ else
+ NPROC := $(shell nproc 2>/dev/null || echo 1)
+ LTO_CFLAGS += -flto=$(NPROC)
+ LTO_FINAL_LDFLAGS += -fuse-linker-plugin -flto=$(NPROC)
+
+ # use plugin aware tools
+ AR = $(CROSS_COMPILE)gcc-ar
+ NM = $(CROSS_COMPILE)gcc-nm
+ endif
+
+ CFLAGS_NON_EFI += $(LTO_CFLAGS)
+
+ KBUILD_CFLAGS += $(LTO_CFLAGS)
+endif
+
+ifeq ($(CONFIG_STACKPROTECTOR),y)
+KBUILD_CFLAGS += $(call cc-option,-fstack-protector-strong)
+CFLAGS_EFI += $(call cc-option,-fno-stack-protector)
+else