forked from 1b-agent/fieldcraft-upstream
egui-wgpu's startup hook and the app's own steps (window, app setup, viewport pipelines, first frame, running) go into the journal. On Windows, native_crash.rs (adapted from SolidCraft, the only module allowed unsafe code; the app crate now denies instead of forbids it) writes the exception code, faulting module and offset and a minidump. A nightly/on-demand CI job runs the app's tests on Windows, including a child that faults on purpose. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
137 lines
7.6 KiB
TOML
137 lines
7.6 KiB
TOML
[package]
|
|
name = "fieldcraft"
|
|
description = "Finite element modeling: meshing, model setup, solver decks and a linear solver"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
publish = false
|
|
|
|
# The workspace lints, except unsafe_code: denied, not forbidden, so that src/native_crash.rs
|
|
# (the Windows exception filter, which has no safe API) can allow it. Keep the rest in sync with
|
|
# [workspace.lints].
|
|
[lints.rust]
|
|
unsafe_code = "deny"
|
|
|
|
[lints.clippy]
|
|
dbg_macro = "warn"
|
|
todo = "warn"
|
|
too_many_arguments = "allow"
|
|
type_complexity = "allow"
|
|
neg_cmp_op_on_partial_ord = "allow"
|
|
|
|
[dependencies]
|
|
fieldcraft-engine = { workspace = true }
|
|
fieldcraft-ui-egui = { workspace = true }
|
|
fieldcraft-io = { workspace = true }
|
|
fieldcraft-update = { workspace = true }
|
|
rfd = { workspace = true }
|
|
eframe = { workspace = true, features = ["default_fonts", "wgpu", "accesskit", "wayland", "x11"] }
|
|
egui = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
log = { workspace = true }
|
|
# Usage analytics (docs/privacy.md): an HTTPS POST with rustls on ring, checked against the
|
|
# operating system's certificates (no bundled root list), and a random install id.
|
|
ureq = { version = "3.4", default-features = false, features = ["rustls-no-provider", "platform-verifier"] }
|
|
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
|
|
getrandom = "0.3"
|
|
|
|
# A termination signal (SIGTERM, SIGINT) closes the window the normal way (terminate.rs).
|
|
[target.'cfg(unix)'.dependencies]
|
|
signal-hook = "0.3"
|
|
|
|
# The exception filter and minidump of a native crash (src/native_crash.rs).
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.61", features = [
|
|
"Win32_Foundation",
|
|
"Win32_Security",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System_Diagnostics_Debug",
|
|
"Win32_System_Kernel",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_System_Threading",
|
|
] }
|
|
|
|
[build-dependencies]
|
|
# The Windows executable's icon resource (build.rs).
|
|
embed-resource = "3.0.12"
|
|
|
|
# Linux .deb and .rpm packages (cargo-deb, cargo-generate-rpm), built by packaging/linux/package.sh
|
|
# from the release binaries it has already built and stripped; it sets the version and the file
|
|
# names. The file list matches the tar.gz's (package.sh's staged tree; the release workflow
|
|
# compares them).
|
|
# The binaries link only glibc and libgcc_s. Windowing (Wayland, X11, xkbcommon), the GPU (Vulkan
|
|
# or EGL) and the file dialogs (the XDG desktop portal) are opened at run time, so they are no ELF
|
|
# NEEDED entries and the tools cannot find them: they are listed here.
|
|
[package.metadata.deb]
|
|
name = "fieldcraft"
|
|
maintainer = "FieldCraft contributors <[email protected]>"
|
|
copyright = "FieldCraft contributors"
|
|
section = "science"
|
|
priority = "optional"
|
|
extended-description = """\
|
|
FieldCraft turns geometry into analysis-ready finite element models: volume \
|
|
meshes, materials, sections, boundary conditions, loads and steps. It writes \
|
|
Abaqus input, Nastran bulk data and LS-DYNA keyword decks, and solves linear \
|
|
static and modal problems with its own solver. Includes fieldcraft-cli, a \
|
|
headless command runner and MCP server."""
|
|
depends = "$auto, libxkbcommon0, libxkbcommon-x11-0, libwayland-client0, libx11-6, libx11-xcb1, libxcb1, libxcursor1, libxi6, libvulkan1 | libegl1"
|
|
recommends = "mesa-vulkan-drivers, libegl-mesa0, xdg-desktop-portal"
|
|
assets = [
|
|
["target/release/fieldcraft", "usr/bin/", "755"],
|
|
["target/release/fieldcraft-cli", "usr/bin/", "755"],
|
|
["../../packaging/linux/io.github.jyviko.fieldcraft.desktop", "usr/share/applications/", "644"],
|
|
["../../assets/app-icon/icon.iconset/icon_16x16.png", "usr/share/icons/hicolor/16x16/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/icon_32x32.png", "usr/share/icons/hicolor/32x32/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/[email protected]", "usr/share/icons/hicolor/64x64/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/icon_128x128.png", "usr/share/icons/hicolor/128x128/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/icon_256x256.png", "usr/share/icons/hicolor/256x256/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/icon_512x512.png", "usr/share/icons/hicolor/512x512/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../assets/app-icon/icon.iconset/[email protected]", "usr/share/icons/hicolor/1024x1024/apps/io.github.jyviko.fieldcraft.png", "644"],
|
|
["../../README.md", "usr/share/doc/fieldcraft/", "644"],
|
|
["../../LICENSE-MIT", "usr/share/doc/fieldcraft/", "644"],
|
|
["../../LICENSE-APACHE", "usr/share/doc/fieldcraft/", "644"],
|
|
["../../NOTICE", "usr/share/doc/fieldcraft/", "644"],
|
|
["../../THIRD-PARTY-LICENSES.txt", "usr/share/doc/fieldcraft/", "644"],
|
|
]
|
|
|
|
[package.metadata.generate-rpm]
|
|
name = "fieldcraft"
|
|
license = "MIT OR Apache-2.0"
|
|
url = "https://github.com/jyviko/fieldcraft"
|
|
assets = [
|
|
{ source = "target/release/fieldcraft", dest = "/usr/bin/fieldcraft", mode = "755" },
|
|
{ source = "target/release/fieldcraft-cli", dest = "/usr/bin/fieldcraft-cli", mode = "755" },
|
|
{ source = "../../packaging/linux/io.github.jyviko.fieldcraft.desktop", dest = "/usr/share/applications/io.github.jyviko.fieldcraft.desktop", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/icon_16x16.png", dest = "/usr/share/icons/hicolor/16x16/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/icon_32x32.png", dest = "/usr/share/icons/hicolor/32x32/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/[email protected]", dest = "/usr/share/icons/hicolor/64x64/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/icon_128x128.png", dest = "/usr/share/icons/hicolor/128x128/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/icon_256x256.png", dest = "/usr/share/icons/hicolor/256x256/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/icon_512x512.png", dest = "/usr/share/icons/hicolor/512x512/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../assets/app-icon/icon.iconset/[email protected]", dest = "/usr/share/icons/hicolor/1024x1024/apps/io.github.jyviko.fieldcraft.png", mode = "644" },
|
|
{ source = "../../README.md", dest = "/usr/share/doc/fieldcraft/README.md", mode = "644", doc = true },
|
|
{ source = "../../LICENSE-MIT", dest = "/usr/share/doc/fieldcraft/LICENSE-MIT", mode = "644", doc = true },
|
|
{ source = "../../LICENSE-APACHE", dest = "/usr/share/doc/fieldcraft/LICENSE-APACHE", mode = "644", doc = true },
|
|
{ source = "../../NOTICE", dest = "/usr/share/doc/fieldcraft/NOTICE", mode = "644", doc = true },
|
|
{ source = "../../THIRD-PARTY-LICENSES.txt", dest = "/usr/share/doc/fieldcraft/THIRD-PARTY-LICENSES.txt", mode = "644", doc = true },
|
|
]
|
|
# The binaries' ELF dependencies (glibc, libgcc_s) are found automatically; these are opened at run
|
|
# time. Soname provides rather than package names, so the same requirements resolve on Fedora/RHEL
|
|
# and openSUSE.
|
|
require-sh = false
|
|
|
|
[package.metadata.generate-rpm.requires]
|
|
"libxkbcommon.so.0()(64bit)" = "*"
|
|
"libxkbcommon-x11.so.0()(64bit)" = "*"
|
|
"libwayland-client.so.0()(64bit)" = "*"
|
|
"libX11.so.6()(64bit)" = "*"
|
|
"libX11-xcb.so.1()(64bit)" = "*"
|
|
"libxcb.so.1()(64bit)" = "*"
|
|
"libXcursor.so.1()(64bit)" = "*"
|
|
"libXi.so.6()(64bit)" = "*"
|
|
"(libvulkan.so.1()(64bit) or libEGL.so.1()(64bit))" = ""
|
|
|
|
[package.metadata.generate-rpm.recommends]
|
|
mesa-vulkan-drivers = "*"
|
|
xdg-desktop-portal = "*"
|