aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/modules/cpp/gcc.js
diff options
context:
space:
mode:
Diffstat (limited to 'share/qbs/modules/cpp/gcc.js')
-rw-r--r--share/qbs/modules/cpp/gcc.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/share/qbs/modules/cpp/gcc.js b/share/qbs/modules/cpp/gcc.js
new file mode 100644
index 000000000..a4155ad9b
--- /dev/null
+++ b/share/qbs/modules/cpp/gcc.js
@@ -0,0 +1,113 @@
+function collectDynamicLinkPaths(config) {
+ var paths = []
+
+ var linkProducts = config.linkProducts || []
+ for (var libPath in linkProducts) {
+ var linkedConfig = linkProducts[libPath]
+ var fileTags = linkedConfig['fileTags']
+ if (fileTags.indexOf('dynamiclibrary') >= 0) {
+ paths.push(FileInfo.path(libPath))
+ paths = paths.concat(collectDynamicLinkPaths(linkedConfig))
+ }
+ }
+ return paths
+}
+
+function linkEnv(cmd) {
+ // ### setup LD_LIBRARY_PATH for ProductModule dynamiclibrary depends
+// var paths = []
+// for (var i in config.linkProducts) {
+// var linkedConfig = config.linkProducts[i]
+// var fileTags = linkedConfig['fileTags']
+// if (fileTags.indexOf('dynamiclibrary') >= 0) {
+// paths = paths.concat(collectDynamicLinkPaths(linkedConfig))
+// }
+// }
+
+// if (paths.length) {
+// var envdef = newEnvironmentDefinition("LD_LIBRARY_PATH")
+// envdef.pathNames = true
+// envdef.separator = ':'
+// envdef.prepend = paths
+// cmd.addEnvironmentDefinition(envdef)
+// }
+}
+
+function libs(libraryPaths, rpaths, dynamicLibraries, staticLibraries) {
+
+ var args = [];
+ if (rpaths && rpaths.length)
+ args.push('-Wl,-rpath,' + rpaths.join(':'));
+ for (var i in libraryPaths) {
+ args.push('-L' + libraryPaths[i]);
+ }
+ for (var i in staticLibraries) {
+ args.push(staticLibraries[i]);
+ }
+ for (var i in dynamicLibraries) {
+ if (FileInfo.isAbsolutePath(dynamicLibraries[i])) {
+ args.push(dynamicLibraries[i]);
+ } else {
+ args.push('-l' + dynamicLibraries[i]);
+ }
+ }
+ return args;
+}
+
+function macLibs(libraryPaths, rpaths, dynamicLibraries, staticLibraries, frameworks)
+{
+ var args = libs(libraryPaths, rpaths, dynamicLibraries, staticLibraries);
+ for (var i in libraryPaths) {
+ args.push('-F' + libraryPaths[i]);
+ }
+ for (var i in frameworks) {
+ args.push('-framework');
+ args.push(frameworks[i]);
+ }
+ return args;
+}
+
+function configFlags(config) {
+ var args = [];
+ // optimization:
+ if (config.module.debugInformation === 'on')
+ args.push('-g');
+ if (config.module.optimization === 'fast')
+ args.push('-O2');
+ if (config.module.optimization === 'small')
+ args.push('-Os');
+ // warnings:
+ if (config.module.warningLevel === 'none')
+ args.push('-w');
+ if (config.module.warningLevel === 'all') {
+ args.push('-Wall');
+ args.push('-W');
+ }
+ if (config.module.treatWarningsAsErrors)
+ args.push('-Werror');
+
+ return args;
+}
+
+function frameworkPaths(config) {
+ var args = [];
+ for (var i in config.frameworkPaths) {
+ args.push('-F' + config.frameworkPaths[i]);
+ }
+ return args;
+}
+
+function frameworks(config) {
+ var args = [];
+ for (var i in config.frameworks) {
+ args.push('-framework');
+ args.push(config.frameworks[i]
+ .replace(/.framework$/,''));
+ }
+ return args;
+}
+
+function describe(cmd, input, output)
+{
+ cmd.description += FileInfo.fileName(input);
+}