add clang toolchain support

This commit is contained in:
liyunfei 2023-08-24 16:10:05 +08:00
parent 1a737e4f72
commit bab172c956
4 changed files with 157 additions and 28 deletions

View File

@ -0,0 +1,49 @@
From 6289f9462859513b4fa3137faf0332b84e46558a Mon Sep 17 00:00:00 2001
From: liyunfei <liyunfei33@huawei.com>
Date: Mon, 28 Aug 2023 10:55:20 +0800
Subject: [PATCH] cpupower clang compile support
Modified Makefile with tools/scripts/Makefile.include for clang compile and clang cross compile support.
---
tools/power/cpupower/Makefile | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile
index 59bfa05..1e606a4 100644
--- a/tools/power/cpupower/Makefile
+++ b/tools/power/cpupower/Makefile
@@ -8,16 +8,7 @@
# Copyright (C) 2003,2004 Greg Kroah-Hartman <greg@kroah.com>
#
OUTPUT=./
-ifeq ("$(origin O)", "command line")
- OUTPUT := $(O)/
-endif
-
-ifneq ($(OUTPUT),)
-# check that the output directory actually exists
-OUTDIR := $(shell cd $(OUTPUT) && pwd)
-$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
-endif
-
+include ../../scripts/Makefile.include
# --- CONFIGURATION BEGIN ---
@@ -86,12 +77,8 @@ INSTALL_SCRIPT = ${INSTALL} -m 644
# to something more interesting, like "arm-linux-". If you want
# to compile vs uClibc, that can be done here as well.
CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc-
-CC = $(CROSS)gcc
-LD = $(CROSS)gcc
-AR = $(CROSS)ar
-STRIP = $(CROSS)strip
+CROSS_COMPILE ?= $(CROSS)
RANLIB = $(CROSS)ranlib
-HOSTCC = gcc
MKDIR = mkdir
# 64bit library detection
--
2.28.0.windows.1

View File

@ -0,0 +1,24 @@
From 55391ef2c74c32675038a7eb9c81769eba4622f6 Mon Sep 17 00:00:00 2001
From: liyunfei <liyunfei33@huawei.com>
Date: Mon, 28 Aug 2023 11:06:32 +0800
Subject: [PATCH] x86_energy_perf_policy clang compile support
Modified Makefile with tools/scripts/Makefile.include for clang compile and clang cross compile support.
---
tools/power/x86/x86_energy_perf_policy/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/power/x86/x86_energy_perf_policy/Makefile b/tools/power/x86/x86_energy_perf_policy/Makefile
index 666b325..c61227b 100644
--- a/tools/power/x86/x86_energy_perf_policy/Makefile
+++ b/tools/power/x86/x86_energy_perf_policy/Makefile
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: GPL-2.0
-CC = $(CROSS_COMPILE)gcc
+include ../../../scripts/Makefile.include
BUILD_OUTPUT := $(CURDIR)
PREFIX := /usr
DESTDIR :=
--
2.28.0.windows.1

View File

@ -0,0 +1,24 @@
From bddde6f3d75afb734862150e2fb80af9cf3e00f9 Mon Sep 17 00:00:00 2001
From: liyunfei <liyunfei33@huawei.com>
Date: Mon, 28 Aug 2023 11:09:03 +0800
Subject: [PATCH] turbostat clang compile support
Modified Makefile with tools/scripts/Makefile.include for clang compile and clang cross compile support.
---
tools/power/x86/turbostat/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/power/x86/turbostat/Makefile b/tools/power/x86/turbostat/Makefile
index 92e139b..f4de368 100644
--- a/tools/power/x86/turbostat/Makefile
+++ b/tools/power/x86/turbostat/Makefile
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: GPL-2.0
-CC = $(CROSS_COMPILE)gcc
+include ../../../scripts/Makefile.include
BUILD_OUTPUT := $(CURDIR)
PREFIX ?= /usr
DESTDIR ?=
--
2.28.0.windows.1

View File

@ -1,6 +1,13 @@
%define with_signmodules 1
%define with_kabichk 0
# Default without toolchain_clang
%bcond_with toolchain_clang
%if %{with toolchain_clang}
%global toolchain clang
%endif
%define modsign_cmd %{SOURCE10}
%global Arch $(echo %{_host_cpu} | sed -e s/i.86/x86/ -e s/x86_64/x86/ -e s/aarch64.*/arm64/ -e s/riscv.*/riscv/)
@ -12,7 +19,7 @@
%global upstream_sublevel 0
%global devel_release 1
%global maintenance_release .0.2
%global pkg_release .7
%global pkg_release .8
%define with_debuginfo 1
# Do not recompute the build-id of vmlinux in find-debuginfo.sh
@ -72,6 +79,9 @@ Source9998: patches.tar.bz2
%endif
Patch0001: 0001-kconfig-Add-script-to-update-openeuler_defconfig.patch
Patch0002: 0002-cpupower-clang-compile-support.patch
Patch0003: 0003-x86_energy_perf_policy-clang-compile-support.patch
Patch0004: 0004-turbostat-clang-compile-support.patch
#BuildRequires:
BuildRequires: module-init-tools, patch >= 2.5.4, bash >= 2.03, tar
@ -298,6 +308,11 @@ Applypatches series.conf %{_builddir}/kernel-%{version}/linux-%{KernelVer}
%endif
%patch0001 -p1
%if "%toolchain" == "clang"
%patch0002 -p1
%patch0003 -p1
%patch0004 -p1
%endif
find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
find . -name .gitignore -exec rm -f {} \; >/dev/null
@ -330,12 +345,26 @@ sed -i arch/arm64/configs/openeuler_defconfig -e 's/^CONFIG_ARM64_VA_BITS=.*/CON
sed -i arch/arm64/configs/openeuler_defconfig -e 's/^CONFIG_ARM64_VA_BITS_.*/CONFIG_ARM64_VA_BITS_52=y/'
%endif
make ARCH=%{Arch} openeuler_defconfig
%if "%toolchain" == "clang"
%ifarch s390x ppc64le
%global llvm_ias 0
%else
%global llvm_ias 1
%endif
%global clang_make_opts HOSTCC=clang CC=clang LLVM_IAS=%{llvm_ias}
%endif
%global make %{__make} %{?clang_make_opts} HOSTCFLAGS="%{?build_cflags}" HOSTLDFLAGS="%{?build_ldflags}"
%{make} ARCH=%{Arch} openeuler_defconfig
TargetImage=$(basename $(make -s image_name))
make ARCH=%{Arch} $TargetImage %{?_smp_mflags}
make ARCH=%{Arch} modules %{?_smp_mflags}
%{make} ARCH=%{Arch} $TargetImage %{?_smp_mflags}
%{make} ARCH=%{Arch} modules %{?_smp_mflags}
%if 0%{?with_kabichk}
chmod 0755 %{SOURCE18}
@ -348,14 +377,14 @@ make ARCH=%{Arch} modules %{?_smp_mflags}
# aarch64 make dtbs
%ifarch aarch64 riscv64
make ARCH=%{Arch} dtbs
%{make} ARCH=%{Arch} dtbs
%endif
## make tools
%if %{with_perf}
# perf
%global perf_make \
make EXTRA_CFLAGS="-Wl,-z,now -g -Wall -fstack-protector-strong -fPIC" EXTRA_PERFLIBS="-fpie -pie" %{?_smp_mflags} -s V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 NO_STRLCPY=1 prefix=%{_prefix}
make %{?clang_make_opts} EXTRA_LDFLAGS="%[ "%{toolchain}" == "clang" ? "-z now" : "" ]" EXTRA_CFLAGS="%[ "%{toolchain}" == "clang" ? "" : "-Wl,-z,now" ] -g -Wall -fstack-protector-strong -fPIC" EXTRA_PERFLIBS="-fpie -pie" %{?_smp_mflags} -s V=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 NO_STRLCPY=1 prefix=%{_prefix}
%if 0%{?with_python2}
%global perf_python2 -C tools/perf PYTHON=%{__python2}
%global perf_python3 -C tools/python3-perf PYTHON=%{__python3}
@ -374,51 +403,51 @@ chmod +x tools/python3-perf/check-headers.sh
%{perf_make} %{perf_python3} all
pushd tools/perf/Documentation/
make %{?_smp_mflags} man
%{make} %{?_smp_mflags} man
popd
%endif
# bpftool
pushd tools/bpf/bpftool
make
%{make}
popd
# cpupower
chmod +x tools/power/cpupower/utils/version-gen.sh
make %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
%{make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
%ifarch %{ix86}
pushd tools/power/cpupower/debug/i386
make %{?_smp_mflags} centrino-decode powernow-k8-decode
%{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
popd
%endif
%ifarch x86_64
pushd tools/power/cpupower/debug/x86_64
make %{?_smp_mflags} centrino-decode powernow-k8-decode
%{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
popd
%endif
%ifarch %{ix86} x86_64
pushd tools/power/x86/x86_energy_perf_policy/
make
%{make}
popd
pushd tools/power/x86/turbostat
make
%{make}
popd
%endif
# thermal
pushd tools/thermal/tmon/
make
%{make}
popd
# iio
pushd tools/iio/
make
%{make}
popd
# gpio
pushd tools/gpio/
make
%{make}
popd
# kvm
pushd tools/kvm/kvm_stat/
make %{?_smp_mflags} man
%{make} %{?_smp_mflags} man
popd
%install
@ -460,7 +489,7 @@ install -m 755 %{SOURCE200} $RPM_BUILD_ROOT%{_sbindir}/mkgrub-menu-%{version}-%{
%endif
# deal with module, if not kdump
make ARCH=%{Arch} INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=%{KernelVer} mod-fw=
%{make} ARCH=%{Arch} INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=%{KernelVer} mod-fw=
######## to collect ko to module.filelist about netwoking. block. drm. modesetting ###############
pushd $RPM_BUILD_ROOT/lib/modules/%{KernelVer}
find -type f -name "*.ko" >modnames
@ -522,7 +551,7 @@ popd
%{nil}
# deal with header
make ARCH=%{Arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr KBUILD_SRC= headers_install
%{make} ARCH=%{Arch} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr KBUILD_SRC= headers_install
find $RPM_BUILD_ROOT/usr/include -name "\.*" -exec rm -rf {} \;
# dtbs install
@ -533,7 +562,7 @@ find $RPM_BUILD_ROOT/usr/include -name "\.*" -exec rm -rf {} \;
%endif
# deal with vdso
make -s ARCH=%{Arch} INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=%{KernelVer}
%{make} -s ARCH=%{Arch} INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=%{KernelVer}
if [ ! -s ldconfig-kernel.conf ]; then
echo "# Placeholder file, no vDSO hwcap entries used in this kernel." >ldconfig-kernel.conf
fi
@ -646,7 +675,7 @@ install -pm0644 tools/perf/Documentation/*.1 %{buildroot}/%{_mandir}/man1/
# bpftool
pushd tools/bpf/bpftool
make DESTDIR=%{buildroot} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install
%{make} DESTDIR=%{buildroot} prefix=%{_prefix} bash_compdir=%{_sysconfdir}/bash_completion.d/ mandir=%{_mandir} install doc-install
popd
# resolve_btfids
@ -654,7 +683,7 @@ mkdir -p %{buildroot}/usr/src/kernels/%{KernelVer}/tools/bpf/resolve_btfids
cp tools/bpf/resolve_btfids/resolve_btfids %{buildroot}/usr/src/kernels/%{KernelVer}/tools/bpf/resolve_btfids
# cpupower
make -C tools/power/cpupower DESTDIR=%{buildroot} libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
%{make} -C tools/power/cpupower DESTDIR=%{buildroot} libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
rm -f %{buildroot}%{_libdir}/*.{a,la}
%find_lang cpupower
mv cpupower.lang ../
@ -677,27 +706,27 @@ install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
%ifarch %{ix86} x86_64
mkdir -p %{buildroot}%{_mandir}/man8
pushd tools/power/x86/x86_energy_perf_policy
make DESTDIR=%{buildroot} install
%{make} DESTDIR=%{buildroot} install
popd
pushd tools/power/x86/turbostat
make DESTDIR=%{buildroot} install
%{make} DESTDIR=%{buildroot} install
popd
%endif
# thermal
pushd tools/thermal/tmon
make INSTALL_ROOT=%{buildroot} install
%{make} INSTALL_ROOT=%{buildroot} install
popd
# iio
pushd tools/iio
make DESTDIR=%{buildroot} install
%{make} DESTDIR=%{buildroot} install
popd
# gpio
pushd tools/gpio
make DESTDIR=%{buildroot} install
%{make} DESTDIR=%{buildroot} install
popd
# kvm
pushd tools/kvm/kvm_stat
make INSTALL_ROOT=%{buildroot} install-tools
%{make} INSTALL_ROOT=%{buildroot} install-tools
popd
%define __spec_install_post\
@ -879,6 +908,9 @@ fi
%endif
%changelog
* Fri Aug 25 2023 liyunfei <liyunfei33@huawei.com> - 6.4.0-1.0.2.8
- add clang toolchain support
* Fri Aug 25 2023 bitcoffee <liuxin350@huawei.com> - 6.4.0-1.0.2.7
- add resolver_btfids tool to kernel-devel for compiling ko