On Fri, Dec 25, 2020 at 11:35:28PM -0800, h...@zytor.com wrote: > On December 25, 2020 11:29:30 PM PST, John Millikin <jmilli...@gmail.com> > wrote: > >When compiling with Clang, the `$(CLANG_FLAGS)' variable contains > >additional flags needed to cross-compile C and Assembly sources:
I am not sure how or if others agree but it took me a second to realize the purpose of this change was cross compiling even though I read the commit message so I think it should be called out a bit more. I would argue that it is not very common to see x86 cross compiled (I know Stephen Rothwell does) :) x86 is one of the most tested architectures for building with clang and we have see no recent failures in the boot or realmode code. > >* `-no-integrated-as' tells clang to assemble with GNU Assembler > > instead of its built-in LLVM assembler. This flag is set by default > > unless `LLVM_IAS=1' is set, because the LLVM assembler can't yet > > parse certain GNU extensions. > > > >* `--target' sets the target architecture when cross-compiling. This > > flag must be set for both compilation and assembly (`KBUILD_AFLAGS') > > to support architecture-specific assembler directives. > > > >Signed-off-by: John Millikin <j...@john-millikin.com> > >--- > > arch/x86/Makefile | 5 +++++ > > 1 file changed, 5 insertions(+) > > > >diff --git a/arch/x86/Makefile b/arch/x86/Makefile > >index 7116da3980be..725c65532482 100644 > >--- a/arch/x86/Makefile > >+++ b/arch/x86/Makefile > >@@ -33,6 +33,11 @@ REALMODE_CFLAGS += -ffreestanding > > REALMODE_CFLAGS += -fno-stack-protector > > REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), > >-Wno-address-of-packed-member) > > REALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), > >$(cc_stack_align4)) > >+ > >+ifdef CONFIG_CC_IS_CLANG > >+REALMODE_CFLAGS += $(CLANG_FLAGS) > >+endif > >+ > > export REALMODE_CFLAGS > > > > # BITS is used as extension for files which are available in a 32 bit > > Why is CLANG_FLAGS non-null when unused? It would be better to centralize > that. It isn't. $ rg "CLANG_FLAGS :=" Makefile 507:CLANG_FLAGS := $ rg "CLANG_FLAGS\t" Makefile 564:CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) 566:CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE)) 570:CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN) 573:CLANG_FLAGS += -no-integrated-as 575:CLANG_FLAGS += -Werror=unknown-warning-option The ifdef can be dropped and unconditonally add CLANG_FLAGS to REALMODE_CFLAGS, as is done in a few arch directories: $ rg "\(CLANG_FLAGS\)" arch | cat arch/s390/purgatory/Makefile:KBUILD_CFLAGS += $(CLANG_FLAGS) arch/s390/Makefile:KBUILD_AFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -D__ASSEMBLY__ arch/s390/Makefile:KBUILD_CFLAGS_DECOMPRESSOR := $(CLANG_FLAGS) -m64 -O2 arch/powerpc/boot/Makefile:BOOTCFLAGS += $(CLANG_FLAGS) arch/powerpc/boot/Makefile:BOOTAFLAGS += $(CLANG_FLAGS) Cheers, Nathan