[llvm][clang] 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>
Sat, 25 May 2024 06:11:20 +0000 (15:11 +0900)
Port of
ebf1682d714e4b6c1487ea0e136cf7c1ec30f46d
8845ba7f79513b7e362fed80bb57b708352ddbbd

Signed-off-by: Slava Barinov <v.barinov@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 4015ac8040861c2cb92d0c79a4334d5d3324dcb3..fe473bd95d7f02b16ead9a2555491982fa311ad9 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 93cddf742d521d25dc9ad397804cd829e44cbbd3..2b75fe294a31fd37c56fabd487f8e9df5b705d0f 100644 (file)
@@ -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.
index 4300a2bdff179116703f516b6470ecd1a61e55d5..f80163ef3eb6999cacbf82f36846120991e6055b 100644 (file)
@@ -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 <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 49ec8de9c528de9280b0e73bad8e299646d8b3c7..8881c4f49eb66c8a061ed62a554f480595c5b10e 100644 (file)
@@ -182,7 +182,8 @@ public:
     Mesa,
     SUSE,
     OpenEmbedded,
-    LastVendorType = OpenEmbedded
+    Tizen,
+    LastVendorType = Tizen
   };
   enum OSType {
     UnknownOS,
index 0bbe8a3cedfd782780adee76325525027365657f..ae664fbaeb38837b34d0abc2d617f2078cd9af24 100644 (file)
@@ -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);
 }