summaryrefslogtreecommitdiff
path: root/Add-support-for-selecting-clang-as-a-toolchain.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-29 11:09:34 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-29 11:09:34 +0000
commitc22cb56acddf5bc4147f60908d5ebd770a079070 (patch)
tree302eb716e7d6c4b9c514cf5cd9575b5a347fe220 /Add-support-for-selecting-clang-as-a-toolchain.patch
parentb28db8b7389e86a8b2a424f4851ecf7714373516 (diff)
automatic import of openEuler-rpm-config
Diffstat (limited to 'Add-support-for-selecting-clang-as-a-toolchain.patch')
-rw-r--r--Add-support-for-selecting-clang-as-a-toolchain.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/Add-support-for-selecting-clang-as-a-toolchain.patch b/Add-support-for-selecting-clang-as-a-toolchain.patch
new file mode 100644
index 0000000..c38c7cb
--- /dev/null
+++ b/Add-support-for-selecting-clang-as-a-toolchain.patch
@@ -0,0 +1,113 @@
+From f2a6af2ce79e26bf47604b610056d8c524b647f2 Mon Sep 17 00:00:00 2001
+From: liyunfei <liyunfei33@huawei.com>
+Date: Tue, 9 Jan 2024 20:39:10 +0800
+Subject: [PATCH 1/2] Add support for selecting clang as a toolchain
+
+---
+ generic-hardened-clang.cfg | 1 +
+ macros | 56 ++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 57 insertions(+), 3 deletions(-)
+ create mode 100644 generic-hardened-clang.cfg
+
+diff --git a/generic-hardened-clang.cfg b/generic-hardened-clang.cfg
+new file mode 100644
+index 0000000..ac596df
+--- /dev/null
++++ b/generic-hardened-clang.cfg
+@@ -0,0 +1 @@
++-fPIE
+\ No newline at end of file
+diff --git a/macros b/macros
+index 5fdaf0a..0062126 100755
+--- a/macros
++++ b/macros
+@@ -23,6 +23,46 @@
+
+ %_build_id_links none
+
++# GCC toolchain
++%__cc_gcc gcc
++%__cxx_gcc g++
++%__cpp_gcc gcc -E
++
++# Clang toolchain
++%__cc_clang clang
++%__cxx_clang clang++
++%__cpp_clang clang-cpp
++
++# Default to the GCC toolchain
++#
++# It is enough to override `toolchain` macro and all relevant macro for C/C++
++# compilers will be switched. Either in the spec or in the command-line.
++#
++# %global toolchain clang
++#
++# or:
++#
++# rpmbuild -D "toolchain clang" …
++#
++# Inside a spec file it is also possible to determine which toolchain is in use
++# by testing the same macro. For example:
++#
++# %if "%{toolchain}" == "gcc"
++# BuildRequires: gcc
++# %endif
++#
++# or:
++#
++# %if "%{toolchain}" == "clang"
++# BuildRequires: clang compiler-rt
++# %endif
++#
++%toolchain gcc
++
++%__cc %{expand:%%{__cc_%{toolchain}}}
++%__cxx %{expand:%%{__cxx_%{toolchain}}}
++%__cpp %{expand:%%{__cpp_%{toolchain}}}
++
+ #==============================================================================
+ # ---- compiler flags.
+
+@@ -31,7 +71,13 @@
+ %build_fflags %{optflags} -fexceptions -I%{_fmoddir}
+ %build_ldflags -Wl,-z,relro %{_ld_as_needed_flags} %{_ld_symbols_flags} %{_hardened_ldflags}
+
++%set_build_cc \
++ CC=%{__cc}; export CC ; \
++ CXX=%{__cxx}; export CXX ; \
++ CCC="${CCC:-%{__cxx}}" ; export CCC
++
+ %set_build_flags \
++ %[ "%{toolchain}" == "gcc" ? "" : "%{set_build_cc};" ] \
+ CFLAGS="${CFLAGS:-%{build_cflags}}" ; export CFLAGS ; \
+ CXXFLAGS="${CXXFLAGS:-%{build_cxxflags}}" ; export CXXFLAGS ; \
+ FFLAGS="${FFLAGS:-%{build_fflags}}" ; export FFLAGS ; \
+@@ -162,8 +208,10 @@
+ # secure options for rpmbuild
+ #
+ # #hardened options
+-%_hardening_cflags -specs=/usr/lib/rpm/generic-hardened-cc1
+-%_hardening_ldflags -Wl,-z,now -specs=/usr/lib/rpm/generic-hardened-ld
++%_hardening_gcc_cflags -specs=/usr/lib/rpm/generic-hardened-cc1
++%_hardening_clang_cflags --config /usr/lib/rpm/generic-hardened-clang.cfg
++%_hardening_cflags %{expand:%%{_hardening_%{toolchain}_cflags}}
++%_hardening_ldflags -Wl,-z,now %[ "%{toolchain}" == "gcc" ? "-specs=/usr/lib/rpm/generic-hardened-ld" : "" ]
+ # Use "%undefine _hardened_build" to disable.
+ %_hardened_build 1
+ %_hardened_cflags %{?_hardened_build:%{_hardening_cflags}}
+@@ -195,7 +243,11 @@
+ #%_ld_as_needed 1
+ %_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed}
+
+-%__global_compiler_flags -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -grecord-gcc-switches %{_hardened_cflags}
++%_general_options -O2 -g -grecord-gcc-switches -pipe -fstack-protector-strong %[ "%{toolchain}" == "clang" ? "-fgcc-compatible" : "" ]
++%_warning_options -Wall -Werror=format-security
++%_preprocessor_defines -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS
++
++%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_hardened_cflags}
+
+ # Automatically trim changelog entries after 2 years
+ %_changelog_trimtime %{lua:print(os.time() - 2 * 365 * 86400)}
+--
+2.27.0
+