mcap/check_targets.jai
Musa Mahmood 120eba1e23 [0.1.18] Ctrl-F puts the keyboard in the search box
The search box takes the keyboard on the next frame, its window brought to the front and its text
selected, so typing replaces the query. It is focus_search in [hotkeys] (Cmd-F on macOS), and it
acts while typing in another field, such as the Import window's. View mode has no search box.
2026-10-14 18:50:34 +01:00

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.18";
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";