#import "modules/std.sx"; #import "modules/compiler.sx"; // --- #run build configuration --- // build_options() returns a BuildOptions struct at compile time. // Methods on it (add_link_flag, set_output_path) are compiler builtins // that configure the build without runtime cost. configure_build :: () { opts := build_options(); // These calls are intercepted by the compiler at compile time. // On a normal (non-wasm) target, inline if gates them off. inline if OS == .wasm { opts.set_output_path("sx-out/wasm/test.html"); opts.add_link_flag("-sUSE_SDL=3"); } } #run configure_build(); // --- inline if with compiler constants --- main :: () { // Verify #run configure_build() executed without error print("build config: ok\n"); // Verify compiler constants are available print("pointer size: {}\n", POINTER_SIZE); // Verify inline if with OS/ARCH works inline if OS == { case .macos: { print("os: macos\n"); } case .linux: { print("os: linux\n"); } case .windows: { print("os: windows\n"); } case .wasm: { print("os: wasm\n"); } else: { print("os: unknown\n"); } } // Verify POINTER_SIZE is usable in inline if inline if POINTER_SIZE == 8 { print("64-bit platform\n"); } inline if POINTER_SIZE == 4 { print("32-bit platform\n"); } }