[pkg-d-commits] [ldc] 39/211: Windows: Support .res and .def files in command-line

Matthias Klumpp mak at moszumanska.debian.org
Sun Apr 23 22:36:07 UTC 2017


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

mak pushed a commit to annotated tag v1.1.0
in repository ldc.

commit 8f2665d7bb88e02d2f6fd722862f2aef5b860a4d
Author: Martin <noone at nowhere.com>
Date:   Thu Sep 22 11:38:34 2016 +0200

    Windows: Support .res and .def files in command-line
---
 ddmd/mars.d       |  2 +-
 driver/linker.cpp | 46 +++++++++++++++++++++++++++-------------------
 driver/main.cpp   |  2 +-
 3 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/ddmd/mars.d b/ddmd/mars.d
index 9b0e747..ee8ff12 100644
--- a/ddmd/mars.d
+++ b/ddmd/mars.d
@@ -1296,7 +1296,7 @@ extern (C++) int mars_mainBody(ref Strings files, ref Strings libmodules)
                 global.params.mapfile = files[i];
                 continue;
             }
-            static if (TARGET_WINDOS)
+            if (global.params.isWindows)
             {
                 if (FileName.equals(ext, "res"))
                 {
diff --git a/driver/linker.cpp b/driver/linker.cpp
index 14e6f30..0a0479d 100644
--- a/driver/linker.cpp
+++ b/driver/linker.cpp
@@ -67,7 +67,7 @@ static std::string getOutputName(bool const sharedLib) {
   const char *extension = nullptr;
   if (sharedLib) {
     extension = global.dll_ext;
-    if (!global.params.mscoff)
+    if (!global.params.targetTriple->isWindowsMSVCEnvironment())
       result = "lib" + result;
   } else if (global.params.targetTriple->isOSWindows()) {
     extension = "exe";
@@ -137,6 +137,20 @@ void insertBitcodeFiles(llvm::Module &M, llvm::LLVMContext &Ctx,
 
 //////////////////////////////////////////////////////////////////////////////
 
+static void appendObjectFiles(std::vector<std::string> &args) {
+  for (unsigned i = 0; i < global.params.objfiles->dim; i++)
+    args.push_back((*global.params.objfiles)[i]);
+
+  if (global.params.targetTriple->isWindowsMSVCEnvironment()) {
+    if (global.params.resfile)
+      args.push_back(global.params.resfile);
+    if (global.params.deffile)
+      args.push_back(std::string("/DEF:") + global.params.deffile);
+  }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+
 static std::string gExePath;
 
 static int linkObjToBinaryGcc(bool sharedLib, bool fullyStatic) {
@@ -148,9 +162,7 @@ static int linkObjToBinaryGcc(bool sharedLib, bool fullyStatic) {
   // build arguments
   std::vector<std::string> args;
 
-  // object files
-  for (unsigned i = 0; i < global.params.objfiles->dim; i++)
-    args.push_back((*global.params.objfiles)[i]);
+  appendObjectFiles(args);
 
   // Link with profile-rt library when generating an instrumented binary.
   // profile-rt uses Phobos (MD5 hashing) and therefore must be passed on the
@@ -541,7 +553,7 @@ int executeMsvcToolAndWait(const std::string &,
 
 //////////////////////////////////////////////////////////////////////////////
 
-static int linkObjToBinaryWin(bool sharedLib) {
+static int linkObjToBinaryMSVC(bool sharedLib) {
   Logger::println("*** Linking executable ***");
 
   std::string tool = "link.exe";
@@ -592,9 +604,7 @@ static int linkObjToBinaryWin(bool sharedLib) {
 
   args.push_back("/OUT:" + output);
 
-  // object files
-  for (unsigned i = 0; i < global.params.objfiles->dim; i++)
-    args.push_back((*global.params.objfiles)[i]);
+  appendObjectFiles(args);
 
   // Link with profile-rt library when generating an instrumented binary
   // profile-rt depends on Phobos (MD5 hashing).
@@ -661,7 +671,7 @@ static int linkObjToBinaryWin(bool sharedLib) {
 int linkObjToBinary() {
   if (global.params.targetTriple->isWindowsMSVCEnvironment()) {
     // TODO: Choose dynamic/static MSVCRT version based on staticFlag?
-    return linkObjToBinaryWin(global.params.dll);
+    return linkObjToBinaryMSVC(global.params.dll);
   }
 
   return linkObjToBinaryGcc(global.params.dll, staticFlag);
@@ -672,27 +682,27 @@ int linkObjToBinary() {
 int createStaticLibrary() {
   Logger::println("*** Creating static library ***");
 
-  const bool isTargetWindows =
+  const bool isTargetMSVC =
       global.params.targetTriple->isWindowsMSVCEnvironment();
 
   // find archiver
-  std::string tool(isTargetWindows ? "lib.exe" : getArchiver());
+  std::string tool(isTargetMSVC ? "lib.exe" : getArchiver());
 
   // build arguments
   std::vector<std::string> args;
 
   // ask ar to create a new library
-  if (!isTargetWindows) {
+  if (!isTargetMSVC) {
     args.push_back("rcs");
   }
 
   // ask lib to be quiet
-  if (isTargetWindows) {
+  if (isTargetMSVC) {
     args.push_back("/NOLOGO");
   }
 
   // enable Link-time Code Generation (aka. whole program optimization)
-  if (isTargetWindows && global.params.optimize) {
+  if (isTargetMSVC && global.params.optimize) {
     args.push_back("/LTCG");
   }
 
@@ -710,22 +720,20 @@ int createStaticLibrary() {
   if (global.params.objdir && !FileName::absolute(libName.c_str()))
     libName = FileName::combine(global.params.objdir, libName.c_str());
 
-  if (isTargetWindows) {
+  if (isTargetMSVC) {
     args.push_back("/OUT:" + libName);
   } else {
     args.push_back(libName);
   }
 
-  // object files
-  for (unsigned i = 0; i < global.params.objfiles->dim; i++)
-    args.push_back((*global.params.objfiles)[i]);
+  appendObjectFiles(args);
 
   // create path to the library
   CreateDirectoryOnDisk(libName);
 
   // try to call archiver
   int exitCode;
-  if (isTargetWindows) {
+  if (isTargetMSVC) {
     exitCode = executeMsvcToolAndWait(tool, args, global.params.verbose);
   } else {
     exitCode = executeToolAndWait(tool, args, global.params.verbose);
diff --git a/driver/main.cpp b/driver/main.cpp
index 595f8e5..6097e12 100644
--- a/driver/main.cpp
+++ b/driver/main.cpp
@@ -863,7 +863,7 @@ void registerPredefinedTargetVersions() {
     VersionCondition::addPredefinedGlobalIdent("Windows");
     VersionCondition::addPredefinedGlobalIdent(global.params.is64bit ? "Win64"
                                                                      : "Win32");
-    if (global.params.targetTriple->isKnownWindowsMSVCEnvironment()) {
+    if (global.params.targetTriple->isWindowsMSVCEnvironment()) {
       VersionCondition::addPredefinedGlobalIdent("CRuntime_Microsoft");
     }
     if (global.params.targetTriple->isWindowsGNUEnvironment()) {

-- 
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