66 lines
1.7 KiB
Plaintext
66 lines
1.7 KiB
Plaintext
// cell build – Compile all .cm and .ce files to bytecode
|
||
|
||
var io = use('cellfs')
|
||
var js = use('js')
|
||
var time = use('time')
|
||
var qop = use('qop')
|
||
|
||
var build_root = '.cell/build'
|
||
|
||
log.console("Building scripts...")
|
||
|
||
var now = time.number()
|
||
var compiled_count = 0
|
||
var error_count = 0
|
||
|
||
function compile_file(src_path, dest_path, is_core) {
|
||
try {
|
||
var src_content
|
||
if (is_core) {
|
||
return
|
||
} else {
|
||
src_content = io.slurp(src_path)
|
||
}
|
||
|
||
io.mkdir(dest_path.substring(0, dest_path.lastIndexOf('/')))
|
||
|
||
var mod_name = src_path
|
||
.replace(/\.(cm|ce)$/, '')
|
||
.replace(/[\/\-.]/g, '_')
|
||
|
||
var wrapped = '(function ' + mod_name + '(arg){' + src_content + '})'
|
||
|
||
var compiled = js.compile(src_path, wrapped)
|
||
var blob = js.compile_blob(compiled)
|
||
io.slurpwrite(dest_path, blob)
|
||
compiled_count++
|
||
// log.console("Compiled " + src_path + " -> " + dest_path)
|
||
} catch(e) {
|
||
log.console(`Failed to compile ${src_path}: ${e.message}`);
|
||
error_count++
|
||
}
|
||
}
|
||
|
||
// 1. Local files
|
||
var local_files = io.globfs(['**/*.cm', '**/*.ce', '!**/*.git', '!**/*.cell', '!**/subprojects'], '')
|
||
for (var file of local_files) {
|
||
var dest = build_root + '/local/' + file + '.o'
|
||
compile_file(file, dest, false)
|
||
}
|
||
|
||
// 2. Modules
|
||
var module_files = io.globfs(['**/*.cm', '**/*.ce'], '.cell/modules')
|
||
for (var file of module_files) {
|
||
// file is relative to .cell/modules, e.g. "prosperon/draw2d.cm"
|
||
var dest = build_root + '/modules/' + file + '.o'
|
||
var src = '.cell/modules/' + file
|
||
compile_file(src, dest, false)
|
||
}
|
||
|
||
log.console("Build complete: " + compiled_count + " files compiled in " + (time.number()-now) + " seconds")
|
||
if (error_count > 0) {
|
||
log.console(" " + error_count + " errors")
|
||
}
|
||
|
||
$_.stop()
|