forked from Kode/kincmake
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ExporterCodeBlocks.js
108 lines (103 loc) · 4.04 KB
/
ExporterCodeBlocks.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
"use strict";
const Exporter = require('./Exporter.js');
const Files = require('./Files.js');
const Paths = require('./Paths.js');
const GraphicsApi = require('./GraphicsApi.js');
const Options = require('./Options.js');
const Platform = require('./Platform.js');
const fs = require('fs');
class ExporterCodeBlocks extends Exporter {
constructor() {
super();
}
exportSolution(solution, from, to, platform) {
let project = solution.getProjects()[0];
this.writeFile(to.resolve(project.getName() + ".cbp"));
this.p("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
this.p("<CodeBlocks_project_file>");
this.p("<FileVersion major=\"1\" minor=\"6\" />", 1);
this.p("<Project>", 1);
this.p("<Option title=\"" + project.getName() + "\" />", 2);
this.p("<Option pch_mode=\"2\" />", 2);
this.p("<Option compiler=\"gcc\" />", 2);
this.p("<Build>", 2);
this.p("<Target title=\"Debug\">", 3);
this.p("<Option output=\"bin/Debug/" + project.getName() + "\" prefix_auto=\"1\" extension_auto=\"1\" />", 4);
if (project.getDebugDir().length > 0) this.p("<Option working_dir=\"" + from.resolve(Paths.get(project.getDebugDir())).toAbsolutePath().toString() + "\" />", 4);
this.p("<Option object_output=\"obj/Debug/\" />", 4);
this.p("<Option type=\"1\" />", 4);
this.p("<Option compiler=\"gcc\" />", 4);
this.p("<Compiler>", 4);
this.p("<Add option=\"-std=c++0x\" />", 5);
this.p("<Add option=\"-g\" />", 5);
this.p("</Compiler>", 4);
this.p("</Target>", 3);
this.p("<Target title=\"Release\">", 3);
this.p("<Option output=\"bin/Release/" + project.getName() + "\" prefix_auto=\"1\" extension_auto=\"1\" />", 4);
if (project.getDebugDir().length > 0) this.p("<Option working_dir=\"" + from.resolve(Paths.get(project.getDebugDir())).toAbsolutePath().toString() + "\" />", 4);
this.p("<Option object_output=\"obj/Release/\" />", 4);
this.p("<Option type=\"0\" />", 4);
this.p("<Option compiler=\"gcc\" />", 4);
this.p("<Compiler>", 4);
this.p("<Add option=\"-std=c++0x\" />", 5);
this.p("<Add option=\"-O2\" />", 5);
this.p("</Compiler>", 4);
this.p("<Linker>", 4);
this.p("<Add option=\"-s\" />", 5);
this.p("</Linker>", 4);
this.p("</Target>", 3);
this.p("</Build>", 2);
this.p("<Compiler>", 2);
this.p("<Add option=\"-std=c++0x\" />", 3);
this.p("<Add option=\"-Wall\" />", 3);
for (let def of project.getDefines()) {
this.p("<Add option=\"-D" + def.replaceAll("\"", "\\\"") + "\" />", 3);
}
for (let inc of project.getIncludeDirs()) {
this.p("<Add directory=\"" + from.resolve(Paths.get(inc)).toAbsolutePath().toString() + "\" />", 3);
}
this.p("</Compiler>", 2);
this.p("<Linker>", 2);
this.p("<Add option=\"-pthread\" />", 3);
this.p("<Add option=\"-static-libgcc\" />", 3);
this.p("<Add option=\"-static-libstdc++\" />", 3);
if (platform === Platform.Pi) {
this.p("<Add library=\"dl\" />", 3);
this.p("<Add library=\"GLESv2\" />", 3);
this.p("<Add library=\"EGL\" />", 3);
this.p("<Add library=\"bcm_host\" />", 3);
this.p("<Add library=\"asound\" />", 3);
this.p("<Add library=\"X11\" />", 3);
this.p("<Add directory=\"/opt/vc/lib\" />", 3);
}
else {
this.p("<Add library=\"asound\" />", 3);
this.p("<Add library=\"dl\" />", 3);
if (Options.graphicsApi === GraphicsApi.Vulkan) {
this.p("<Add library=\"vulkan\" />", 3);
this.p("<Add library=\"xcb\" />", 3);
}
else {
this.p("<Add library=\"GL\" />", 3);
this.p("<Add library=\"X11\" />", 3);
this.p("<Add library=\"Xinerama\" />", 3);
}
}
this.p("</Linker>", 2);
for (let file of project.getFiles()) {
if (file.endsWith(".c") || file.endsWith(".cpp")) {
this.p("<Unit filename=\"" + from.resolve(Paths.get(file)).toAbsolutePath().toString() + "\">", 2);
this.p("<Option compilerVar=\"CC\" />", 3);
this.p("</Unit>", 2);
}
}
this.p("<Extensions>", 2);
this.p("<code_completion />", 3);
this.p("<debugger />", 3);
this.p("</Extensions>", 2);
this.p("</Project>", 1);
this.p("</CodeBlocks_project_file>");
this.closeFile();
}
}
module.exports = ExporterCodeBlocks;