Files
cell/scripts/build.ce

64 lines
1.7 KiB
Plaintext

var fd = use('fd')
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 = fd.slurp(src_path)
}
fd.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)
fd.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 = fd.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 = fd.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()