From: Luis Chamberlain <mcgrof@kernel.org>
To: Chuck Lever <cel@kernel.org>, Daniel Gomez <da.gomez@kruces.com>,
kdevops@lists.linux.dev
Cc: Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH v2 29/33] bootlinux: Add an option to build with clang instead of gcc
Date: Sun, 27 Jul 2025 18:14:29 -0700 [thread overview]
Message-ID: <20250728011434.3197091-30-mcgrof@kernel.org> (raw)
In-Reply-To: <20250728011434.3197091-1-mcgrof@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
Currently, gcc does not implement a Rust front-end. As the kernel
acquires Rust source code, the clang tool chain must be used to
build it.
To enable building test kernels with clang instead of gcc, add a
kdevops Kconfig option to install dependences and set the build
options to use clang.
See: Documentation/kbuild/llvm.rst
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
.../roles/bootlinux/tasks/build/builder.yml | 36 +++++++++++++++++++
.../tasks/install-deps/redhat/main.yml | 16 +++++++++
workflows/linux/Kconfig | 20 +++++++++++
3 files changed, 72 insertions(+)
diff --git a/playbooks/roles/bootlinux/tasks/build/builder.yml b/playbooks/roles/bootlinux/tasks/build/builder.yml
index c8363b8e..c4c4b950 100644
--- a/playbooks/roles/bootlinux/tasks/build/builder.yml
+++ b/playbooks/roles/bootlinux/tasks/build/builder.yml
@@ -110,12 +110,35 @@
community.general.make:
chdir: "{{ target_linux_dir_path }}"
target: "olddefconfig"
+ when:
+ - bootlinux_compiler_gcc|bool
- name: Build {{ target_linux_tree }}
community.general.make:
chdir: "{{ target_linux_dir_path }}"
jobs: "{{ ansible_processor_nproc }}"
target: "all"
+ when:
+ - bootlinux_compiler_gcc|bool
+
+- name: Configure kernel {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ params:
+ LLVM: 1
+ target: "olddefconfig"
+ when:
+ - bootlinux_compiler_clang|bool
+
+- name: Build {{ target_linux_tree }}
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ params:
+ LLVM: 1
+ target: "all"
+ when:
+ - bootlinux_compiler_clang|bool
- name: Remove the old artifacts directory on the control host
delegate_to: localhost
@@ -192,6 +215,19 @@
target: "binrpm-pkg"
params:
RPMOPTS: '--without devel'
+ when:
+ - bootlinux_compiler_gcc|bool
+
+ - name: Make the binrpm-pkg target
+ community.general.make:
+ chdir: "{{ target_linux_dir_path }}"
+ jobs: "{{ ansible_processor_nproc }}"
+ target: "binrpm-pkg"
+ params:
+ RPMOPTS: '--without devel'
+ LLVM: 1
+ when:
+ - bootlinux_compiler_clang|bool
- name: Find the build artifacts
ansible.builtin.find:
diff --git a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
index 0f966d67..dc4a5433 100644
--- a/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
+++ b/playbooks/roles/bootlinux/tasks/install-deps/redhat/main.yml
@@ -68,6 +68,22 @@
- btrfs-progs
when: ansible_distribution == 'Fedora'
+- name: Install clang
+ become: true
+ ansible.builtin.dnf:
+ name:
+ - clang
+ - lld
+ - llvm
+ state: present
+ update_cache: true
+ retries: 3
+ delay: 5
+ register: clang_result
+ until: clang_result is succeeded
+ when:
+ - bootlinux_compiler_clang|bool
+
- name: Install rpmbuild
become: true
become_method: ansible.builtin.sudo
diff --git a/workflows/linux/Kconfig b/workflows/linux/Kconfig
index 31f57017..06742f3e 100644
--- a/workflows/linux/Kconfig
+++ b/workflows/linux/Kconfig
@@ -151,6 +151,26 @@ endmenu
endif # BOOTLINUX_9P
+choice
+ prompt "Compiler to use to build the kernel"
+ default BOOTLINUX_COMPILER_GCC
+ help
+ Choose which toolchain to use to build the kernel.
+
+config BOOTLINUX_COMPILER_GCC
+ bool "gcc"
+ output yaml
+ help
+ Use the gcc compiler toolchain to build the Linux kernel.
+
+config BOOTLINUX_COMPILER_CLANG
+ bool "clang"
+ output yaml
+ help
+ Use the clang compiler toolchain to build the Linux kernel.
+
+endchoice
+
choice
prompt "Type of development version of Linux to use"
default BOOTLINUX_LINUS if !BOOTLINUX_TREE_SET_BY_CLI && !BOOTLINUX_TREE_REF_SET_BY_CLI
--
2.47.2
next prev parent reply other threads:[~2025-07-28 1:14 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-28 1:14 [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 01/33] vagrant: remove entire vagrant configuration directory Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 02/33] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 03/33] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 04/33] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 05/33] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 06/33] docs: remove Vagrant-specific documentation files Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 07/33] Remove all remaining Vagrant references from codebase Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 08/33] terraform: Clean up the destroy tasks Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 09/33] Switch to the cloud.terraform.terraform module Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 10/33] terraform: Make use of the new "terraform_output" module Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 11/33] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 12/33] terraform: Remove "delegate_to: localhost" Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 13/33] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 14/33] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 15/33] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 16/33] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 17/33] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 18/33] bootlinux: Select the kernel .config earlier Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 19/33] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 20/33] bootlinux: Move tasks for building on target nodes " Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 21/33] bootlinux: Clean up a grub set-up task Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 22/33] bootlinux: Harden update-grub/install.yml Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 23/33] Add a guest/instance for building the test kernel Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 24/33] bootlinux: Add a new builder choice Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 25/33] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 26/33] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 27/33] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 28/33] bootlinux: Install pre-built kernels from packages Luis Chamberlain
2025-07-28 1:14 ` Luis Chamberlain [this message]
2025-07-28 1:14 ` [PATCH v2 30/33] Makefile: add make style for style checking Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 31/33] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 32/33] CLAUDE.md: add don't BS rules Luis Chamberlain
2025-07-28 1:14 ` [PATCH v2 33/33] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names Luis Chamberlain
2025-07-29 20:07 ` [PATCH v2 00/33] remove vagrant and bootlinux shape up Luis Chamberlain
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=20250728011434.3197091-30-mcgrof@kernel.org \
--to=mcgrof@kernel.org \
--cc=cel@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=da.gomez@kruces.com \
--cc=kdevops@lists.linux.dev \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox