diff --git a/projects/emscripten.org/package.yml b/projects/emscripten.org/package.yml new file mode 100644 index 0000000000..93a8cfe9ee --- /dev/null +++ b/projects/emscripten.org/package.yml @@ -0,0 +1,110 @@ +# Emscripten — LLVM-based C/C++ → WebAssembly toolchain. +# +# Provides emcc/em++/emar/emranlib wrappers around llvm.org clang +# that target WebAssembly. The emscripten Python toolkit + Node.js +# runtime are required at runtime. +# +# Closes part of pkgxdev/pantry#99 (Top 300 holdout #594). + +distributable: + url: https://github.com/emscripten-core/emscripten/archive/refs/tags/{{ version.raw }}.tar.gz + strip-components: 1 + +versions: + github: emscripten-core/emscripten/tags + match: /^\d+\.\d+\.\d+$/ + +platforms: + - linux/x86-64 + - linux/aarch64 + - darwin/x86-64 + - darwin/aarch64 + +dependencies: + python.org: '>=3.9' + nodejs.org: '*' + llvm.org: '*' + github.com/WebAssembly/binaryen: '*' + +runtime: + env: + EMSDK: ${{prefix}} + EM_CONFIG: ${{prefix}}/.emscripten + LLVM_ROOT: ${{deps.llvm.org.prefix}}/bin + BINARYEN_ROOT: ${{deps.github.com/WebAssembly/binaryen.prefix}} + NODE_JS: ${{deps.nodejs.org.prefix}}/bin/node + PYTHON: ${{deps.python.org.prefix}}/bin/python3 + +build: + dependencies: + gnu.org/coreutils: '*' + + script: + # Emscripten is a Python toolchain — `make install` doesn't exist. + # Copy the entire tree into {{prefix}} and seed a minimal .emscripten + # config that points at llvm.org's clang. + - run: | + mkdir -p "{{prefix}}" + cp -R . "{{prefix}}/" + cat > "{{prefix}}/.emscripten" < "$dst" + chmod 755 "$dst" + else + echo "warn: $src does not exist — skipping" + fi + done + ls -la "{{prefix}}/bin/" | head -15 + echo "── sample wrapper ──" + cat "{{prefix}}/bin/emcc" 2>/dev/null || true + +test: + script: + - emcc --version 2>&1 | head -1 + - run: | + cat > hello.c <<'EOF' + #include + int main() { printf("hello from emscripten\n"); return 0; } + EOF + emcc hello.c -o hello.js + test -f hello.js + test -f hello.wasm + +provides: + - bin/emcc + - bin/em++ + - bin/emar + - bin/emranlib + - bin/emcmake + - bin/emconfigure + - bin/emmake + - bin/emrun