diff options
author | Partouf <partouf@gmail.com> | 2019-08-19 22:05:14 +0200 |
---|---|---|
committer | Partouf <partouf@gmail.com> | 2019-08-19 22:05:14 +0200 |
commit | b5e75ce8f4dda9ba682ca906040201245953401f (patch) | |
tree | 395c487a8cb337ec11a7dd418a3a4f26d3bce47a /lib/compilers/win32.js | |
parent | 8da9da165411f94ac7b4548ab622fa880ba67680 (diff) | |
download | compiler-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.js | 49 |
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'; |