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
15 changes: 15 additions & 0 deletions .agents/docs/2026-10-13-add-etl-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Add compat.etl

ETL 20.49.0 is a MIT-licensed header-only upstream release. A generated C
anchor gives mcpp a library target and exposes the original include directory.
The three platform entries share the pinned archive and SHA-256. No optional
compiled sources exist, so no sources-only features are advertised.

The GLOBAL URL is kept as a plain string; CN users fall back to upstream
until a byte-identical mirror is published. The example redirects compat to
this checkout and asserts fixed-capacity vector and queue ordering.

Local validation: mcpp 2026.10.1.2, gcc 16.1.0, `mcpp test -p etl`:
`test result ok. 1 passed; 0 failed`. The original LLVM CI failure belonged
to eui-neo-tray, which used setenv without stdlib.h; the follow-up includes
that declaration so the already selected CI member compiles correctly.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ the online index; open a PR and confirm CI is green.
A PR runs lint and tests only the workspace members that depend on the changed descriptors; after the merge,
`deploy-site` publishes the site.

Additional example: [`compat.etl`](pkgs/c/compat.etl.lua) — Header-only; [`consumer test`](tests/examples/etl/mcpp.toml).
Additional example: [`compat.richdem`](pkgs/c/compat.richdem.lua) — C++ sources, serial terrain analysis; [`consumer test`](tests/examples/richdem/mcpp.toml).

## Documentation
Expand Down
1 change: 1 addition & 0 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ agent(如 Claude Code)即可:

提交 PR 后,CI 执行 lint,并只测试依赖了被修改描述符的 workspace 成员;合并后,`deploy-site` 发布站点。

新增示例: [`compat.etl`](pkgs/c/compat.etl.lua) — Header-only; [`消费测试`](tests/examples/etl/mcpp.toml)。
新增示例: [`compat.richdem`](pkgs/c/compat.richdem.lua) — C++ sources, serial terrain analysis; [`消费测试`](tests/examples/richdem/mcpp.toml)。

## 文档
Expand Down
1 change: 1 addition & 0 deletions mcpp.toml
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ members = [
"tests/examples/httplib-zstd",
"tests/examples/msdfgen",
"tests/examples/gtl",
"tests/examples/etl",
"tests/examples/galay",
"tests/examples/miniaudio",
"tests/examples/nanosvg",
Expand Down
56 changes: 56 additions & 0 deletions pkgs/c/compat.etl.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
-- Form B inline descriptor for the Embedded Template Library (ETL), a
-- header-only collection of fixed-capacity containers and utilities for
-- resource-constrained systems.
--
-- The upstream CMake target is INTERFACE-only and exposes `include/`, so a
-- small C anchor gives mcpp a buildable library target while consumers use
-- headers such as `<etl/vector.h>`.
--
-- ETL supports older language modes, but this package is built by mcpp, whose
-- supported C++ standard starts at C++20. The package therefore uses C++23
-- for its anchor and remains compatible with C++20 consumers.
package = {
spec = "1",
namespace = "compat",
name = "etl",
description = "Embedded Template Library — fixed-capacity containers and utilities (header-only)",
licenses = {"MIT"},
repo = "https://github.com/ETLCPP/etl",
type = "package",

xpm = {
linux = {
["20.49.0"] = {
url = "https://github.com/ETLCPP/etl/archive/refs/tags/20.49.0.tar.gz",
sha256 = "b3e7a5544795ec8f4a1b2ab46f6e88fdb78be5a07738f008ce11dd37ed14b6e4",
},
},
macosx = {
["20.49.0"] = {
url = "https://github.com/ETLCPP/etl/archive/refs/tags/20.49.0.tar.gz",
sha256 = "b3e7a5544795ec8f4a1b2ab46f6e88fdb78be5a07738f008ce11dd37ed14b6e4",
},
},
windows = {
["20.49.0"] = {
url = "https://github.com/ETLCPP/etl/archive/refs/tags/20.49.0.tar.gz",
sha256 = "b3e7a5544795ec8f4a1b2ab46f6e88fdb78be5a07738f008ce11dd37ed14b6e4",
},
},
},

mcpp = {
language = "c++23",
import_std = false,
c_standard = "c11",
include_dirs = { "*/include" },
generated_files = {
["mcpp_generated/etl_anchor.c"] = [==[
int mcpp_compat_etl_headers_anchor(void) { return 0; }
]==],
},
sources = { "mcpp_generated/etl_anchor.c" },
targets = { ["etl"] = { kind = "lib" } },
deps = {},
},
}
11 changes: 11 additions & 0 deletions tests/examples/etl/mcpp.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# ETL test project: exercise a fixed-capacity vector and a queue without
# requiring dynamic allocation from the library.
[package]
name = "etl-tests"
version = "0.1.0"

[dependencies.compat]
etl = "20.49.0"

[indices]
compat = { path = "../../.." }
29 changes: 29 additions & 0 deletions tests/examples/etl/tests/containers.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// compat.etl — exercise ETL's fixed-capacity containers and their observable
// capacity/ordering behaviour.
#include <etl/queue.h>
#include <etl/vector.h>

int main() {
etl::vector<int, 4> values;
values.push_back(3);
values.push_back(1);
values.push_back(4);

if (values.size() != 3 || values.capacity() != 4 ||
values[0] != 3 || values[2] != 4) {
return 1;
}

etl::queue<int, 4> queue;
queue.push(10);
queue.push(20);
if (queue.front() != 10 || queue.back() != 20) {
return 2;
}
queue.pop();
if (queue.front() != 20 || queue.size() != 1) {
return 3;
}

return 0;
}
1 change: 1 addition & 0 deletions tests/examples/eui-neo-tray/tests/tray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@

#if defined(__linux__)
#include <limits.h>
#include <stdlib.h>
#include <unistd.h>
#endif

Expand Down
Loading