diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2021-08-19 12:14:30 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2021-08-20 19:22:04 +0000 |
commit | 8fa1649691f75185a5fc1e1d625051508f5b8d9a (patch) | |
tree | 64a91dc5c4ee24ecae67039b15fea7b185311058 | |
parent | 4d85d558597f9405b9c9d20446156cd63d5b09c2 (diff) |
Use common Cpp.collectLibraryDependencies() function
... for MSVC and all bare-metal toolchains.
We can use this common function because it has the same implementation.
The only addition is that we have separated the handling of static and
dynamic libraries that is related with their suffixes.
Change-Id: Id83cb0bc9c3aa08a2f32915851a8ac58d7865588
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r-- | share/qbs/modules/cpp/cpp.js | 21 | ||||
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 68 |
2 files changed, 13 insertions, 76 deletions
diff --git a/share/qbs/modules/cpp/cpp.js b/share/qbs/modules/cpp/cpp.js index 9563a5c84..af9c7df66 100644 --- a/share/qbs/modules/cpp/cpp.js +++ b/share/qbs/modules/cpp/cpp.js @@ -214,15 +214,18 @@ function collectLibraryDependencies(product) { function sanitizedModuleListProperty(obj, moduleName, propertyName) { return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName)); } - var externalLibs = [].concat( - sanitizedModuleListProperty(obj, "cpp", "staticLibraries"), - sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries")); - var libSuffix = obj.moduleProperty("cpp", "staticLibrarySuffix"); - externalLibs.forEach(function(libName) { - if (!libName.endsWith(libSuffix) && !libName.startsWith('@')) - libName += libSuffix; - addFilePath(libName); - }); + function handleExternalLibraries(tag, suffix) { + var externalLibs = sanitizedModuleListProperty(obj, "cpp", tag) || []; + externalLibs.forEach(function(libName) { + if (!libName.endsWith(suffix) && !libName.startsWith('@')) + libName += suffix; + addFilePath(libName, false); + }); + } + handleExternalLibraries("staticLibraries", + obj.moduleProperty("cpp", "staticLibrarySuffix")); + handleExternalLibraries("dynamicLibraries", + obj.moduleProperty("cpp", "dynamicLibraryImportSuffix")); } function traverse(dep) { diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index 1ebe5173b..46c8aa6ec 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -319,72 +319,6 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli return [cmd]; } -function collectLibraryDependencies(product) { - var seen = {}; - var result = []; - - function addFilePath(filePath, wholeArchive, productName) { - result.push({ filePath: filePath, wholeArchive: wholeArchive, productName: productName }); - } - - function addArtifactFilePaths(dep, artifacts) { - if (!artifacts) - return; - var artifactFilePaths = artifacts.map(function(a) { return a.filePath; }); - var wholeArchive = dep.parameters.cpp && dep.parameters.cpp.linkWholeArchive; - var artifactsAreImportLibs = artifacts.length > 0 - && artifacts[0].fileTags.contains("dynamiclibrary_import"); - for (var i = 0; i < artifactFilePaths.length; ++i) { - addFilePath(artifactFilePaths[i], wholeArchive, - artifactsAreImportLibs ? dep.name : undefined); - } - } - - function addExternalLibs(obj) { - if (!obj.cpp) - return; - function ensureArray(a) { - return (a instanceof Array) ? a : []; - } - function sanitizedModuleListProperty(obj, moduleName, propertyName) { - return ensureArray(ModUtils.sanitizedModuleProperty(obj, moduleName, propertyName)); - } - var externalLibs = [].concat( - sanitizedModuleListProperty(obj, "cpp", "staticLibraries"), - sanitizedModuleListProperty(obj, "cpp", "dynamicLibraries")); - externalLibs.forEach(function (libName) { - if (!libName.match(/\.lib$/i) && !libName.startsWith('@')) - libName += ".lib"; - addFilePath(libName, false); - }); - } - - function traverse(dep) { - if (seen.hasOwnProperty(dep.name)) - return; - - if (dep.parameters.cpp && dep.parameters.cpp.link === false) - return; - - var staticLibraryArtifacts = dep.artifacts["staticlibrary"]; - var dynamicLibraryArtifacts = staticLibraryArtifacts - ? null : dep.artifacts["dynamiclibrary_import"]; - if (staticLibraryArtifacts) { - seen[dep.name] = true; - dep.dependencies.forEach(traverse); - addArtifactFilePaths(dep, staticLibraryArtifacts); - addExternalLibs(dep); - } else if (dynamicLibraryArtifacts) { - seen[dep.name] = true; - addArtifactFilePaths(dep, dynamicLibraryArtifacts); - } - } - - product.dependencies.forEach(traverse); - addExternalLibs(product); - return result; -} - function linkerSupportsWholeArchive(product) { return Utilities.versionCompare(product.cpp.compilerVersion, "19.0.24215.1") >= 0 @@ -524,7 +458,7 @@ function prepareLinker(project, product, inputs, outputs, input, output) { var wholeArchiveSupported = linkerSupportsWholeArchive(product); var wholeArchiveRequested = false; - var libDeps = collectLibraryDependencies(product); + var libDeps = Cpp.collectLibraryDependencies(product); var prevLib; for (i = 0; i < libDeps.length; ++i) { var dep = libDeps[i]; |