forked from zig-gamedev/zig-gamedev
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.zig
267 lines (244 loc) · 16.2 KB
/
build.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
const std = @import("std");
pub const Options = struct {
use_double_precision: bool = false,
enable_asserts: bool = false,
enable_cross_platform_determinism: bool = true,
};
pub const Package = struct {
options: Options,
zphysics: *std.Build.Module,
zphysics_options: *std.Build.Module,
zphysics_c_cpp: *std.Build.CompileStep,
pub fn link(pkg: Package, exe: *std.Build.CompileStep) void {
exe.addIncludePath(thisDir() ++ "/libs/JoltC");
exe.linkLibrary(pkg.zphysics_c_cpp);
exe.addModule("zphysics", pkg.zphysics);
exe.addModule("zphysics_options", pkg.zphysics_options);
}
};
pub fn package(
b: *std.Build,
target: std.zig.CrossTarget,
optimize: std.builtin.Mode,
args: struct {
options: Options = .{},
},
) Package {
const step = b.addOptions();
step.addOption(bool, "use_double_precision", args.options.use_double_precision);
step.addOption(bool, "enable_asserts", args.options.enable_asserts);
step.addOption(bool, "enable_cross_platform_determinism", args.options.enable_cross_platform_determinism);
const zphysics_options = step.createModule();
const zphysics = b.createModule(.{
.source_file = .{ .path = thisDir() ++ "/src/zphysics.zig" },
.dependencies = &.{
.{ .name = "zphysics_options", .module = zphysics_options },
},
});
const zphysics_c_cpp = b.addStaticLibrary(.{
.name = "zphysics",
.target = target,
.optimize = optimize,
});
zphysics_c_cpp.addIncludePath(thisDir() ++ "/libs");
zphysics_c_cpp.addIncludePath(thisDir() ++ "/libs/JoltC");
zphysics_c_cpp.linkLibC();
zphysics_c_cpp.linkLibCpp();
const flags = &.{
"-std=c++17",
"-DJPH_COMPILER_MINGW",
if (args.options.enable_cross_platform_determinism) "-DJPH_CROSS_PLATFORM_DETERMINISTIC" else "",
if (args.options.use_double_precision) "-DJPH_DOUBLE_PRECISION" else "",
if (args.options.enable_asserts or zphysics_c_cpp.optimize == .Debug) "-DJPH_ENABLE_ASSERTS" else "",
"-fno-sanitize=undefined",
};
zphysics_c_cpp.addCSourceFile(thisDir() ++ "/libs/JoltC/JoltPhysicsC.cpp", flags);
zphysics_c_cpp.addCSourceFile(thisDir() ++ "/libs/JoltC/JoltPhysicsC_Extensions.cpp", flags);
const src_dir = thisDir() ++ "/libs/Jolt";
zphysics_c_cpp.addCSourceFile(src_dir ++ "/AABBTree/AABBTreeBuilder.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/Color.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/Factory.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/IssueReporting.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/JobSystemThreadPool.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/JobSystemWithBarrier.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/LinearCurve.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/Memory.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/Profiler.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/RTTI.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/Semaphore.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/StringTools.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Core/TickCounter.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Geometry/ConvexHullBuilder.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Geometry/ConvexHullBuilder2D.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Geometry/Indexify.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Geometry/OrientedBox.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Math/UVec4.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Math/Vec3.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStream.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamBinaryIn.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamBinaryOut.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamIn.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamOut.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamTextIn.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/ObjectStreamTextOut.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/SerializableObject.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/ObjectStream/TypeDeclarations.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/Body.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/BodyAccess.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/BodyCreationSettings.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/BodyInterface.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/BodyManager.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/MassProperties.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Body/MotionProperties.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Character/Character.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Character/CharacterBase.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Character/CharacterVirtual.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/BroadPhase/BroadPhase.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/BroadPhase/QuadTree.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CastConvexVsTriangles.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CastSphereVsTriangles.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CollideConvexVsTriangles.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CollideSphereVsTriangles.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CollisionDispatch.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/CollisionGroup.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/GroupFilter.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/GroupFilterTable.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/ManifoldBetweenTwoFaces.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/NarrowPhaseQuery.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/NarrowPhaseStats.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/PhysicsMaterial.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/PhysicsMaterialSimple.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/BoxShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/CapsuleShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/CompoundShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/ConvexHullShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/ConvexShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/CylinderShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/DecoratedShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/HeightFieldShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/MeshShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/MutableCompoundShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/RotatedTranslatedShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/ScaledShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/Shape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/SphereShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/StaticCompoundShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/TaperedCapsuleShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/Shape/TriangleShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Collision/TransformedShape.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/ConeConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/Constraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/ConstraintManager.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/ContactConstraintManager.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/DistanceConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/FixedConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/GearConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/HingeConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/MotorSettings.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/PathConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/PathConstraintPath.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/PathConstraintPathHermite.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/PointConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/RackAndPinionConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/SixDOFConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/SliderConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/SwingTwistConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/TwoBodyConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Constraints/PulleyConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/DeterminismLog.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/IslandBuilder.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/LargeIslandSplitter.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/PhysicsLock.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/PhysicsScene.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/PhysicsSystem.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/PhysicsUpdateContext.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Ragdoll/Ragdoll.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/StateRecorderImpl.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/TrackedVehicleController.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleAntiRollBar.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleCollisionTester.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleConstraint.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleController.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleDifferential.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleEngine.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleTrack.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/VehicleTransmission.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/Wheel.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Physics/Vehicle/WheeledVehicleController.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/RegisterTypes.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Renderer/DebugRenderer.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Renderer/DebugRendererPlayback.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Renderer/DebugRendererRecorder.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Skeleton/SkeletalAnimation.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Skeleton/Skeleton.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Skeleton/SkeletonMapper.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/Skeleton/SkeletonPose.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleGrouper/TriangleGrouperClosestCentroid.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleGrouper/TriangleGrouperMorton.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitter.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitterBinning.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitterFixedLeafSize.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitterLongestAxis.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitterMean.cpp", flags);
zphysics_c_cpp.addCSourceFile(src_dir ++ "/TriangleSplitter/TriangleSplitterMorton.cpp", flags);
return .{
.options = args.options,
.zphysics = zphysics,
.zphysics_options = zphysics_options,
.zphysics_c_cpp = zphysics_c_cpp,
};
}
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
const target = b.standardTargetOptions(.{});
const test_step = b.step("test", "Run zphysics tests");
test_step.dependOn(runTests(b, optimize, target));
}
pub fn runTests(
b: *std.Build,
optimize: std.builtin.Mode,
target: std.zig.CrossTarget,
) *std.Build.Step {
const parent_step = b.allocator.create(std.Build.Step) catch @panic("OOM");
parent_step.* = std.Build.Step.init(.{ .id = .custom, .name = "zphysics-tests", .owner = b });
const test0 = testStep(b, "zphysics-tests-f32", optimize, target, .{ .use_double_precision = false });
//const test1 = testStep(b, "zphysics-tests-f64", optimize, target, .{ .use_double_precision = true });
parent_step.dependOn(&test0.step);
//parent_step.dependOn(&test1.step);
return parent_step;
}
fn testStep(
b: *std.Build,
name: []const u8,
optimize: std.builtin.Mode,
target: std.zig.CrossTarget,
options: Options,
) *std.Build.RunStep {
const test_exe = b.addTest(.{
.name = name,
.root_source_file = .{ .path = thisDir() ++ "/src/zphysics.zig" },
.target = target,
.optimize = optimize,
});
test_exe.addCSourceFile(
thisDir() ++ "/libs/JoltC/JoltPhysicsC_Tests.c",
&.{
"-std=c11",
"-DJPH_COMPILER_MINGW",
if (options.use_double_precision) "-DJPH_DOUBLE_PRECISION" else "",
if (options.enable_asserts or optimize == .Debug) "-DJPH_ENABLE_ASSERTS" else "",
if (options.enable_cross_platform_determinism) "-DJPH_CROSS_PLATFORM_DETERMINISTIC" else "",
"-fno-sanitize=undefined",
},
);
const zphysics_pkg = package(b, target, optimize, .{ .options = options });
zphysics_pkg.link(test_exe);
test_exe.addModule("zphysics_options", zphysics_pkg.zphysics_options);
return b.addRunArtifact(test_exe);
}
inline fn thisDir() []const u8 {
return comptime std.fs.path.dirname(@src().file) orelse ".";
}