made a lot of libraries link dynamically- should make rebuilding objects so much faster

This commit is contained in:
Peter Li 2025-05-20 23:54:07 -07:00
parent 72e7ec7551
commit cddf5b0cc2
15 changed files with 136 additions and 65 deletions

View File

@ -182,10 +182,31 @@ pub fn addExtraModule(self: *BuildSystem, mod: *std.Build.Module, moduleName: []
mod.addImport(moduleName, dep.module(moduleName));
}
pub fn addSDL3Install(self: *BuildSystem, b: *std.Build, optimize: std.builtin.OptimizeMode) void {
pub fn addDependencyInstalls(self: *BuildSystem, b: *std.Build, optimize: std.builtin.OptimizeMode) void {
b.installArtifact(b.dependency("sdl3_lib", .{ .target = self.target, .optimize = optimize }).artifact("SDL3"));
// b.installArtifact(b.dependency("Backlog", .{ .target = self.target, .optimize = optimize }).artifact("backlog_c"));
//b.installArtifact(b.dependency("spng", .{ .target = self.target, .optimize = optimize }).artifact("spng_c"));
//b.installArtifact(b.dependency("zphysics", .{ .target = self.target, .optimize = optimize }).artifact("joltc"));
//b.installArtifact(b.dependency("ozz", .{ .target = self.target, .optimize = optimize }).artifact("ozz_cpp"));
for (cDependencyList) |d| {
b.installArtifact(b.dependency(
d.dep,
.{ .target = self.target, .optimize = optimize },
).artifact(d.artifact));
}
}
const cDependencyList: []const struct { dep: []const u8, artifact: []const u8 } = &.{
.{ .dep = "sdl3_lib", .artifact = "SDL3" },
.{ .dep = "spng", .artifact = "spng_c" },
.{ .dep = "lua", .artifact = "luac" },
.{ .dep = "miniaudio", .artifact = "miniaudio_c" },
.{ .dep = "zphysics", .artifact = "joltc" },
.{ .dep = "ozz", .artifact = "ozz_cpp" },
};
// ========= standalone build instance =======
// maybe it should be an engine launcher or something..
pub fn build(b: *std.Build) void {
@ -224,23 +245,4 @@ pub fn build(b: *std.Build) void {
mod.addImport("sdl3_fwd", lib);
}
}
{
const mod = b.addModule("BacklogExtern", .{
.target = target,
.optimize = optimize,
.root_source_file = b.path("engine/backlogExtern.zig"),
});
for (engineDepList) |depName| {
const dep = b.dependency(
depName,
.{
.target = target,
.optimize = optimize,
},
);
mod.addImport(depName, dep.module(depName));
}
}
}

View File

@ -12,7 +12,11 @@
.ui = .{ .path = "engine/ui" },
.rend = .{.path = "engine/rend" },
.SpirvReflect = .{ .path = "lib/spirv-reflect-zig" },
.ozz = .{ .path = "lib/ozz" },
.spng = .{ .path = "lib/spng" },
.zphysics = .{ .path = "lib/zphysics" },
.sdl3 = .{ .path = "lib/sdl3" },
.sdl3_lib = .{ .path = "lib/sdl3/SDL" },
},

View File

@ -1,14 +1,14 @@
const std = @import("std");
const dependencyList = [_][]const u8{
"spng",
"nfd",
"p2",
"tracy",
"zmath",
"packer",
"sdl3",
"lua",
"spng",
"nfd",
};
pub fn build(b: *std.Build) void {

3
lib/lua/build.zig vendored
View File

@ -11,12 +11,13 @@ pub fn build(b: *std.Build) void {
.link_libc = true,
});
const luac = b.addStaticLibrary(.{
const luac = b.addSharedLibrary(.{
.name = "luac",
.target = target,
.optimize = optimize,
.link_libc = true,
});
b.installArtifact(luac);
luac.addCSourceFiles(.{
.root = b.path("lua/src/"),

View File

@ -4,12 +4,14 @@ pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const miniaudio_c = b.addStaticLibrary(.{
const miniaudio_c = b.addSharedLibrary(.{
.name = "miniaudio_c",
.target = target,
.optimize = optimize,
.link_libc = true,
});
b.installArtifact(miniaudio_c);
miniaudio_c.addCSourceFile(.{ .file = b.path("src/miniaudio.cpp"), .flags = &.{"-fno-sanitize=all"} });
miniaudio_c.addIncludePath(b.path("include"));

47
lib/ozz/build.zig vendored
View File

@ -86,6 +86,44 @@ pub const GltfToOzz = struct {
const ozz_mod = dep.artifact("ozz_cpp");
exe.root_module.linkLibrary(ozz_mod);
exe.root_module.addIncludePath(b.path("ozz-animation/include"));
exe.root_module.addIncludePath(b.path("ozz-animation/src"));
exe.linkLibC();
if (ozz_build.graph.host.result.abi != .msvc)
exe.linkLibCpp();
exe.root_module.addCSourceFiles(.{
.files = &.{
src_dir ++ "options/options.cc",
src_dir ++ "geometry/runtime/skinning_job.cc",
src_dir ++ "base/containers/string_archive.cc",
src_dir ++ "base/io/archive.cc",
src_dir ++ "base/io/stream.cc",
src_dir ++ "base/log.cc",
src_dir ++ "base/platform.cc",
src_dir ++ "base/maths/box.cc",
src_dir ++ "base/maths/math_archive.cc",
src_dir ++ "base/maths/simd_math.cc",
src_dir ++ "base/maths/simd_math_archive.cc",
src_dir ++ "base/maths/soa_math_archive.cc",
src_dir ++ "base/memory/allocator.cc",
src_dir ++ "animation/runtime/animation.cc",
src_dir ++ "animation/runtime/animation_utils.cc",
src_dir ++ "animation/runtime/blending_job.cc",
src_dir ++ "animation/runtime/ik_aim_job.cc",
src_dir ++ "animation/runtime/ik_two_bone_job.cc",
src_dir ++ "animation/runtime/local_to_model_job.cc",
src_dir ++ "animation/runtime/sampling_job.cc",
src_dir ++ "animation/runtime/skeleton.cc",
src_dir ++ "animation/runtime/skeleton_utils.cc",
src_dir ++ "animation/runtime/track.cc",
src_dir ++ "animation/runtime/track_sampling_job.cc",
src_dir ++ "animation/runtime/track_triggering_job.cc",
"src/ozz_zig.cpp",
},
});
return .{
.b = b,
.ozz_build = ozz_build,
@ -103,7 +141,7 @@ pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
const target = b.standardTargetOptions(.{});
const ozz_cpp = b.addStaticLibrary(.{
const ozz_cpp = b.addSharedLibrary(.{
.name = "ozz_cpp",
.target = target,
.optimize = optimize,
@ -146,6 +184,7 @@ pub fn build(b: *std.Build) void {
src_dir ++ "animation/runtime/track.cc",
src_dir ++ "animation/runtime/track_sampling_job.cc",
src_dir ++ "animation/runtime/track_triggering_job.cc",
"src/ozz_zig.cpp",
},
});
@ -155,11 +194,7 @@ pub fn build(b: *std.Build) void {
ozz.addIncludePath(b.path("ozz-animation/include"));
ozz.addCSourceFiles(.{
.files = &.{
"src/ozz_zig.cpp",
},
});
ozz.linkLibrary(ozz_cpp);
const tests = b.addTest(.{
.name = "ozz-tests",

View File

@ -16,6 +16,12 @@
#include "ozz/base/io/archive_traits.h"
#include "ozz/base/io/stream.h"
#ifdef _WIN32
#define OZZ_CPP_API __declspec(dllexport)
#else
#define OZZ_CPP_API
#endif
extern "C" {
struct OpaqueSpan
@ -41,27 +47,27 @@ void testFunc()
archive >> skeleton;
}
void startupOzz()
OZZ_CPP_API void startupOzz()
{
}
void shutdownOzz()
OZZ_CPP_API void shutdownOzz()
{
}
bool SamplingJob_Run_c(void* context)
OZZ_CPP_API bool SamplingJob_Run_c(void* context)
{
ozz::animation::SamplingJob* self = static_cast<ozz::animation::SamplingJob*>(context);
return self->Run();
}
bool SamplingJob_Validate_c(void* context)
OZZ_CPP_API bool SamplingJob_Validate_c(void* context)
{
ozz::animation::SamplingJob* self = static_cast<ozz::animation::SamplingJob*>(context);
return self->Validate();
}
OpaqueSpan SkeletonGetJointsList_c(void* context)
OZZ_CPP_API OpaqueSpan SkeletonGetJointsList_c(void* context)
{
ozz::animation::Skeleton* self = static_cast<ozz::animation::Skeleton*>(context);
auto s = self->joint_names();
@ -69,25 +75,25 @@ OpaqueSpan SkeletonGetJointsList_c(void* context)
return *ptr;
}
int SkeletonNumJoints_c(void* context)
OZZ_CPP_API int SkeletonNumJoints_c(void* context)
{
ozz::animation::Skeleton* self = static_cast<ozz::animation::Skeleton*>(context);
return self->num_joints();
}
int SkeletonNumSoaJoints_c(void* context)
OZZ_CPP_API int SkeletonNumSoaJoints_c(void* context)
{
ozz::animation::Skeleton* self = static_cast<ozz::animation::Skeleton*>(context);
return self->num_soa_joints();
}
void* CreateSkeleton_c()
OZZ_CPP_API void* CreateSkeleton_c()
{
ozz::animation::Skeleton* rv = new ozz::animation::Skeleton();
return rv;
}
void LoadSkeletonFromBytes_c(void* skeleton, void* start, size_t size)
OZZ_CPP_API void LoadSkeletonFromBytes_c(void* skeleton, void* start, size_t size)
{
ozz::animation::Skeleton* sk = static_cast<ozz::animation::Skeleton*>(skeleton);
@ -106,7 +112,7 @@ void LoadSkeletonFromBytes_c(void* skeleton, void* start, size_t size)
archive >> *sk;
}
void LoadSkeletonFromFile_c(void* skeleton, const char* filename)
OZZ_CPP_API void LoadSkeletonFromFile_c(void* skeleton, const char* filename)
{
ozz::animation::Skeleton* sk = static_cast<ozz::animation::Skeleton*>(skeleton);
@ -131,7 +137,7 @@ void LoadSkeletonFromFile_c(void* skeleton, const char* filename)
}
OpaqueSpan SkeletonJointRestPoses_c (void* skeleton)
OZZ_CPP_API OpaqueSpan SkeletonJointRestPoses_c (void* skeleton)
{
ozz::animation::Skeleton* sk = static_cast<ozz::animation::Skeleton*>(skeleton);
auto x = sk->joint_rest_poses();
@ -140,33 +146,33 @@ OpaqueSpan SkeletonJointRestPoses_c (void* skeleton)
return *p;
}
void DestroySkeleton_c(void* skeleton)
OZZ_CPP_API void DestroySkeleton_c(void* skeleton)
{
ozz::animation::Skeleton* sk = static_cast<ozz::animation::Skeleton*>(skeleton);
delete sk;
}
float AnimationGetDuration_c(void* animation)
OZZ_CPP_API float AnimationGetDuration_c(void* animation)
{
ozz::animation::Animation* a = static_cast<ozz::animation::Animation*>(animation);
return a->duration();
}
void* CreateAnimation_c()
OZZ_CPP_API void* CreateAnimation_c()
{
ozz::animation::Animation* a = new ozz::animation::Animation();
return a;
}
void DestroyAnimation_c(void* anim)
OZZ_CPP_API void DestroyAnimation_c(void* anim)
{
ozz::animation::Animation* self = static_cast<ozz::animation::Animation*>(anim);
delete self;
}
void LoadAnimationFromBytes_c(void* anim, void* start, size_t size)
OZZ_CPP_API void LoadAnimationFromBytes_c(void* anim, void* start, size_t size)
{
ozz::animation::Animation* self = static_cast<ozz::animation::Animation*>(anim);
ozz::io::MemoryStream ms;
@ -184,7 +190,7 @@ void LoadAnimationFromBytes_c(void* anim, void* start, size_t size)
archive >> *self;
}
void LoadAnimationFromFile_c(void* anim, const char* filename)
OZZ_CPP_API void LoadAnimationFromFile_c(void* anim, const char* filename)
{
ozz::animation::Animation* self = static_cast<ozz::animation::Animation*>(anim);
@ -211,56 +217,56 @@ void LoadAnimationFromFile_c(void* anim, const char* filename)
// === SmplingJobContext ===
//pub extern fn CreateSamplingJobContextCount_c(c_int) callconv(.C) ?*anyopaque;
void* CreateSamplingJobContext_c()
OZZ_CPP_API void* CreateSamplingJobContext_c()
{
ozz::animation::SamplingJob::Context* rv = new ozz::animation::SamplingJob::Context();
return rv;
}
void* CreateSamplingJobContextCount_c(int count)
OZZ_CPP_API void* CreateSamplingJobContextCount_c(int count)
{
ozz::animation::SamplingJob::Context* rv = new ozz::animation::SamplingJob::Context(count);
return rv;
}
void DestroySamplingJobContext_c(void* context)
OZZ_CPP_API void DestroySamplingJobContext_c(void* context)
{
ozz::animation::SamplingJob::Context* self = static_cast<ozz::animation::SamplingJob::Context*>(context);
delete self;
}
void SamplingJobContext_Resize_c(void* context, int maxSize)
OZZ_CPP_API void SamplingJobContext_Resize_c(void* context, int maxSize)
{
ozz::animation::SamplingJob::Context* self = static_cast<ozz::animation::SamplingJob::Context*>(context);
self->Resize(maxSize);
}
void SamplingJobContext_Invalidate_c(void* context)
OZZ_CPP_API void SamplingJobContext_Invalidate_c(void* context)
{
ozz::animation::SamplingJob::Context* self = static_cast<ozz::animation::SamplingJob::Context*>(context);
self->Invalidate();
}
int SamplingJobContext_MaxSoaTracks_c(void* context)
OZZ_CPP_API int SamplingJobContext_MaxSoaTracks_c(void* context)
{
ozz::animation::SamplingJob::Context* self = static_cast<ozz::animation::SamplingJob::Context*>(context);
return self->max_soa_tracks();
}
int SamplingJobContext_MaxTracks_c(void* context)
OZZ_CPP_API int SamplingJobContext_MaxTracks_c(void* context)
{
ozz::animation::SamplingJob::Context* self = static_cast<ozz::animation::SamplingJob::Context*>(context);
return self->max_tracks();
}
bool LocalToModelJob_Run_c(void* context)
OZZ_CPP_API bool LocalToModelJob_Run_c(void* context)
{
ozz::animation::LocalToModelJob* self = static_cast<ozz::animation::LocalToModelJob*>(context);
@ -269,13 +275,13 @@ bool LocalToModelJob_Run_c(void* context)
// Blending job
bool BlendingJob_Validate_c(void* context)
OZZ_CPP_API bool BlendingJob_Validate_c(void* context)
{
ozz::animation::BlendingJob* self = static_cast<ozz::animation::BlendingJob*>(context);
return self->Validate();
}
bool BlendingJob_Run_c(void* context)
OZZ_CPP_API bool BlendingJob_Run_c(void* context)
{
ozz::animation::BlendingJob* self = static_cast<ozz::animation::BlendingJob*>(context);
return self->Run();

View File

@ -8,7 +8,7 @@ extern "C" void* createWatchPoint(
auto* watch = new filewatch::FileWatch<std::string>(
watchPath,
[cb, ctx] (const std::string& path, const filewatch::Event change_type) {
std::cout << event_to_string(change_type) << std::endl;
// std::cout << event_to_string(change_type) << std::endl;
cb(path.c_str(), ctx);
}
);

5
lib/spng/build.zig vendored
View File

@ -4,7 +4,7 @@ pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const spng_c = b.addStaticLibrary(
const spng_c = b.addSharedLibrary(
.{
.optimize = optimize,
.target = target,
@ -28,9 +28,10 @@ pub fn build(b: *std.Build) void {
mod.addIncludePath(b.path("spng"));
mod.addIncludePath(b.path("./"));
mod.linkLibrary(spng_c);
b.installArtifact(spng_c);
const test_step = b.step("test", "run unit tests for spng");
const tests = b.addTest(.{
.target = target,

View File

@ -42,7 +42,7 @@ pub fn build(b: *std.Build) void {
});
zjolt.addIncludePath(b.path("libs/JoltC"));
const joltc = b.addStaticLibrary(.{
const joltc = b.addSharedLibrary(.{
.name = "joltc",
.target = target,
.optimize = optimize,

View File

@ -1,3 +1,5 @@
#define __JPC_API_IMPL 1
#include "JoltPhysicsC.h"
#include <assert.h>

View File

@ -11,7 +11,17 @@
// Const
//
//--------------------------------------------------------------------------------------------------
#define JPC_API // TODO: Define this properly
#ifdef __JPC_API_IMPL
#ifdef _WIN32
#define JPC_API __declspec(dllexport) // TODO: Define this properly
#else
#define JPC_API
#endif _WIN32
#else
#define JPC_API
#endif
// Always turn on asserts in Debug mode
#if defined(_DEBUG) || defined(JPH_ENABLE_ASSERTS)

View File

@ -30,6 +30,8 @@ pub fn build(b: *std.Build) void {
.name = "externGame",
});
blbuild.addExtraModule(sampleGameExtern.root_module, "gameExtras");
sampleGameExtern.root_module.addImport("backlog", blbuild.nw_mod);
const installExtern = b.addInstallArtifact(sampleGameExtern, .{
@ -37,5 +39,5 @@ pub fn build(b: *std.Build) void {
});
b.getInstallStep().dependOn(&installExtern.step);
blbuild.addSDL3Install(b, .ReleaseFast); //.ReleaseFast);
blbuild.addDependencyInstalls(b, .ReleaseFast); //.ReleaseFast);
}

View File

@ -14,13 +14,20 @@
// engine libraries
.Backlog = .{ .path = "../" },
.sdl3_lib = .{ .path = "../lib/sdl3/SDL" },
.SpirvReflect = .{ .path = "../lib/spirv-reflect-zig" },
.gameExtras = .{.path = "../extras/gameExtras"},
.videoplayer = .{.path = "../extras/videoplayer"},
.doomplayer = .{.path = "../extras/doomplayer"},
.bsp = .{.path = "../extras/bsp"},
.zphysics = .{.path = "../lib/zphysics"},
.spng = .{ .path = "../lib/spng" },
.ozz = .{ .path = "../lib/ozz" },
.sdl3_lib = .{ .path = "../lib/sdl3/SDL" },
.miniaudio = .{ .path = "../lib/miniaudio" },
.lua = .{ .path = "../lib/lua" },
},
.paths = .{
"",

View File

@ -55,7 +55,6 @@ pub const ExternGameObject = struct {
pub fn tick(self: *@This(), dt: f64) void {
_ = dt;
_ = self;
const rctx = rend.context();
imgui.utils.structDebugWindow(rctx);