Repository navigation
Expand file tree
/
Copy pathaether.toml
More file actions
30 lines (29 loc) · 1.68 KB
/
Copy pathaether.toml
File metadata and controls
30 lines (29 loc) · 1.68 KB
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
[package]
name = "aephysics"
description = "A rigid body physics engine in Aether"
# What a consumer's search path gets: the root, since the modules import
# each other as aephysics.<name> (aephysics/<name>/module.ae). A project
# that names this package as a dependency, or patches it to a checkout
# (ae3d keeps one under deps/), imports it with no --lib.
modules = "."
[build]
# What the tests and benchmarks are built with: -O3 and a wider inlining
# budget, so the small maths (a 3x3 product, a rotation, a quaternion
# product) inline into the solvers as the reference's static inline
# headers do; the joint grid runs 1.6x faster than at -O2 for it. The
# numbers are in bench/RESULTS.md under "Build flags".
#
# -ffp-contract=off keeps the C compiler from fusing a multiply and an add
# into one rounding: GCC fuses by default wherever the target has FMA
# (arm64 always, x86-64 with -mfma or -march=native), and a fused step
# gives other bits than the unfused one, so the same scene would part
# between machines from the first step (#125). The reference builds the
# same way (its CMakeLists), and a consumer that builds aephysics into its
# own program needs the flag too: ae reads only the root manifest's cflags.
#
# AETHER_AEPHYSICS_CFLAGS adds to them: -mavx2 (or -march=native) makes
# the wide contact solver's eight lanes one 256-bit register each, as the
# reference's AVX2 build has them; unset, the build runs on any x86-64 or
# arm64 with the lanes as two four-wide halves. With fusing off, every
# such build steps to the same bits (tests/golden/determinism_trace.txt).
cflags = "-O3 --param max-inline-insns-auto=400 --param inline-unit-growth=400 -ffp-contract=off ${AETHER_AEPHYSICS_CFLAGS}"