untitled-roguelike/source/main_release/main_release.odin
2026-05-03 02:09:13 -07:00

72 lines
No EOL
1.7 KiB
Odin

/*
For making a release exe that does not use hot reload.
*/
package main_release
import "core:log"
import "core:os"
import "core:path/filepath"
import "core:mem"
import game ".."
_ :: mem
USE_TRACKING_ALLOCATOR :: #config(USE_TRACKING_ALLOCATOR, false)
main :: proc() {
// Set working dir to dir of executable.
exe_path := os.args[0]
exe_dir := filepath.dir(string(exe_path), context.temp_allocator)
os.set_working_directory(exe_dir)
mode := os.Permissions { .Read_User, .Write_User, .Read_Group, .Read_Other }
logh, logh_err := os.open("log.txt", {.Create, .Trunc, .Read, .Write}, mode)
if logh_err == os.ERROR_NONE {
os.stdout = logh
os.stderr = logh
}
logger_alloc := context.allocator
logger := logh_err == os.ERROR_NONE ? log.create_file_logger(logh, allocator = logger_alloc) : log.create_console_logger(allocator = logger_alloc)
context.logger = logger
when USE_TRACKING_ALLOCATOR {
default_allocator := context.allocator
tracking_allocator: mem.Tracking_Allocator
mem.tracking_allocator_init(&tracking_allocator, default_allocator)
context.allocator = mem.tracking_allocator(&tracking_allocator)
}
game.game_init_window()
game.game_init()
for game.game_should_run() {
game.game_update()
}
free_all(context.temp_allocator)
game.game_shutdown()
game.game_shutdown_window()
when USE_TRACKING_ALLOCATOR {
for _, value in tracking_allocator.allocation_map {
log.errorf("%v: Leaked %v bytes\n", value.location, value.size)
}
mem.tracking_allocator_destroy(&tracking_allocator)
}
if logh_err == os.ERROR_NONE {
log.destroy_file_logger(logger, logger_alloc)
}
}
// make game use good GPU on laptops etc
@(export)
NvOptimusEnablement: u32 = 1
@(export)
AmdPowerXpressRequestHighPerformance: i32 = 1