wip
This commit is contained in:
parent
6ae9cf6e1e
commit
ae7ff555d9
5 changed files with 250 additions and 31 deletions
|
|
@ -1,5 +1,7 @@
|
|||
const PADDING = 24;
|
||||
|
||||
pmake.compiler = pmake.compilers["GCC"];
|
||||
|
||||
for(var i = 1; i < ARGV.length; i++) {
|
||||
if(ARGV[i] == "--help") {
|
||||
var keys;
|
||||
|
|
@ -48,35 +50,104 @@ for(var i = 1; i < ARGV.length; i++) {
|
|||
}
|
||||
process.exit(0);
|
||||
} else if(ARGV[i].startsWith("--")) {
|
||||
console.log("Error: invalid option '" + ARGV[i].substr(2) + "'");
|
||||
process.exit(1);
|
||||
var args = ARGV[i].split("=");
|
||||
|
||||
args[0] = args[0].substr(2);
|
||||
|
||||
if(pmake.options[args[0]]) {
|
||||
var opts = pmake.options[args[0]].options;
|
||||
|
||||
if(opts) {
|
||||
if((typeof opts) == "function") opts = opts();
|
||||
}
|
||||
|
||||
if(opts && !args[1]) {
|
||||
console.log("Error: no value specified for option '" + args[0] + "'");
|
||||
process.exit(1);
|
||||
} else if(opts && !opts.includes(args[1])) {
|
||||
console.log("Error: invalid value '" + args[1] + "' for option '" + args[0] + "'");
|
||||
process.exit(1);
|
||||
} else if(opts) {
|
||||
pmake.options[args[0]].action(args[1]);
|
||||
} else {
|
||||
pmake.options[args[0]].action();
|
||||
}
|
||||
} else {
|
||||
console.log("Error: invalid option '" + args[0] + "'");
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(function() {
|
||||
function make(output) {
|
||||
const targets = pmake.resolveProjects(pmake.projects);
|
||||
|
||||
function target_map(x) {
|
||||
return x.target;
|
||||
}
|
||||
|
||||
var mk = new pmake.File(output, "w");
|
||||
|
||||
mk.write("# This file was auto-generated. Do not edit manually!\n");
|
||||
mk.write("\n");
|
||||
mk.write("SILENT = @\n");
|
||||
mk.write("RM = rm -f\n");
|
||||
mk.write("\n");
|
||||
mk.write(".PHONY: all clean\n");
|
||||
|
||||
if(output == "Makefile") {
|
||||
var targets = pmake.resolveProjects(pmake.projects);
|
||||
mk.write(".PHONY: " + targets.map(target_map).join(" ") + "\n");
|
||||
mk.write("\n");
|
||||
|
||||
mk.write("MAKEARGS$(.TARGET) = --no-print-directory");
|
||||
mk.write("\n");
|
||||
|
||||
mk.write("all: " + pmake.projects.map(target_map).join(" ") + "\n");
|
||||
mk.write("\n");
|
||||
|
||||
for(var i = 0; i < targets.length; i++) {
|
||||
mk.write(targets[i].target + ":\n");
|
||||
mk.write(" @$(MAKE) -f " + targets[i].target + ".make\n");
|
||||
mk.write(targets[i].target + ": " + pmake.resolveProjects(targets[i].libraries).map(target_map).join(" ") + "\n");
|
||||
mk.write(" @$(MAKE) $(MAKEARGS) -f " + targets[i].target + ".make\n");
|
||||
mk.write("\n");
|
||||
}
|
||||
|
||||
mk.write("clean:\n");
|
||||
for(var i = 0; i < targets.length; i++) {
|
||||
mk.write(" @$(MAKE) $(MAKEARGS) -f " + targets[i].target + ".make clean\n");
|
||||
}
|
||||
} else {
|
||||
function target_filter(x) {
|
||||
return x.target == output.replace(/\.make$/, "");
|
||||
}
|
||||
|
||||
const self = targets.filter(target_filter)[0];
|
||||
const objs = self.sources.map(pmake.compiler.output);
|
||||
|
||||
mk.write("\n");
|
||||
|
||||
mk.write("all: " + pmake.compiler.output(self) + "\n");
|
||||
mk.write("\n");
|
||||
|
||||
mk.write(pmake.compiler.output(self) + ": " + objs.join(" ") + "\n");
|
||||
mk.write(" " + pmake.compiler.link(self, objs) + "\n");
|
||||
mk.write("\n");
|
||||
|
||||
for(var i = 0; i < objs.length; i++) {
|
||||
mk.write(objs[i] + ": " + self.sources[i] + "\n");
|
||||
mk.write(" " + pmake.compiler.compile(self, objs[i], self.sources[i]) + "\n");
|
||||
mk.write("\n");
|
||||
}
|
||||
|
||||
mk.write("clean: \n");
|
||||
mk.write(" $(SILENT)$(RM) " + pmake.compiler.output(self) + " *.o *.exe *.a *.lib *.so *.dll\n");
|
||||
}
|
||||
|
||||
mk.close();
|
||||
}
|
||||
|
||||
make("Makefile");
|
||||
var targets = pmake.resolveProjects(pmake.projects);
|
||||
const targets = pmake.resolveProjects(pmake.projects);
|
||||
for(var i = 0; i < targets.length; i++) {
|
||||
make(targets[i].target + ".make");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue