aboutsummaryrefslogtreecommitdiff
path: root/lib/compilers/win32.js
diff options
context:
space:
mode:
authorPartouf <partouf@gmail.com>2019-08-19 22:05:14 +0200
committerPartouf <partouf@gmail.com>2019-08-19 22:05:14 +0200
commitb5e75ce8f4dda9ba682ca906040201245953401f (patch)
tree395c487a8cb337ec11a7dd418a3a4f26d3bce47a /lib/compilers/win32.js
parent8da9da165411f94ac7b4548ab622fa880ba67680 (diff)
downloadcompiler-explorer-b5e75ce8f4dda9ba682ca906040201245953401f.tar.gz
compiler-explorer-b5e75ce8f4dda9ba682ca906040201245953401f.zip
linking for VS (static)
Diffstat (limited to 'lib/compilers/win32.js')
-rw-r--r--lib/compilers/win32.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/compilers/win32.js b/lib/compilers/win32.js
index 7651d2ebb..c94989f0e 100644
--- a/lib/compilers/win32.js
+++ b/lib/compilers/win32.js
@@ -27,6 +27,7 @@
const BaseCompiler = require('../base-compiler'),
temp = require('temp'),
path = require('path'),
+ _ = require('underscore'),
PELabelReconstructor = require("../pe32-support").labelReconstructor;
class Win32Compiler extends BaseCompiler {
@@ -63,6 +64,54 @@ class Win32Compiler extends BaseCompiler {
});
}
+ getSharedLibraryPathsAsArguments(libraries) {
+ const libPathFlag = this.compiler.libpathFlag || "/LIBPATH:";
+
+ return this.getSharedLibraryPaths(libraries).map(path => libPathFlag + path);
+ }
+
+ getSharedLibraryLinks(libraries) {
+ return _.flatten(_.map(libraries, (selectedLib) => {
+ const foundVersion = this.findLibVersion(selectedLib);
+ if (!foundVersion) return false;
+
+ return _.map(foundVersion.liblink, (lib) => {
+ if (lib) {
+ return '"' + lib + '.lib"';
+ } else {
+ return false;
+ }
+ });
+ }));
+ }
+
+ prepareArguments(userOptions, filters, backendOptions, inputFilename, outputFilename, libraries) {
+ let options = this.optionsForFilter(filters, outputFilename, userOptions);
+ backendOptions = backendOptions || {};
+
+ if (this.compiler.options) {
+ options = options.concat(this.compiler.options.split(" "));
+ }
+
+ if (this.compiler.supportsOptOutput && backendOptions.produceOptInfo) {
+ options = options.concat(this.compiler.optArg);
+ }
+
+ const libIncludes = this.getIncludeArguments(libraries);
+ let libLinks = [];
+ let libPaths = [];
+ let preLink = [];
+
+ if (filters.binary) {
+ preLink = ["/link"];
+ libLinks = this.getSharedLibraryLinks(libraries);
+ libPaths = this.getSharedLibraryPathsAsArguments(libraries);
+ }
+
+ userOptions = this.filterUserOptions(userOptions) || [];
+ return options.concat(libIncludes, userOptions, [this.filename(inputFilename)], preLink, libPaths, libLinks);
+ }
+
optionsForFilter(filters, outputFilename) {
if (filters.binary) {
const mapFilename = outputFilename + '.map';