public inbox for kdevops@lists.linux.dev
 help / color / mirror / Atom feed
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 36/40] bootlinux: Add an option to build with clang instead of gcc
Date: Sun, 27 Jul 2025 17:17:55 -0700	[thread overview]
Message-ID: <20250728001800.3188617-37-mcgrof@kernel.org> (raw)
In-Reply-To: <20250728001800.3188617-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


  parent reply	other threads:[~2025-07-28  0:18 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-28  0:17 [PATCH 00/40] remove vagrant and bootlinux shape up Luis Chamberlain
2025-07-28  0:17 ` [PATCH 01/40] vagrant: remove entire vagrant configuration directory Luis Chamberlain
2025-07-28  0:17 ` [PATCH 02/40] kconfigs: fix Kconfig references after vagrant removal Luis Chamberlain
2025-07-28  0:17 ` [PATCH 03/40] scripts: remove Vagrant-specific scripts and Makefiles Luis Chamberlain
2025-07-28  0:17 ` [PATCH 04/40] playbooks: remove Vagrant-specific playbooks and roles Luis Chamberlain
2025-07-28  0:17 ` [PATCH 05/40] gitignore: remove Vagrant-specific ignore patterns Luis Chamberlain
2025-07-28  0:17 ` [PATCH 06/40] docs: remove Vagrant-specific documentation files Luis Chamberlain
2025-07-28  0:17 ` [PATCH 07/40] Remove all remaining Vagrant references from codebase Luis Chamberlain
2025-07-28  0:17 ` [PATCH 08/40] AuthorDate: Fri Jul 25 14:23:00 2025 -0400 Luis Chamberlain
2025-07-28  0:17 ` [PATCH 09/40] ansible.cfg: Explicitly set the ssh user Luis Chamberlain
2025-07-28  0:24   ` Chuck Lever
2025-07-28  0:27     ` Luis Chamberlain
2025-07-28  0:36       ` Chuck Lever
2025-07-28  0:17 ` [PATCH 10/40] fstests: local NFS list Luis Chamberlain
2025-07-28  0:17 ` [PATCH 11/40] terraform: Clean up the destroy tasks Luis Chamberlain
2025-07-28  0:17 ` [PATCH 12/40] Switch to the cloud.terraform.terraform module Luis Chamberlain
2025-07-28  0:17 ` [PATCH 13/40] terraform: Make use of the new "terraform_output" module Luis Chamberlain
2025-07-28  0:17 ` [PATCH 14/40] terraform: Move "wait_for_connection" out of the terraform playbook Luis Chamberlain
2025-07-28  0:17 ` [PATCH 15/40] terraform: Remove "delegate_to: localhost" Luis Chamberlain
2025-07-28  0:17 ` [PATCH 16/40] terraform: Replace scripts/status_terraform.sh Luis Chamberlain
2025-07-28  0:17 ` [PATCH 17/40] Kconfig: Convert the 9p option to a choice menu Luis Chamberlain
2025-07-28  0:17 ` [PATCH 18/40] bootlinux: fix making 9p default if using libvirt Luis Chamberlain
2025-07-28  0:17 ` [PATCH 19/40] bootlinux: Relocate tasks that select a kernel .config Luis Chamberlain
2025-07-28  0:17 ` [PATCH 20/40] bootlinux: Simplify tasks that select the kernel .config to build Luis Chamberlain
2025-07-28  0:17 ` [PATCH 21/40] bootlinux: Select the kernel .config earlier Luis Chamberlain
2025-07-28  0:17 ` [PATCH 22/40] bootlinux: Move 9p build tasks to a subrole Luis Chamberlain
2025-07-28  0:17 ` [PATCH 23/40] bootlinux: fix missing make command when using 9P builds Luis Chamberlain
2025-07-28  0:17 ` [PATCH 24/40] guestsfs: ensure linux directory exists Luis Chamberlain
2025-07-28  0:17 ` [PATCH 25/40] bootlinux: Move tasks for building on target nodes to a subrole Luis Chamberlain
2025-07-28  0:17 ` [PATCH 26/40] bootlinux: Clean up a grub set-up task Luis Chamberlain
2025-07-28  0:17 ` [PATCH 27/40] bootlinux: Harden update-grub/install.yml Luis Chamberlain
2025-07-28  0:17 ` [PATCH 28/40] bootlinux: fix grub_boot_number_cmd undefined error in update-grub Luis Chamberlain
2025-07-28  0:17 ` [PATCH 29/40] bootlinux: fix kernel_release_file.stat " Luis Chamberlain
2025-07-28  0:17 ` [PATCH 30/40] Add a guest/instance for building the test kernel Luis Chamberlain
2025-07-28  0:17 ` [PATCH 31/40] bootlinux: Add a new builder choice Luis Chamberlain
2025-07-28  0:17 ` [PATCH 32/40] workflows: Add a kconfig setting for installing kernels via package Luis Chamberlain
2025-07-28  0:17 ` [PATCH 33/40] bootlinux: Enclose tasks to find kernel release name in a block: Luis Chamberlain
2025-07-28  0:17 ` [PATCH 34/40] bootlinux: Pick up kernel release info for pre-built packages Luis Chamberlain
2025-07-28  0:17 ` [PATCH 35/40] bootlinux: Install pre-built kernels from packages Luis Chamberlain
2025-07-28  0:17 ` Luis Chamberlain [this message]
2025-07-28  0:17 ` [PATCH 37/40] Makefile: add make style for style checking Luis Chamberlain
2025-07-28  0:17 ` [PATCH 38/40] CLAUDE.md: new workflow guide for hosts and nodes Luis Chamberlain
2025-07-28  0:17 ` [PATCH 39/40] CLAUDE.md: add don't BS rules Luis Chamberlain
2025-07-28  0:17 ` [PATCH 40/40] gen_nodes/gen_hosts: avoid usage of fs_config_path on task names 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=20250728001800.3188617-37-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