forked from LeenkxTeam/Kmake
Add lib/kmake/Exporters/MacOSExporter.js
This commit is contained in:
75
lib/kmake/Exporters/MacOSExporter.js
Normal file
75
lib/kmake/Exporters/MacOSExporter.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.MacOSExporter = void 0;
|
||||||
|
const Exporter_1 = require("kmake/Exporters/Exporter");
|
||||||
|
const Options_1 = require("kmake/Options");
|
||||||
|
const Compiler_1 = require("kmake/Compiler");
|
||||||
|
const NinjaExporter_1 = require("kmake/Exporters/NinjaExporter");
|
||||||
|
const MakeExporter_1 = require("kmake/Exporters/MakeExporter");
|
||||||
|
const CLionExporter_1 = require("kmake/Exporters/CLionExporter");
|
||||||
|
const CompileCommandsExporter_1 = require("kmake/Exporters/CompileCommandsExporter");
|
||||||
|
class MacOSExporter extends Exporter_1.Exporter {
|
||||||
|
constructor(options) {
|
||||||
|
super(options);
|
||||||
|
let linkerFlags = '-pthread -framework Security';
|
||||||
|
if (options.lib) {
|
||||||
|
linkerFlags += ' -static';
|
||||||
|
}
|
||||||
|
let outputExtension = '';
|
||||||
|
if (options.lib) {
|
||||||
|
outputExtension = '.a';
|
||||||
|
}
|
||||||
|
else if (options.dynlib) {
|
||||||
|
outputExtension = '.dylib';
|
||||||
|
}
|
||||||
|
const macLibsLine = (project) => {
|
||||||
|
let libs = '';
|
||||||
|
for (let lib of project.getLibs()) {
|
||||||
|
if (['OpenGL', 'Cocoa', 'IOKit', 'AppKit', 'CoreAudio', 'CoreData', 'CoreMedia', 'CoreVideo', 'AVFoundation', 'Foundation', 'Metal', 'MetalKit'].includes(lib)) {
|
||||||
|
libs += ' -framework ' + lib;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
libs += ' -l' + lib;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return libs;
|
||||||
|
};
|
||||||
|
this.ninja = new NinjaExporter_1.NinjaExporter(options, this.getCCompiler(), this.getCPPCompiler(), '', '', linkerFlags, outputExtension);
|
||||||
|
this.make = new MakeExporter_1.MakeExporter(options, this.getCCompiler(), this.getCPPCompiler(), '', '', linkerFlags, outputExtension, macLibsLine);
|
||||||
|
this.clion = new CLionExporter_1.CLionExporter(options);
|
||||||
|
this.compileCommands = new CompileCommandsExporter_1.CompilerCommandsExporter(options);
|
||||||
|
}
|
||||||
|
async exportSolution(project, from, to, platform, vrApi, options) {
|
||||||
|
this.ninja.exportSolution(project, from, to, platform, vrApi, options);
|
||||||
|
this.make.exportSolution(project, from, to, platform, vrApi, options);
|
||||||
|
this.clion.exportSolution(project, from, to, platform, vrApi, options);
|
||||||
|
this.compileCommands.exportSolution(project, from, to, platform, vrApi, options);
|
||||||
|
}
|
||||||
|
getCCompiler() {
|
||||||
|
switch (Options_1.Options.compiler) {
|
||||||
|
case Compiler_1.Compiler.Default:
|
||||||
|
case Compiler_1.Compiler.Clang:
|
||||||
|
return 'clang';
|
||||||
|
case Compiler_1.Compiler.GCC:
|
||||||
|
return 'gcc';
|
||||||
|
case Compiler_1.Compiler.Custom:
|
||||||
|
return Options_1.Options.ccPath;
|
||||||
|
default:
|
||||||
|
throw 'Unsupported compiler ' + Options_1.Options.compiler;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getCPPCompiler() {
|
||||||
|
switch (Options_1.Options.compiler) {
|
||||||
|
case Compiler_1.Compiler.Default:
|
||||||
|
case Compiler_1.Compiler.Clang:
|
||||||
|
return 'clang++';
|
||||||
|
case Compiler_1.Compiler.GCC:
|
||||||
|
return 'g++';
|
||||||
|
case Compiler_1.Compiler.Custom:
|
||||||
|
return Options_1.Options.cxxPath;
|
||||||
|
default:
|
||||||
|
throw 'Unsupported compiler ' + Options_1.Options.compiler;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exports.MacOSExporter = MacOSExporter;
|
||||||
Reference in New Issue
Block a user