Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/operations/dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ Every third-party library is vendored under `third_party/` at an exact revision
| Kest | `Rawframe-Project/kest` | `fa092f540ffe2cb94f75199842792fb61e68451f` | MIT | `include/`, `src/` except `main.c`, `lib/`, `LICENSE` |
| Maul2D 0.6.0 | `Rawframe-Project/maul2d` release archive `maul2d-0.6.0.tar.gz`, SHA-256 `f97262cd98a47e2f52ed7a811ce144bff1c3f51931323457d1313484c9a845ae` | `501ac5c191658435cbdd4f70a0abd6cdd9e37f03` (`v0.6.0`) | MIT | `include/`, `src/`, `LICENSE`; the build file is the engine's |
| Maul3D 0.7.0 | `Rawframe-Project/maul3d` release archive `maul3d-0.7.0.tar.gz`, SHA-256 `b4e42736c2c8413f8218846b9ce777bab79506d75c620707d571f24cb0632d4f` | `bf11f1fc3976ffb8b2ab4e4604252e760aea221c` (`v0.7.0`) | MIT | `include/`, `src/`, `LICENSE`; the build file is the engine's |
| Maul Unicode 1.0.0 | `Rawframe-Project/maul-unicode` release archive `maul-unicode-1.0.0.tar.gz`, SHA-256 `3e1eea1ae0f7f508771d272baa53684872ea508a306110d1f6b42afb7f3292b6` | `cc997f185471d1c28eb90d42cc8ddd095674e158` (`v1.0.0`) | MIT; its Unicode tables Unicode-3.0 | `include/`, `src/`, `cmake/`, `CMakeLists.txt`, `LICENSE` |
| Maul Unicode 1.1.2 | `Rawframe-Project/maul-unicode` release archive `maul-unicode-1.1.2.tar.gz`, SHA-256 `a0e8ed3f04d7316763c7f4658a466eaf7438bd6c9bc26a68bc7e90d7a706991e` | `b026e91fa336eddce422ea6181857417f4e1ec04` (`v1.1.2`) | MIT; its Unicode tables Unicode-3.0 | `include/`, `src/`, `cmake/`, `CMakeLists.txt`, `LICENSE` |
| Maul Window 0.12.0 | `Rawframe-Project/maul-window` release archive `maul-window-0.12.0.tar.gz`, SHA-256 `389b522f338f9584c2d96e682ef60a0c0dd31a5939ef2770b52d7df2247e1764` | `f904519e6c8f86071862080bdbca6f14065f7ea1` (`v0.12.0`) | MIT | `include/`, `src/`, `cmake/`, `protocols/`, `java/`, `tools/gen_web_glue.py`, `CMakeLists.txt`, `LICENSE` |
| Maul RHI 0.15.0 | `Rawframe-Project/maul-rhi` release archive `maul-rhi-0.15.0.tar.gz`, SHA-256 `ef0e1ec5214cdfbdaa2bc3b31c1f5558cbfbfef07889192eda79f456bbb729fa` | `57f11cf50da9380dfa6af75eb49ff6612e7d3387` (`v0.15.0`) | MIT; Khronos headers Apache-2.0 or MIT; DirectX headers MIT | `include/`, `src/`, `khronos/`, `directx/`, `cmake/`, the container, MSL and DXIL tools, `contract/mrhi.json`, `tools/gen_web_glue.py`, `CMakeLists.txt`, `LICENSE` |
| Maul UI 1.3.2 | `Rawframe-Project/maul-ui` release archive `maul-ui-1.3.2.tar.gz`, SHA-256 `64fb2c13279c087b1352fa4cb4caf86cb1951e4aca0af47976d970659cd3b806` | `ea8e2c6fe328eb3c94071e5bbe3dde08c95374a3` (`v1.3.2`) | MIT | `include/`, `src/`, `cmake/`, `java/`, `tools/gen_web_glue.py`, `CMakeLists.txt`, `LICENSE`, `docs/user/licenses.md` |
| Maul UI 1.3.3 | `Rawframe-Project/maul-ui` release archive `maul-ui-1.3.3.tar.gz`, SHA-256 `ba431b0f5b48dac01db208580a832ea44cb0792b4a9641186805630c2033d62f` | `713c044bf1a45fe0f537ae8ef0adba71abcff17c` (`v1.3.3`) | MIT | `include/`, `src/`, `cmake/`, `java/`, `tools/gen_web_glue.py`, `CMakeLists.txt`, `LICENSE`, `docs/user/licenses.md` |
| Maul Tween 1.0.0 | `Rawframe-Project/maul-tween` release archive `maul-tween-1.0.0.tar.gz`, SHA-256 `8c3776f79cf482adc98a9b220e5405d6c5dde0e48342c9ab06d89f74d72e10f4` | `990fc0ef60ffb672b968043125f7fcb23a8388fa` (`v1.0.0`) | MIT | `include/`, `src/`, `cmake/`, `CMakeLists.txt`, `LICENSE` |
| Maul Nav 0.2.0 | `Rawframe-Project/maul-nav` release archive `maul-nav-0.2.0.tar.gz`, SHA-256 `e5867312f2c981a198f774cead5692e4fce15f412af2af9e7330957d663dc8fd` | `db1e65197b809af34689aeca4e6a6da37f95f08f` (`v0.2.0`) | MIT | `include/`, `src/`, `cmake/`, `CMakeLists.txt`, `LICENSE` |
| Maul Audio 0.4.0 | `Rawframe-Project/maul-audio` release archive `maul-audio-0.4.0.tar.gz`, SHA-256 `572bf30ba89f56b6a32452585bf46265ece3a1ec285b5233c04cff110ff4926d` | `fbad1b28250657a2b5704830454c8bc097dbb590` (`v0.4.0`) | MIT | `include/`, `src/`, `cmake/`, `CMakeLists.txt`, `LICENSE` |
Expand Down Expand Up @@ -67,7 +67,7 @@ Vendored code is upstream's, with these changes only. Each is a patch in `tools/

- **Maul RHI** cooks the engine's shader containers: a move runs `tools/gen_shaders.py` with the shader toolchain and commits the containers and their stamps, which the check refuses from another release ([development.md](development.md#generated-files)).
- **Maul2D and Maul3D** keep the engine's own `CMakeLists.txt` beside their sources; bring its source list in line with upstream's when it changes. The other Maul libraries build with their own CMake, configured by `third_party/maul_*.cmake`.
- **Maul UI, Maul Window, Maul Unicode and Maul Tween** move together: Maul UI and Maul Window both build against the vendored Maul Unicode (`third_party/maul_ui.cmake`, included first, configures it with its HarfBuzz functions), and Maul UI builds the vendored Maul Tween into its core. Each names the one release of the others it was built against: Maul Window its Maul Unicode, Maul UI its Maul Window, Maul Unicode, Maul Tween and Maul RHI, and Maul UI's Window glue refuses to configure when its Maul Unicode and Maul Window's differ. So the four move to the releases Maul UI names, with Maul RHI at the one it names too. A move of any of them is built and checked with the others. Maul snapshots and journals refuse another build, so both sides of anything that exchanges them need the same pins.
- **Maul UI, Maul Window, Maul Unicode and Maul Tween** move together: Maul UI and Maul Window both build against the vendored Maul Unicode (`third_party/maul_ui.cmake`, included first, configures it with its HarfBuzz functions), and Maul UI builds the vendored Maul Tween into its core. Each names the release of the others it was built against: Maul Window its Maul Unicode, Maul UI its Maul Window, Maul Unicode, Maul Tween and Maul RHI. Maul Window, Maul Tween and Maul RHI move to the releases Maul UI names. Maul Unicode may be a later release of the same major version: from 1.0.0 it makes no breaking release within a major version, and its CMake package takes a request for any earlier release of it. No check in the engine's build stops that. `third_party/maul_ui.cmake` points FetchContent's `maul-unicode` at `third_party/maul-unicode`, which Maul UI's text component and Maul Window both take whatever tag they declare. The check that refuses a Maul Unicode differing from Maul Window's, in Maul UI's `cmake/Window.cmake`, belongs to Maul UI's Window glue, which only `MAUL_UI_WINDOW` builds, off by default and never turned on here, since the engine drives Maul Window itself. A later Maul Unicode is still built and checked with the others, which then run on it inside the engine. A move of any of them is built and checked with the others. Maul snapshots and journals refuse another build, so both sides of anything that exchanges them need the same pins.
- **MsQuic and OpenSSL** move together: the OpenSSL revision is the one MsQuic pins as its submodule. Configure builds both once per machine with `tools/build_quic.sh` into `~/.cache/rawframe` (or `$RAWFRAME_DEPENDENCY_CACHE`), and again only when the revisions, the script or the compiler change. For the web build, OpenSSL's libcrypto alone is built for wasm32-wasi by `tools/build_openssl_wasm.sh`.
- **Zstandard** is part of the packing format: a new revision may change compressed bytes, so moving it is a new packer generation, never a silent change. Runtimes link the decoder only.
- **cgltf, miniaudio's decoders, stb_vorbis and the Opus encoder** are import tooling: they are linked into the cook, never into a runtime. The runtime builds only Maul Audio's device layer and the Opus decoder.
Expand Down
13 changes: 10 additions & 3 deletions third_party/maul-ui/include/maul-ui/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ extern "C"
#define MUI_VERSION_MINOR 3
// x-release-please-end
// x-release-please-start-patch
#define MUI_VERSION_PATCH 2
#define MUI_VERSION_PATCH 3
// x-release-please-end

// The binary interface a program is built for: the major and minor
Expand Down Expand Up @@ -67,14 +67,21 @@ extern "C"
// MUI_NODISCARD marks a function whose result must be read: every
// function that returns a status. The attribute is standard in C23 and
// C++17 and left out for older dialects. MSVC keeps __cplusplus at
// 199711L unless /Zc:__cplusplus is given, so _MSVC_LANG is read too.
// 199711L unless /Zc:__cplusplus is given, so _MSVC_LANG is read too. In
// C, any dialect after C17 whose compiler has the attribute takes it:
// GCC 14 reports 202000L in its C23 mode.
#if (defined(__cplusplus) && __cplusplus >= 201703L) || \
(defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
#define MUI_NODISCARD [[nodiscard]]
#elif !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
#elif !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L && \
defined(__has_c_attribute)
#if __has_c_attribute(nodiscard)
#define MUI_NODISCARD [[nodiscard]]
#else
#define MUI_NODISCARD
#endif
#else
#define MUI_NODISCARD
#endif

// The status a fallible function returns. Zero is success, positive
Expand Down
5 changes: 4 additions & 1 deletion third_party/maul-unicode/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ if(MAUL_UNICODE_FUZZ)
target_compile_options(maul-unicode PRIVATE -fsanitize=fuzzer-no-link,address,undefined
-fno-sanitize-recover=all)
target_link_options(maul-unicode PUBLIC -fsanitize=address,undefined -fno-sanitize-recover=all)
set(MUNI_FUZZ_AREAS encoding segment bidi bidi_long script)
set(MUNI_FUZZ_AREAS encoding segment bidi bidi_long script iterators)
if(MAUL_UNICODE_NORMALIZATION)
list(APPEND MUNI_FUZZ_AREAS normalize)
endif()
Expand All @@ -249,6 +249,9 @@ if(MAUL_UNICODE_FUZZ)
target_link_options(fuzz_${area} PRIVATE -fsanitize=fuzzer,address,undefined
-fno-sanitize-recover=all)
endforeach()
# fuzz_iterators sets the fields of the iterators' state, which only
# src/ declares.
target_include_directories(fuzz_iterators PRIVATE src)
# ICU is an oracle for the tests alone, never linked into the library.
if(TARGET fuzz_icu)
find_package(PkgConfig REQUIRED)
Expand Down
17 changes: 13 additions & 4 deletions third_party/maul-unicode/cmake/Testing.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,12 @@ endfunction()
# the family requires. ROOT and NAME default to the project's
# source directory and name; cmake/HeaderCheck passes them to check a
# library's headers alone. MSVC's cl has no C23 mode (its /std:clatest is
# a draft mode), so the C23 check is skipped there. In C++17 the
# library's <PP>_NODISCARD, found in base.h, must not be empty. A macro,
# because enable_language must run at directory scope. Without a C++
# compiler the C++ checks are skipped.
# a draft mode), so the C23 check is skipped there. In C23 and C++17 the
# library's <PP>_NODISCARD, found in base.h, must not be empty: GCC 14
# reports its C23 as 202000L, so a macro that waits for 202311L would
# leave a dropped status unwarned there. A macro, because enable_language
# must run at directory scope. Without a C++ compiler the C++ checks are
# skipped.
macro(maul_add_header_tests)
cmake_parse_arguments(MAUL_HT "" "ROOT;NAME" "" ${ARGN})
if(NOT MAUL_HT_ROOT)
Expand Down Expand Up @@ -131,6 +133,13 @@ macro(maul_add_header_tests)
"static_assert(sizeof(MAUL_TEXT(${maul_nodiscard})) > 1,\n"
" \"${maul_nodiscard} is empty in C++17\");\n")
list(APPEND maul_cxx_sources ${maul_header_dir}/cxx_nodiscard.cpp)
file(WRITE ${maul_header_dir}/c23_nodiscard.c
"#include \"${MAUL_HT_NAME}/base.h\"\n"
"#define MAUL_TEXT(x) MAUL_TEXT_OF(x)\n"
"#define MAUL_TEXT_OF(x) #x\n"
"static_assert(sizeof(MAUL_TEXT(${maul_nodiscard})) > 1,\n"
" \"${maul_nodiscard} is empty in C23\");\n")
list(APPEND maul_c23_sources ${maul_header_dir}/c23_nodiscard.c)
endif()
if(MSVC)
set(maul_header_flags /W4 /WX)
Expand Down
15 changes: 11 additions & 4 deletions third_party/maul-unicode/include/maul-unicode/base.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ extern "C"
#define MUNI_VERSION_MAJOR 1
// x-release-please-end
// x-release-please-start-minor
#define MUNI_VERSION_MINOR 0
#define MUNI_VERSION_MINOR 1
// x-release-please-end
// x-release-please-start-patch
#define MUNI_VERSION_PATCH 0
#define MUNI_VERSION_PATCH 2
// x-release-please-end

// The one Unicode version every table in the library comes from.
Expand Down Expand Up @@ -64,14 +64,21 @@ extern "C"
// MUNI_NODISCARD marks a function whose result must be read: every
// function that returns a status. The attribute is standard in C23 and
// C++17 and left out for older dialects. MSVC keeps __cplusplus at
// 199711L unless /Zc:__cplusplus is given, so _MSVC_LANG is read too.
// 199711L unless /Zc:__cplusplus is given, so _MSVC_LANG is read too. In
// C, any dialect after C17 whose compiler has the attribute takes it:
// GCC 14 reports 202000L in its C23 mode.
#if (defined(__cplusplus) && __cplusplus >= 201703L) || \
(defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
#define MUNI_NODISCARD [[nodiscard]]
#elif !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
#elif !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ > 201710L && \
defined(__has_c_attribute)
#if __has_c_attribute(nodiscard)
#define MUNI_NODISCARD [[nodiscard]]
#else
#define MUNI_NODISCARD
#endif
#else
#define MUNI_NODISCARD
#endif

// The status a fallible function returns. Zero is success, positive
Expand Down
13 changes: 9 additions & 4 deletions third_party/maul-unicode/include/maul-unicode/script.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ extern "C"
#endif

// An iterator over script runs. Its contents are private; it is plain
// data the caller keeps anywhere and needs no cleanup.
// data the caller keeps anywhere and needs no cleanup. A copy of an
// iterator an init call set up is one too; every call refuses one no
// init call set up, such as a zeroed one or one copied from other
// bytes, as an invalid argument.
typedef struct muniScriptIterator
{
uint64_t opaque[26];
Expand Down Expand Up @@ -65,8 +68,9 @@ extern "C"
/// @param moreFollows true when still more pieces will be fed.
/// @return `muni_success`; `muni_errorState` for an iterator that did
/// not ask for more text, such as one initialized without more
/// text to follow; `muni_errorInvalid` for a NULL argument.
/// `muni_errorInvalid` is reported before `muni_errorState`.
/// text to follow; `muni_errorInvalid` for a NULL argument or
/// an iterator no init call set up. `muni_errorInvalid` is
/// reported before `muni_errorState`.
/// @par Thread safety
/// Safe from any thread; an iterator is used by one thread at a time.
MUNI_NODISCARD MUNI_API muniResult muniScriptIterator_Feed(muniScriptIterator* iterator,
Expand All @@ -83,7 +87,8 @@ extern "C"
/// returns `muni_success`.
/// @return `muni_success` with a run; `muni_done` after the last one;
/// `muni_needMoreText` when the run's end or script depends on
/// text not yet fed; `muni_errorInvalid` for a NULL argument.
/// text not yet fed; `muni_errorInvalid` for a NULL argument or
/// an iterator no init call set up.
/// @par Thread safety
/// Safe from any thread; an iterator is used by one thread at a time.
MUNI_NODISCARD MUNI_API muniResult muniScriptIterator_NextRun(muniScriptIterator* iterator,
Expand Down
Loading
Loading