Kinda working build on windows, needs more work

This commit is contained in:
sergeypdev 2025-05-24 13:44:23 +04:00
parent 1b3d2641e2
commit 1e91121244
6 changed files with 50 additions and 24 deletions

View File

@ -73,8 +73,8 @@ build_deps :: proc(opts: Options) {
} }
build_cmd := []string{"cmake", "--build", "build", "--config", "MinSizeRel"} build_cmd := []string{"cmake", "--build", "build", "--config", "MinSizeRel"}
if opts.variant == .Web { if opts.variant == .Web {
run_cmd(temp_concat({"emcmake"}, prepare_cmd), cwd) run_cmd(temp_concat({"emcmake.bat"}, prepare_cmd), cwd)
run_cmd(temp_concat({"emmake"}, build_cmd), cwd) run_cmd(temp_concat({"emmake.bat"}, build_cmd), cwd)
} else { } else {
run_cmd(prepare_cmd, cwd) run_cmd(prepare_cmd, cwd)
run_cmd(build_cmd, cwd) run_cmd(build_cmd, cwd)
@ -88,7 +88,7 @@ build_deps :: proc(opts: Options) {
cwd := "./libs/tracy" cwd := "./libs/tracy"
when ODIN_OS == .Windows { when ODIN_OS == .Windows {
TRACY_NAME_SHARED :: "tracydll.lib" TRACY_NAME_SHARED :: "tracy.dll"
TRACY_NAME_STATIC :: "tracy.lib" TRACY_NAME_STATIC :: "tracy.lib"
} else when ODIN_OS == .Linux { } else when ODIN_OS == .Linux {
TRACY_NAME_SHARED :: "tracy.so" TRACY_NAME_SHARED :: "tracy.so"
@ -116,7 +116,8 @@ build_deps :: proc(opts: Options) {
"-DTRACY_ENABLE", "-DTRACY_ENABLE",
"-O2", "-O2",
"vendor/tracy/public/TracyClient.cpp", "vendor/tracy/public/TracyClient.cpp",
"-fPIC", "-lws2_32",
"-ldbghelp"
}, },
shared ? {"-shared", "-o", TRACY_NAME_SHARED} : {"-c", "-o", "tracy.o"}, shared ? {"-shared", "-o", TRACY_NAME_SHARED} : {"-c", "-o", "tracy.o"},
}, },
@ -147,7 +148,7 @@ setup_emsdk_env :: proc() {
PATH_ENV_DELIMITER :: ":" PATH_ENV_DELIMITER :: ":"
} }
PATHS :: [2]string{"./libs/emsdk/upstream/bin", "./libs/emsdk/upstream/emscripten"} PATHS :: [3]string{"./libs/emsdk/upstream/bin", "./libs/emsdk/upstream/emscripten", "./libs/emsdk/ninja/git-release_64bit/bin"}
paths: [len(PATHS)]string paths: [len(PATHS)]string
for path, i in PATHS { for path, i in PATHS {
@ -157,8 +158,8 @@ setup_emsdk_env :: proc() {
set_env( set_env(
"PATH", "PATH",
strings.join( strings.join(
{paths[0], paths[1], os.get_env("PATH", context.temp_allocator)}, {paths[0], paths[1], paths[2], os.get_env("PATH", context.temp_allocator)},
":", PATH_ENV_DELIMITER,
context.temp_allocator, context.temp_allocator,
), ),
) )
@ -218,7 +219,7 @@ main :: proc() {
mkdir_all("./build/desktop") mkdir_all("./build/desktop")
cmd := slice.concatenate( cmd := slice.concatenate(
[][]string { [][]string {
[]string{"odin", "build", "main_release", "-out:./build/desktop/game"}, []string{"odin", "build", "main_release", "-out:./build/desktop/game.exe"},
tracy_flag, tracy_flag,
debug_flag, debug_flag,
optimize_flag, optimize_flag,
@ -252,7 +253,7 @@ main :: proc() {
run_cmd( run_cmd(
{ {
"emcc", "emcc.bat",
"-g", "-g",
"-o", "-o",
"build/web/index.html", "build/web/index.html",

View File

@ -58,6 +58,7 @@ run_cmd_internal :: proc(
state: os.Process_State state: os.Process_State
b := strings.builder_make(context.temp_allocator) b := strings.builder_make(context.temp_allocator)
defer strings.builder_destroy(&b)
for { for {
has_data, pipe_err := os.pipe_has_data(r) has_data, pipe_err := os.pipe_has_data(r)
@ -69,6 +70,7 @@ run_cmd_internal :: proc(
buf: [1024]u8 buf: [1024]u8
if has_data { if has_data {
n = handle_error1(os.read(r, buf[:])) n = handle_error1(os.read(r, buf[:]))
strings.write_bytes(&b, buf[0:n])
handle_error1(os.write(os.stderr, buf[0:n])) handle_error1(os.write(os.stderr, buf[0:n]))
} }
@ -78,7 +80,7 @@ run_cmd_internal :: proc(
wait_for_kill := false wait_for_kill := false
if pipe_err == .Broken_Pipe { if pipe_err == .Broken_Pipe {
handle_error(os.process_kill(process)) _ = os.process_kill(process)
wait_for_kill = true wait_for_kill = true
} }
wait_err: os.Error wait_err: os.Error
@ -88,6 +90,8 @@ run_cmd_internal :: proc(
} }
} }
result = strings.to_string(b)
if !state.success { if !state.success {
return "", .Crash return "", .Crash
} }

View File

@ -440,20 +440,23 @@ get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_C
skip_whitespase(&ctx) skip_whitespase(&ctx)
switch ctx.bytes[ctx.it] { switch ctx.bytes[ctx.it] {
case 'v': case 'v':
log.debugf("v line: %v", ctx.line)
// vertex // vertex
advance(&ctx) or_break advance(&ctx) or_break
log.debugf("after advance %v", ctx.bytes[ctx.it])
vertex: rl.Vector3 vertex: rl.Vector3
coord_idx := 0 coord_idx := 0
for ctx.bytes[ctx.it] != '\n' { for ctx.bytes[ctx.it] != '\n' && ctx.bytes[ctx.it] != '\r' {
skip_whitespase(&ctx) skip_whitespase(&ctx)
s := string(ctx.bytes[ctx.it:]) s := string(ctx.bytes[ctx.it:])
coord_val, nr, ok := strconv.parse_f32_prefix(s) coord_val, nr, ok := strconv.parse_f32_prefix(s)
if !ok { if !ok {
log.errorf("failed to parse float at line %d", ctx.line) log.errorf("failed to parse float %v %s at line %d", coord_idx, ctx.bytes[ctx.it:][:12], ctx.line)
return return
} }
log.debugf("parsed float %v %v from %s", coord_idx, coord_val, ctx.bytes[ctx.it:][:nr])
advance(&ctx, nr) or_break advance(&ctx, nr) or_break
vertex[coord_idx] = coord_val vertex[coord_idx] = coord_val
@ -463,6 +466,9 @@ get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_C
min_pos = lg.min(vertex, min_pos) min_pos = lg.min(vertex, min_pos)
max_pos = lg.max(vertex, max_pos) max_pos = lg.max(vertex, max_pos)
if ctx.bytes[ctx.it] == '\r' {
advance(&ctx)
}
advance(&ctx) advance(&ctx)
ctx.line += 1 ctx.line += 1
case 'f': case 'f':
@ -473,7 +479,7 @@ get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_C
indices_buf: [MAX_FACE_VERTS]u16 indices_buf: [MAX_FACE_VERTS]u16
index_count := 0 index_count := 0
for ctx.bytes[ctx.it] != '\n' { for ctx.bytes[ctx.it] != '\n' && ctx.bytes[ctx.it] != '\r' {
skip_whitespase(&ctx) skip_whitespase(&ctx)
index_f, nr, ok := strconv.parse_f32_prefix(string(ctx.bytes[ctx.it:])) index_f, nr, ok := strconv.parse_f32_prefix(string(ctx.bytes[ctx.it:]))
if !ok { if !ok {
@ -485,6 +491,9 @@ get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_C
indices_buf[index_count] = u16(index) indices_buf[index_count] = u16(index)
index_count += 1 index_count += 1
} }
if ctx.bytes[ctx.it] == '\r' {
advance(&ctx)
}
advance(&ctx) advance(&ctx)
ctx.line += 1 ctx.line += 1
@ -566,6 +575,8 @@ get_convex :: proc(assetman: ^Asset_Manager, path: cstring) -> (result: Loaded_C
} }
} }
log.debugf("num verts: %v", len(vertices))
center := (max_pos + min_pos) * 0.5 center := (max_pos + min_pos) * 0.5
extent := (max_pos - min_pos) * 0.5 extent := (max_pos - min_pos) * 0.5

View File

@ -32,13 +32,16 @@ destroy_spanpool :: proc(s: ^$T/Span_Pool($E)) {
is_handle_valid :: proc(s: ^$T/Span_Pool($E), handle: Handle) -> bool { is_handle_valid :: proc(s: ^$T/Span_Pool($E), handle: Handle) -> bool {
return( return(
handle.gen != 0 && handle.gen != 0 &&
int(handle.first) < len(s.elems) &&
int(handle.first + handle.len) <= len(s.elems) && int(handle.first + handle.len) <= len(s.elems) &&
s.generations[handle.first] == handle.gen \ s.generations[handle.first] == handle.gen \
) )
} }
resolve_slice :: proc(s: ^$T/Span_Pool($E), handle: Handle, loc := #caller_location) -> []E { resolve_slice :: proc(s: ^$T/Span_Pool($E), handle: Handle, loc := #caller_location) -> []E {
assert(is_handle_valid(s, handle), "invalid spanpool handle", loc) if !is_handle_valid(s, handle) {
return {}
}
return s.elems[handle.first:handle.first + handle.len] return s.elems[handle.first:handle.first + handle.len]
} }

View File

@ -4,7 +4,13 @@ import "core:c"
PHYSFS_SHARED :: #config(PHYSFS_SHARED, false) PHYSFS_SHARED :: #config(PHYSFS_SHARED, false)
when ODIN_OS == .Linux || ODIN_OS == .Darwin { when ODIN_OS == .Windows {
when PHYSFS_SHARED {
foreign import lib "build/MinSizeRel/physfs.lib"
} else {
foreign import lib {"build/MinSizeRel/physfs-static.lib", "system:Advapi32.lib"}
}
} else when ODIN_OS == .Linux || ODIN_OS == .Darwin {
when PHYSFS_SHARED { when PHYSFS_SHARED {
foreign import lib "libphysfs.so" foreign import lib "libphysfs.so"
} else { } else {

View File

@ -150,18 +150,19 @@ SecureFree :: #force_inline proc(
depth, depth,
true, true,
)} else {___tracy_emit_memory_free(ptr, true)}}} )} else {___tracy_emit_memory_free(ptr, true)}}}
@(disabled = !TRACY_ENABLE)
AllocN :: #force_inline proc( AllocN :: #force_inline proc(
ptr: rawptr, ptr: rawptr,
size: c.size_t, size: c.size_t,
name: cstring, name: cstring,
depth: i32 = TRACY_CALLSTACK, depth: i32 = TRACY_CALLSTACK,
) { ) {
when TRACY_ENABLE {
when TRACY_HAS_CALLSTACK { when TRACY_HAS_CALLSTACK {
when TRACY_ENABLE {
___tracy_emit_memory_alloc_callstack_named(ptr, size, depth, false, name) ___tracy_emit_memory_alloc_callstack_named(ptr, size, depth, false, name)
}
} else { } else {
__tracy_emit_memory_alloc_named(ptr, size, false, name) when TRACY_ENABLE {
___tracy_emit_memory_alloc_named(ptr, size, false, name)
} }
} }
} }