clang: Update documentation

As of clang-5.0, things have changed a bit.  First, we cannot
automatically guess -target values as if we do not pass one with CC then
cc-option will fail.  Second, to disable movt/movw relocations the
argument has become -mno-movt.

Related to the target part, we cannot use arm-none-eabi as that ends up
being too generic of an ARM target for things like say rpi_3_32b to
work.

Signed-off-by: Tom Rini <trini@konsulko.com>
lime2-spi
Tom Rini 6 years ago
parent 4760fe26c7
commit 3b6407b8ed
  1. 5
      arch/arm/config.mk
  2. 18
      doc/README.clang

@ -23,9 +23,8 @@ PLATFORM_RELFLAGS += $(call cc-option, -msoft-float) \
$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
# LLVM support # LLVM support
LLVMS_RELFLAGS := $(call cc-option,-mllvm,) \ LLVM_RELFLAGS := $(call cc-option,-mllvm,) \
$(call cc-option,-target arm-none-eabi,) \ $(call cc-option,-mno-movt,)
$(call cc-option,-arm-use-movt=0,)
PLATFORM_RELFLAGS += $(LLVM_RELFLAGS) PLATFORM_RELFLAGS += $(LLVM_RELFLAGS)
PLATFORM_CPPFLAGS += -D__ARM__ PLATFORM_CPPFLAGS += -D__ARM__

@ -10,16 +10,11 @@ used to get its value. This does lead to larger code then strictly
necessary, but at least works. necessary, but at least works.
NOTE: target compilation only work for _some_ ARM boards at the moment. NOTE: target compilation only work for _some_ ARM boards at the moment.
Also Aarch64 is not supported: Most notably boards which aren't using Also AArch64 is not supported currently due to a lack of private libgcc
the generic board will fail to compile, but since those are expected support. Boards which reassign gd in c will also fail to compile, but there is
to be converted this will solve itself. Boards which reassign gd in c in no strict reason to do so in the ARM world, since crt0.S takes care of this.
will also fail to compile, but there is in no strict reason to do so These assignments can be avoided by changing the init calls but this is not in
in the ARM world, since crt0.S takes care of this. These assignments mainline yet.
can be avoided by changing the init calls but this is not in mainline yet.
NOTE: without the -mllvm -arm-use-movt=0 flags U-Boot will compile
fine, but llvm might hardcode addresses in movw / movt pairs, which
cannot be relocated and U-Boot will fail at runtime.
Debian (based) Debian (based)
-------------- --------------
@ -29,7 +24,8 @@ sudo apt-get install clang
Note that we still use binutils for some tools so we must continue to set Note that we still use binutils for some tools so we must continue to set
CROSS_COMPILE. To compile U-Boot with clang on linux without IAS use e.g.: CROSS_COMPILE. To compile U-Boot with clang on linux without IAS use e.g.:
make HOSTCC=clang rpi_2_defconfig make HOSTCC=clang rpi_2_defconfig
make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- CC=clang -j8 make HOSTCC=clang CROSS_COMPILE=arm-linux-gnueabi- \
CC="clang -target arm-linux-gnueabi" -j8
It can also be used to compile sandbox: It can also be used to compile sandbox:
make HOSTCC=clang sandbox_defconfig make HOSTCC=clang sandbox_defconfig

Loading…
Cancel
Save