64 lines
1.7 KiB
Plaintext
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()
|