[pkg-d-commits] [ldc] 61/74: Add first version of ld linker driver as ArgsBuilder specialization

Matthias Klumpp mak at moszumanska.debian.org
Thu Jul 13 20:54:19 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.3.0-beta2
in repository ldc.

commit ede23642efbf730c63688466c415cec39dffa5bb
Author: Martin <noone at nowhere.com>
Date:   Sat May 27 03:30:25 2017 +0200

    Add first version of ld linker driver as ArgsBuilder specialization
---
 driver/linker-gcc.cpp | 39 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 34 insertions(+), 5 deletions(-)

diff --git a/driver/linker-gcc.cpp b/driver/linker-gcc.cpp
index db0b648..f465740 100644
--- a/driver/linker-gcc.cpp
+++ b/driver/linker-gcc.cpp
@@ -35,14 +35,16 @@ class ArgsBuilder {
 public:
   std::vector<std::string> args;
 
+  virtual ~ArgsBuilder() = default;
+
   void build(llvm::StringRef outputPath,
              llvm::cl::boolOrDefault fullyStaticFlag);
 
 private:
-  void addSanitizers();
-  void addUserSwitches();
+  virtual void addSanitizers();
+  virtual void addUserSwitches();
   void addDefaultLibs();
-  void addArch();
+  virtual void addArch();
 
 #if LDC_LLVM_VER >= 309
   void addLTOGoldPluginFlags();
@@ -50,11 +52,11 @@ private:
   void addLTOLinkFlags();
 #endif
 
-  void addLdFlag(const llvm::Twine &flag) {
+  virtual void addLdFlag(const llvm::Twine &flag) {
     args.push_back(("-Wl," + flag).str());
   }
 
-  void addLdFlag(const llvm::Twine &flag1, const llvm::Twine &flag2) {
+  virtual void addLdFlag(const llvm::Twine &flag1, const llvm::Twine &flag2) {
     args.push_back(("-Wl," + flag1 + "," + flag2).str());
   }
 };
@@ -387,6 +389,33 @@ void ArgsBuilder::addArch() {
   }
 }
 
+//////////////////////////////////////////////////////////////////////////////
+// (Yet unused) specialization for plain ld.
+
+class LdArgsBuilder : public ArgsBuilder {
+  void addSanitizers() override {}
+
+  void addUserSwitches() override {
+    if (!opts::ccSwitches.empty()) {
+      warning(Loc(), "Ignoring -Xcc options");
+    }
+
+    args.insert(args.end(), opts::linkerSwitches.begin(),
+                opts::linkerSwitches.end());
+  }
+
+  void addArch() override {}
+
+  void addLdFlag(const llvm::Twine &flag) override {
+    args.push_back(flag.str());
+  }
+
+  void addLdFlag(const llvm::Twine &flag1, const llvm::Twine &flag2) override {
+    args.push_back(flag1.str());
+    args.push_back(flag2.str());
+  }
+};
+
 } // anonymous namespace
 
 //////////////////////////////////////////////////////////////////////////////

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list