"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CMakeExporter = void 0; const path = require("path"); const Exporter_1 = require("kmake/Exporters/Exporter"); class CMakeExporter extends Exporter_1.Exporter { constructor(options) { super(options); } async exportSolution(project, from, to, platform, vrApi, options) { let name = project.getSafeName(); this.writeFile(path.resolve(to, name, 'CMakeLists.txt')); let cmakeVersion = '3.10'; switch (project.cppStd) { case 'gnu++03': case 'c++03': case 'gnu++11': case 'c++11': case 'gnu++14': case 'c++14': case 'gnu++17': case 'c++17': break; case 'gnu++2a': case 'c++2a': case 'gnu++20': case 'c++20': cmakeVersion = '3.12'; break; case 'gnu++2b': case 'c++2b': case 'gnu++23': case 'c++23': cmakeVersion = '3.20'; break; default: break; } switch (project.cStd) { case 'gnu9x': case 'gnu99': case 'c9x': case 'c99': case 'gnu1x': case 'gnu11': case 'c1x': case 'c11': break; case 'gnu18': case 'gnu17': case 'c18': case 'c17': case 'gnu2x': case 'c2x': cmakeVersion = '3.21'; break; default: break; } this.p('cmake_minimum_required(VERSION ' + cmakeVersion + ')'); this.p('project(' + name + ')'); switch (project.cppStd) { case 'gnu++03': case 'c++03': this.p('set(CMAKE_CXX_STANDARD 03)'); break; case 'gnu++11': case 'c++11': this.p('set(CMAKE_CXX_STANDARD 11)'); break; case 'gnu++14': case 'c++14': this.p('set(CMAKE_CXX_STANDARD 14)'); break; case 'gnu++17': case 'c++17': this.p('set(CMAKE_CXX_STANDARD 17)'); break; case 'gnu++2a': case 'c++2a': case 'gnu++20': case 'c++20': this.p('set(CMAKE_CXX_STANDARD 20)'); break; case 'gnu++2b': case 'c++2b': case 'gnu++23': case 'c++23': this.p('set(CMAKE_CXX_STANDARD 23)'); break; default: this.p('set(CMAKE_CXX_STANDARD 98)'); break; } switch (project.cStd) { case 'gnu9x': case 'gnu99': case 'c9x': case 'c99': this.p('set(CMAKE_C_STANDARD 99)'); break; case 'gnu1x': case 'gnu11': case 'c1x': case 'c11': this.p('set(CMAKE_C_STANDARD 11)'); break; case 'gnu18': case 'gnu17': case 'c18': case 'c17': this.p('set(CMAKE_C_STANDARD 17)'); break; case 'gnu2x': case 'c2x': this.p('set(CMAKE_C_STANDARD 23)'); break; default: this.p('set(CMAKE_C_STANDARD 99)'); break; } this.p('set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -static-libgcc -static-libstdc++")'); let debugDefines = ''; for (const def of project.getDefines()) { if (!def.config || def.config.toLowerCase() === 'debug') { debugDefines += ' -D' + def.value; } } this.p('set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}' + debugDefines + '")'); this.p('set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}' + debugDefines + '")'); let releaseDefines = ''; for (const def of project.getDefines()) { if (!def.config || def.config.toLowerCase() === 'release') { releaseDefines += ' -D' + def.value; } } releaseDefines += ' -DNDEBUG'; this.p('set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}' + releaseDefines + '")'); this.p('set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}' + releaseDefines + '")'); let includes = ''; for (let inc of project.getIncludeDirs()) { includes += ' "' + path.resolve(inc).replace(/\\/g, '/') + '"\n'; } this.p('include_directories(\n' + includes + ')'); let files = ''; for (let file of project.getFiles()) { if (file.file.endsWith('.c') || file.file.endsWith('.cc') || file.file.endsWith('.cpp') || file.file.endsWith('.h')) { if (file.options && file.options.nocompile) { continue; } files += ' "' + path.resolve(file.file).replace(/\\/g, '/') + '"\n'; } } this.p('set(SOURCE_FILES\n' + files + ')'); this.p('add_executable(' + name + ' ${SOURCE_FILES})'); let libraries = ''; for (let lib of project.getLibs()) { libraries += ' ' + lib + '\n'; } this.p('target_link_libraries(' + name + '\n' + libraries + ')'); this.closeFile(); } } exports.CMakeExporter = CMakeExporter; //# sourceMappingURL=CMakeExporter.js.map