hotkeys_missing_lines writes the shipped default of an action the file does not mention, but that save records the hash of what it wrote, so the file was not reloaded and the action stayed unbound until the file next changed. The bindings installed at startup and on reload now include those defaults (hotkeys_with_missing_defaults), as in Ex4 1.47.2; a file of an older version still gets "none". A logger test covers it.
72 lines
2.6 KiB
Plaintext
72 lines
2.6 KiB
Plaintext
// Type-checks src/App.jai for another OS without producing or linking a binary, to catch errors
|
|
// in code your machine does not build:
|
|
//
|
|
// jai check_targets.jai - linux (from any OS)
|
|
// jai check_targets.jai - macos (from a Mac only: the Objective_C module runs code at compile time)
|
|
//
|
|
// The constants below stand in for the ones first.jai generates; keep their names in step.
|
|
#run,stallable {
|
|
set_build_options_dc(.{do_output = false});
|
|
args := get_build_options().compile_time_command_line;
|
|
target := Operating_System_Tag.LINUX;
|
|
cpu := CPU_Tag.X64;
|
|
if array_find(args, "macos") { target = .MACOS; cpu = .ARM64; }
|
|
|
|
options := get_build_options();
|
|
options.os_target = target;
|
|
options.cpu_target = cpu;
|
|
options.output_type = .NO_OUTPUT;
|
|
options.backend = .LLVM;
|
|
options.output_executable_name = "check";
|
|
options.output_path = ".build";
|
|
|
|
// rpmalloc (modules/Default_Allocator) also runs at compile time, with the target's OS layer,
|
|
// which crashes on another OS. A check for another OS uses Jai's own allocator instead, through a
|
|
// module of the same name ahead of modules/ (with the thread_idle the app calls, doing nothing).
|
|
if target != OS {
|
|
jai_modules := trim_right(options.import_path[options.import_path.count - 1], "/");
|
|
shim := tprint("%/.build/check_modules", get_working_directory());
|
|
make_directory_if_it_does_not_exist(tprint("%/Default_Allocator", shim), recursive = true);
|
|
write_entire_file(tprint("%/Default_Allocator/module.jai", shim), tprint(#string SHIM
|
|
// Written by check_targets.jai: Jai's own allocator, for type-checking another OS.
|
|
#load "%/Default_Allocator/module.jai";
|
|
thread_idle :: () {}
|
|
SHIM, jai_modules));
|
|
paths: [..] string;
|
|
array_add(*paths, shim);
|
|
array_add(*paths, ..options.import_path);
|
|
options.import_path = paths;
|
|
}
|
|
|
|
w := compiler_create_workspace("check");
|
|
set_build_options(options, w);
|
|
compiler_begin_intercept(w);
|
|
add_build_file("src/App.jai", w);
|
|
add_build_string(#string S
|
|
APP_NAME :: "mcap";
|
|
APP_FOLDER_NAME :: "mcap";
|
|
GIT_BRANCH :: "check";
|
|
GIT_HASH :: "-";
|
|
VERSION :: "0.1.19";
|
|
BUILD_DATE :: "-";
|
|
DEBUG :: true;
|
|
COMPILE_TESTS :: true;
|
|
COMPILE_ARGS :: "";
|
|
NO_CRASH_DIALOG :: false;
|
|
S, w);
|
|
while true {
|
|
message := compiler_wait_for_message();
|
|
if message.kind == .COMPLETE {
|
|
m := cast(*Message_Complete) message;
|
|
log("% check: %", target, m.error_code);
|
|
break;
|
|
}
|
|
}
|
|
compiler_end_intercept(w);
|
|
}
|
|
|
|
#import "Basic";
|
|
#import "Compiler";
|
|
#import "File";
|
|
#import "String";
|