From: Slava Barinov Date: Thu, 2 Sep 2021 20:51:42 +0000 (+0300) Subject: [llvm][clang] Add support for Tizen toolchain vendor X-Git-Tag: accepted/tizen/base/toolchain/20240529.013406~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3dedcb89fd6213073b31c659ff7d8981cc94b07e;p=platform%2Fupstream%2Fllvm.git [llvm][clang] Add support for Tizen toolchain vendor Port of ebf1682d714e4b6c1487ea0e136cf7c1ec30f46d 8845ba7f79513b7e362fed80bb57b708352ddbbd Signed-off-by: Slava Barinov --- diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake index 4015ac804086..fe473bd95d7f 100644 --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -32,6 +32,9 @@ /* Default architecture for SystemZ. */ #define CLANG_SYSTEMZ_DEFAULT_ARCH "${CLANG_SYSTEMZ_DEFAULT_ARCH}" +/* Multilib suffix for libdir. */ +#define CLANG_LIBDIR_SUFFIX "${CLANG_LIBDIR_SUFFIX}" + /* Multilib basename for libdir. */ #define CLANG_INSTALL_LIBDIR_BASENAME "${CLANG_INSTALL_LIBDIR_BASENAME}" diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 93cddf742d52..2b75fe294a31 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -179,10 +179,12 @@ std::string Driver::GetResourcesPath(StringRef BinaryPath, // With a static-library build of libclang, LibClangPath will contain the // path of the embedding binary, which for LLVM binaries will be in bin/. // ../lib gets us to lib/ in both cases. + const char *NO_LIBDIR_SUFFIX = std::getenv("CLANG_NO_LIBDIR_SUFFIX"); + StringRef ClangLibdirSuffix(NO_LIBDIR_SUFFIX ? "" : CLANG_LIBDIR_SUFFIX); P = llvm::sys::path::parent_path(Dir); // This search path is also created in the COFF driver of lld, so any // changes here also needs to happen in lld/COFF/Driver.cpp - llvm::sys::path::append(P, CLANG_INSTALL_LIBDIR_BASENAME, "clang", + llvm::sys::path::append(P, Twine("lib") + ClangLibdirSuffix, "clang", CLANG_VERSION_MAJOR_STRING); } @@ -207,6 +209,11 @@ Driver::Driver(StringRef ClangExecutable, StringRef TargetTriple, if (!this->VFS) this->VFS = llvm::vfs::getRealFileSystem(); +// Skip /emul if we work in accelerated environment +#define QEMU_ACCEL_DIR "/emul" + if (ClangExecutable.substr(0, sizeof(QEMU_ACCEL_DIR) - 1) == QEMU_ACCEL_DIR) + ClangExecutable = ClangExecutable.drop_front(sizeof(QEMU_ACCEL_DIR) - 1); + Name = std::string(llvm::sys::path::filename(ClangExecutable)); Dir = std::string(llvm::sys::path::parent_path(ClangExecutable)); InstalledDir = Dir; // Provide a sensible default installed dir. diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index 4300a2bdff17..f80163ef3eb6 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -694,6 +694,7 @@ void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, return; StringRef LibDir = GCCInstallation.getParentLibPath(); + const StringRef InstallDir = GCCInstallation.getInstallPath(); const Multilib &Multilib = GCCInstallation.getMultilib(); const GCCVersion &Version = GCCInstallation.getVersion(); @@ -702,7 +703,7 @@ void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text, // Freescale SDK C++ headers are directly in /usr/include/c++, // without a subdirectory corresponding to the gcc version. - LibDir.str() + "/../include/c++", + LibDir.str() + "/../include/c++", InstallDir.str() + "/include/c++", // Cray's gcc installation puts headers under "g++" without a // version suffix. LibDir.str() + "/../include/g++", diff --git a/llvm/include/llvm/TargetParser/Triple.h b/llvm/include/llvm/TargetParser/Triple.h index 49ec8de9c528..8881c4f49eb6 100644 --- a/llvm/include/llvm/TargetParser/Triple.h +++ b/llvm/include/llvm/TargetParser/Triple.h @@ -182,7 +182,8 @@ public: Mesa, SUSE, OpenEmbedded, - LastVendorType = OpenEmbedded + Tizen, + LastVendorType = Tizen }; enum OSType { UnknownOS, diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp index 0bbe8a3cedfd..ae664fbaeb38 100644 --- a/llvm/lib/TargetParser/Triple.cpp +++ b/llvm/lib/TargetParser/Triple.cpp @@ -228,6 +228,7 @@ StringRef Triple::getVendorTypeName(VendorType Kind) { case PC: return "pc"; case SCEI: return "scei"; case SUSE: return "suse"; + case Tizen: return "tizen"; } llvm_unreachable("Invalid VendorType!"); @@ -602,6 +603,7 @@ static Triple::VendorType parseVendor(StringRef VendorName) { .Case("mesa", Triple::Mesa) .Case("suse", Triple::SUSE) .Case("oe", Triple::OpenEmbedded) + .Case("tizen", Triple::Tizen) .Default(Triple::UnknownVendor); }