Add support for Tizen toolchain vendor
authorSlava Barinov <v.barinov@samsung.com>
Thu, 2 Sep 2021 20:51:42 +0000 (23:51 +0300)
committerDongkyun Son <dongkyun.s@samsung.com>
Fri, 4 Apr 2025 06:38:09 +0000 (15:38 +0900)
Port of
ebf1682d714e4b6c1487ea0e136cf7c1ec30f46d
8845ba7f79513b7e362fed80bb57b708352ddbbd

Change-Id: I67d99460b74711b120843505c9663036d7ee4ccb
Signed-off-by: Slava Barinov <v.barinov@samsung.com>
Signed-off-by: Dongkyun Son <dongkyun.s@samsung.com>
clang/include/clang/Config/config.h.cmake
clang/lib/Driver/Driver.cpp
clang/lib/Driver/ToolChains/Linux.cpp
llvm/include/llvm/TargetParser/Triple.h
llvm/lib/TargetParser/Triple.cpp

index 27ed69e21562bff28e065c3f04cb50159556dd46..3b4b7ceebb7de51125f563de57707accf483662d 100644 (file)
@@ -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}"
 
index 87855fdb7997105d8d425b4c8690b072d3c6cde7..9db749b192fb9c623ad9dbf2b919a4c30e8fc5fa 100644 (file)
@@ -187,10 +187,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);
   }
 
@@ -259,6 +261,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));
 
index 0767fe6c58796d8701d6f90678440dd4812b640e..deba598fa90fbc480be111f6a89daa1413d777fb 100644 (file)
@@ -714,6 +714,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();
 
@@ -722,7 +723,7 @@ void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
       LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text,
       // Freescale SDK C++ headers are directly in <sysroot>/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++",
index 7d67966d1725639ecb80500bf912820ac1d8741c..d7f1f6ad6e9181f0647d774a456282a7e42d5c97 100644 (file)
@@ -194,7 +194,8 @@ public:
     SUSE,
     OpenEmbedded,
     Intel,
-    LastVendorType = Intel
+    Tizen,
+    LastVendorType = Tizen
   };
   enum OSType {
     UnknownOS,
index e9e6f130f757cf20e3c1023a23315ed88c641275..44961f7f4fec4d779053f871ed0eac4b4f97e07d 100644 (file)
@@ -270,6 +270,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!");
@@ -664,6 +665,7 @@ static Triple::VendorType parseVendor(StringRef VendorName) {
       .Case("suse", Triple::SUSE)
       .Case("oe", Triple::OpenEmbedded)
       .Case("intel", Triple::Intel)
+      .Case("tizen", Triple::Tizen)
       .Default(Triple::UnknownVendor);
 }