All of lore.kernel.org
 help / color / mirror / Atom feed
From: Romain Naour <romain.naour@smile.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 00/11] Add the support for Clang cross-compiler
Date: Fri,  6 Sep 2019 11:09:36 +0200	[thread overview]
Message-ID: <20190906090947.5476-1-romain.naour@smile.fr> (raw)

Last year Valentin Korenblit added during his internship at Smile,
llvm/clang packages to provide llvm/clang libraries for the target.
See the article from Valentin on Linuxembedded blog [1].

But Clang could not be used as a cross-compiler by Buildroot since
it was necessary to build the Linux kernel with GCC [2].

Recently, I've tried to build an aarch64 Linux kernel (5.2.7) with
Clang and it worked under Qemu [3]. I also tested for x86_64 but we need
the upcomming llvm/clang version 9 to build the kernel [4].
This new version add the support of "asm-goto" which was the last
missing part to be able to build the Linux kernel on x86_64 [5].
But for theses tests, only the kernel was built with Clang.

While testing the x86_64 kernel and it's rootfs built with Clang under Qemu,
I had a runtime issue during the userspace boot process (Busybox's init).
While searching about the issue, I discover the lowRISC blog from Lu??s Marques
about the same issue and tested the patch he contributed to the Busybox project
(Thanks!).

So, this series is about to complete the integration of Clang as cross-compiler
by using a toolchain-wrapper and fixing some build system infrastructure
(cmake, meson) to use Clang instead of GCC.

Add this new experimental option into "Advanced" menu since we are expecting
some build and runtime issues for number of packages (bootloaders, kernel).

For now, Clang cross-compiler can only be use as internal toolchain,
so it is build from the source which take a long time...

[1] http://www.linuxembedded.fr/2018/07/llvmclang-integration-into-buildroot
[2] https://www.elinux.org/Buildroot:DeveloperDaysFOSDEM2018#LLVM.2FClang
[3] http://www.linuxembedded.fr/2019/08/my-first-linux-kernel-built-with-clang-compiler
[4] https://www.phoronix.com/scan.php?page=news_item&px=LLVM-9.0-RC3-Released
[5] https://www.phoronix.com/scan.php?page=news_item&px=LLVM-Asm-Goto-Merged
[6] https://www.lowrisc.org/blog/2019/07/large-scale-risc-v-llvm-testing-with-buildroot

Best regards,
Romain

Romain Naour (11):
  package/clang: help host-clang to find our external toolchain
  package/llvm: add the version major variable
  package/clang: add the version major variable
  package/clang: install a toolchain-wrapper for the host clang
    cross-compiler
  linux: override CC for the case CC is not GCC
  package/meson: use TARGET_{CC,CXX} instead of TARGET_CROSS
  package/busybox: fix applets runtime issue when building with clang
    cross-compiler
  package/clang: add a host entry for clang
  core: allow to use Clang as cross-compiler
  toolchain: add a warning when Clang is used as cross-compiler
  linux: don't set -Wno-attribute-alias flag when Clang is used as
    cross-compiler

 Config.in                                     |  20 ++
 linux/linux.mk                                |   4 +-
 package/Config.in.host                        |   1 +
 package/Makefile.in                           |  13 +-
 ...use-BB_GLOBAL_CONST-where-applicable.patch | 173 ++++++++++++++++++
 ...hains-Gnu-Use-GCC_INSTALL_PREFIX-in-.patch |  76 ++++++++
 package/clang/Config.in.host                  |  19 ++
 package/clang/clang.mk                        |  49 ++++-
 package/llvm/llvm.mk                          |   3 +-
 package/meson/cross-compilation.conf.in       |   4 +-
 package/meson/meson.mk                        |   3 +-
 package/pkg-meson.mk                          |   3 +-
 toolchain/Config.in                           |   6 +
 .../toolchain-buildroot.mk                    |   7 +
 .../toolchain-external/toolchain-external.mk  |   7 +
 15 files changed, 378 insertions(+), 10 deletions(-)
 create mode 100644 package/busybox/0003-use-BB_GLOBAL_CONST-where-applicable.patch
 create mode 100644 package/clang/0001-lib-Driver-ToolChains-Gnu-Use-GCC_INSTALL_PREFIX-in-.patch
 create mode 100644 package/clang/Config.in.host

-- 
2.21.0

             reply	other threads:[~2019-09-06  9:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-06  9:09 Romain Naour [this message]
2019-09-06  9:09 ` [Buildroot] [PATCH 01/11] package/clang: help host-clang to find our external toolchain Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 02/11] package/llvm: add the version major variable Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 03/11] package/clang: " Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 04/11] package/clang: install a toolchain-wrapper for the host clang cross-compiler Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 05/11] linux: override CC for the case CC is not GCC Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 06/11] package/meson: use TARGET_{CC, CXX} instead of TARGET_CROSS Romain Naour
2019-09-06 15:58   ` Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 07/11] package/busybox: fix applets runtime issue when building with clang cross-compiler Romain Naour
2019-09-07  3:11   ` Matthew Weber
2019-09-07  3:17     ` Matthew Weber
2019-09-07  8:02     ` Romain Naour
2019-09-09 13:49       ` [Buildroot] [External] " Matthew Weber
2019-09-06  9:09 ` [Buildroot] [PATCH 08/11] package/clang: add a host entry for clang Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 09/11] core: allow to use Clang as cross-compiler Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 10/11] toolchain: add a warning when Clang is used " Romain Naour
2019-09-06  9:09 ` [Buildroot] [PATCH 11/11] linux: don't set -Wno-attribute-alias flag " Romain Naour

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190906090947.5476-1-romain.naour@smile.fr \
    --to=romain.naour@smile.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.