diff --git a/0013-set-default-prefix-for-search-path-when-prefix-is-em.patch b/0013-set-default-prefix-for-search-path-when-prefix-is-em.patch new file mode 100644 index 0000000000000000000000000000000000000000..7301b289e12211a278380dd8ba6e638231dcba68 --- /dev/null +++ b/0013-set-default-prefix-for-search-path-when-prefix-is-em.patch @@ -0,0 +1,92 @@ +From d9b39e1a7a7c93bd08f177eb584ef6837eebc727 Mon Sep 17 00:00:00 2001 +From: luofeng14 +Date: Thu, 25 Apr 2024 09:40:16 +0800 +Subject: [PATCH] set default prefix for search path when prefix is empty + +--- + clang/lib/Frontend/CompilerInvocation.cpp | 31 +++++++++++++++++++++++ + clang/test/Driver/prefix.c | 10 ++++++++ + clang/test/lit.site.cfg.py.in | 1 + + 3 files changed, 42 insertions(+) + create mode 100644 clang/test/Driver/prefix.c + +diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp +index 1fba91bed041..c844452dee36 100644 +--- a/clang/lib/Frontend/CompilerInvocation.cpp ++++ b/clang/lib/Frontend/CompilerInvocation.cpp +@@ -3127,6 +3127,36 @@ static bool ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args, + IsIndexHeaderMap = false; + } + ++#ifdef BUILD_FOR_OPENEULER ++ // Add -iprefix/-iwithprefix/-iwithprefixbefore options. ++ StringRef Prefix = ""; // FIXME: This isn't the correct default prefix. ++ if (Args.hasFlag(options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible, false)) { ++ Prefix = Opts.ResourceDir; // default prefix. ++ } ++ for (const auto *A : ++ Args.filtered(OPT_iprefix, OPT_iwithprefix, OPT_iwithprefixbefore)) { ++ llvm::SmallString<128> searchPath(Prefix.str()); ++ if (Args.hasFlag(options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible, false)) { ++ llvm::sys::path::append(searchPath, A->getValue()); ++ } ++ if (A->getOption().matches(OPT_iprefix)) ++ Prefix = A->getValue(); ++ else if (A->getOption().matches(OPT_iwithprefix)) { ++ if (Args.hasFlag(options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible, false)) { ++ Opts.AddPath(searchPath, frontend::After, false, true); ++ } else { ++ Opts.AddPath(Prefix.str() + A->getValue(), frontend::After, false, true); ++ } ++ } ++ else { ++ if (Args.hasFlag(options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible, false)) { ++ Opts.AddPath(searchPath, frontend::Angled, false, true); ++ } else { ++ Opts.AddPath(Prefix.str() + A->getValue(), frontend::Angled, false, true); ++ } ++ } ++ } ++#else + // Add -iprefix/-iwithprefix/-iwithprefixbefore options. + StringRef Prefix = ""; // FIXME: This isn't the correct default prefix. + for (const auto *A : +@@ -3138,6 +3168,7 @@ static bool ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args, + else + Opts.AddPath(Prefix.str() + A->getValue(), frontend::Angled, false, true); + } ++#endif + + for (const auto *A : Args.filtered(OPT_idirafter)) + Opts.AddPath(A->getValue(), frontend::After, false, true); +diff --git a/clang/test/Driver/prefix.c b/clang/test/Driver/prefix.c +new file mode 100644 +index 000000000000..0590beef26d2 +--- /dev/null ++++ b/clang/test/Driver/prefix.c +@@ -0,0 +1,10 @@ ++// REQUIRES: build_for_openeuler ++ ++// RUN: %clang -v -fgcc-compatible -iwithprefix include %s ++// RUN: %clang -v -fgcc-compatible -nostdinc -iwithprefix include %s ++// RUN: %clang -v -fgcc-compatible %s ++ ++#include ++int main(void) { ++return 0; ++} +diff --git a/clang/test/lit.site.cfg.py.in b/clang/test/lit.site.cfg.py.in +index bc278740e0d0..c2532e846fe7 100644 +--- a/clang/test/lit.site.cfg.py.in ++++ b/clang/test/lit.site.cfg.py.in +@@ -42,6 +42,7 @@ config.standalone_build = @CLANG_BUILT_STANDALONE@ + config.ppc_linux_default_ieeelongdouble = @PPC_LINUX_DEFAULT_IEEELONGDOUBLE@ + config.have_llvm_driver = @LLVM_TOOL_LLVM_DRIVER_BUILD@ + config.use_classic_flang = @LLVM_ENABLE_CLASSIC_FLANG@ ++config.build_for_openeuler = @BUILD_FOR_OPENEULER@ + + import lit.llvm + lit.llvm.initialize(lit_config, config) +-- +2.24.3 (Apple Git-128) + diff --git a/clang.spec b/clang.spec index 5e03a75a2b2e805a9415d09b024134bcb3e72b58..62b350181b4f38bdd3ee1be927a7db34be5fd978 100644 --- a/clang.spec +++ b/clang.spec @@ -37,7 +37,7 @@ Name: %{pkg_name} Version: %{clang_version} -Release: 15 +Release: 16 Summary: A C language family front-end for LLVM License: NCSA @@ -58,7 +58,7 @@ Patch9: 0009-Backport-LoongArch-improve-the-support-for-compiler-rt-and-bugfix. Patch10: 0010-Backport-clang-Avoid-Wshadow-warning-when-init-capture-named.patch Patch11: 0011-Add-the-support-for-classic-flang.patch Patch12: 0012-Fix-declaration-definition-mismatch-for-classic-flang.patch - +Patch13: 0013-set-default-prefix-for-search-path-when-prefix-is-em.patch # Patches for clang-tools-extra # See https://reviews.llvm.org/D120301 Patch201: fedora-clang-tools-extra-Make-test-dependency-on-LLVMHello-.patch @@ -392,6 +392,9 @@ LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C ./_build %{install_bindir}/git-clang-format %changelog +* Fri Apr 26 2024 luofeng -17.0.6-16 +- Set default prefix for search path when prefix is empty + * Wed Apr 17 2024 luofeng -17.0.6-15 - Add the support for classic flang