diff --git a/mk/prefix.mk b/mk/prefix.mk index 3b9ede1ce..c282d1dcc 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -14,6 +14,7 @@ LLVM_TARGET=recipes/dev/llvm21/target/$(HOST_TARGET)/$(TARGET) RUST_TARGET=recipes/dev/rust/target/$(HOST_TARGET)/$(TARGET) CLANG_TARGET=recipes/dev/clang21/target/$(HOST_TARGET)/$(TARGET) LLD_TARGET=recipes/dev/lld21/target/$(HOST_TARGET)/$(TARGET) +WASIP1_LIBC_TARGET=recipes/dev/wasi-libc/target/$(HOST_TARGET)/wasm32-wasip1 # dependencies of GCC and Rust LIBGMP_TARGET=recipes/libs/libgmp/target/$(HOST_TARGET)/$(TARGET) LIBMPFR_TARGET=recipes/libs/libmpfr/target/$(HOST_TARGET)/$(TARGET) @@ -31,7 +32,7 @@ UPSTREAM_RUSTC_VERSION=2026-05-24 export PREFIX_RUSTFLAGS=-L $(ROOT)/$(PREFIX_INSTALL)/$(TARGET)/lib export RUSTUP_TOOLCHAIN=$(ROOT)/$(PREFIX_INSTALL) export REDOXER_TOOLCHAIN=$(RUSTUP_TOOLCHAIN) -PREFIX_CONFIG=CI=1 COOKBOOK_CLEAN_BUILD=true COOKBOOK_CLEAN_TARGET=false COOKBOOK_VERBOSE=true COOKBOOK_NONSTOP=false +PREFIX_CONFIG=CI=1 COOKBOOK_CLEAN_TARGET=false COOKBOOK_VERBOSE=true COOKBOOK_NONSTOP=false prefix: $(PREFIX)/sysroot @@ -42,7 +43,7 @@ ifeq ($(PREFIX_BINARY),0) rm -rf $(BINUTILS_TARGET) $(LIBTOOL_TARGET) $(GCC_TARGET) $(LIBSTDCXX_TARGET) $(RELIBC_FREESTANDING_TARGET) rm -rf $(RELIBC_TARGET) $(LLVM_TARGET) $(RUST_TARGET) $(CLANG_TARGET) $(LLD_TARGET) $(LIBGMP_TARGET) $(LIBMPFR_TARGET) rm -rf $(LIBMPC_TARGET) $(LIBZLIB_TARGET) $(LIBZSTD_TARGET) $(LIBSSL_TARGET) $(LIBHTTP2_TARGET) $(LIBCURL_TARGET) - rm -rf $(LIBGCC_TARGET) $(LIBCPP_TARGET) + rm -rf $(LIBGCC_TARGET) $(LIBCPP_TARGET) $(WASIP1_LIBC_TARGET) endif # Remove relibc in sysroot and all statically linked recipes @@ -391,19 +392,35 @@ endif # BUILD RUST --------------------------------------------------- else -$(PREFIX)/rust-install: | $(PREFIX)/gcc-install $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) +$(PREFIX)/wasip1-libc-install: $(PREFIX)/clang-install $(FSTOOLS_TAG) $(CONTAINER_TAG) +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + @echo "\033[1;36;49mBuilding wasip1-libc-install\033[0m" + rm -rf "$@.partial" "$@" + export REDOXER_TOOLCHAIN=$(ROOT)/$(PREFIX)/clang-install REDOXER_USE_CLANG=1 PATH="$(ROOT)/$(PREFIX)/clang-install/bin:$$PATH" \ + $(PREFIX_CONFIG) COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=wasm32-wasip1 COOKBOOK_CROSS_GNU_TARGET=wasm32-wasip1 && \ + $(REPO_BIN) cook host:wasi-libc + cp -r "$(WASIP1_LIBC_TARGET)/stage/usr/". "$@.partial" + mkdir -p "$@.partial/share/wasi-sysroot" + ln -s "../../lib" "$@.partial/share/wasi-sysroot/lib" + ln -s "../../include" "$@.partial/share/wasi-sysroot/include" + mv "$@.partial" "$@" +# TODO: Cache from WASIP1_LIBC_TARGET is currently not cleared. +endif + +$(PREFIX)/rust-install: | $(PREFIX)/wasip1-libc-install $(PREFIX)/gcc-install $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @echo "\033[1;36;49mBuilding rust-install\033[0m" rm -rf "$@.partial" "$@" - export PATH="$(ROOT)/$(PREFIX)/libtool-install/bin:$(ROOT)/$(PREFIX)/gcc-install/bin:$$PATH" \ + export PATH="$(ROOT)/$(PREFIX)/libtool-install/bin:$(ROOT)/$(PREFIX)/gcc-install/bin:$$PATH" WASI_SDK_PATH=$(ROOT)/$(PREFIX)/wasip1-libc-install \ $(PREFIX_CONFIG) COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(TARGET) COOKBOOK_CROSS_GNU_TARGET=$(GNU_TARGET) && \ - $(REPO_BIN) cook host:llvm21 host:rust + $(REPO_BIN) cook host:rust cp -r "$(RUST_TARGET)/stage/usr/". "$@.partial" - cp -r "$(LLVM_TARGET)/stage/usr/". "$@.partial" mv "$@.partial" "$@" -# TODO: Cache from RUST_TARGET is currently not cleared. +# TODO: Cache from RUST_TARGET and LLVM_TARGET is currently not cleared. # TIP: If you're developing std for rust, remove COOKBOOK_CLEAN_BUILD=true # at the top of this file so your next rust build reuses the build cache endif @@ -411,7 +428,7 @@ endif endif # BUILD CLANG --------------------------------------------------- -$(PREFIX)/clang-install: | $(PREFIX)/rust-install $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) +$(PREFIX)/clang-install: | $(PREFIX)/libtool-install $(FSTOOLS_TAG) $(CONTAINER_TAG) ifeq ($(PODMAN_BUILD),1) $(PODMAN_RUN) make $@ else @@ -420,10 +437,7 @@ else export PATH="$(ROOT)/$(PREFIX)/libtool-install/bin:$$PATH" \ $(PREFIX_CONFIG) COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(TARGET) && \ $(REPO_BIN) cook host:llvm21 host:clang21 host:lld21 -# llvm libraries is already in rust if building -ifeq ($(PREFIX_USE_UPSTREAM_RUST_COMPILER),1) cp -r "$(LLVM_TARGET)/stage/usr/". "$@.partial" -endif cp -r "$(LLVM_TARGET)/stage.runtime/usr/". "$@.partial" cp -r "$(LLVM_TARGET)/stage.dev/usr/". "$@.partial" cp -r "$(CLANG_TARGET)/stage/usr/". "$@.partial" @@ -431,7 +445,7 @@ endif rm -rf "$@.partial/lib/"*.a mv "$@.partial" "$@" # no longer needed, delete build files to save disk space - rm -rf $(LLVM_TARGET) $(CLANG_TARGET) $(LLD_TARGET) + rm -rf $(CLANG_TARGET) $(LLD_TARGET) endif endif diff --git a/mk/repo.mk b/mk/repo.mk index f9e9e8723..c6cde550c 100644 --- a/mk/repo.mk +++ b/mk/repo.mk @@ -240,7 +240,11 @@ DESTDIR?=/ # Install all recipes specified by the filesystem config install: +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else $(REPO_BIN) push $(COOKBOOK_OPTS) --no-metadata --with-package-deps "--sysroot=$(DESTDIR)" +endif # Rebuild and install all recipes specified by the filesystem config rebuild-install: $(FSTOOLS_TAG) FORCE @@ -248,7 +252,11 @@ rebuild-install: $(FSTOOLS_TAG) FORCE $(MAKE) install i.%: $(FSTOOLS_TAG) FORCE +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else $(REPO_BIN) push $* $(COOKBOOK_OPTS) --no-metadata --with-package-deps "--sysroot=$(DESTDIR)" +endif # Invoke rebuild and install for one of more targets separated by comma ri.%: $(FSTOOLS_TAG) FORCE diff --git a/recipes/dev/llvm21/recipe.toml b/recipes/dev/llvm21/recipe.toml index 423eb102f..f20d7b066 100644 --- a/recipes/dev/llvm21/recipe.toml +++ b/recipes/dev/llvm21/recipe.toml @@ -22,7 +22,7 @@ case "${ARCH}" in esac if [ "${COOKBOOK_HOST_SYSROOT}" = "/usr" ]; then - LLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV" + LLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV;WebAssembly" fi # This just build the LLVM library and tools just enough for Rust, to build the rest of LLVM see diff --git a/recipes/dev/rust/config-cross-redox.toml b/recipes/dev/rust/config-cross-redox.toml deleted file mode 100644 index c467336fa..000000000 --- a/recipes/dev/rust/config-cross-redox.toml +++ /dev/null @@ -1,28 +0,0 @@ -[llvm] -download-ci-llvm = false -static-libstdcpp = false -link-shared = true - -[build] -host = ["TARGET"] -target = ["TARGET", "i586-unknown-redox", "x86_64-unknown-redox", "aarch64-unknown-redox", "riscv64gc-unknown-redox"] -cargo-native-static = true -submodules = false -docs = false -tools = ["cargo", "clippy", "rustdoc", "rustfmt", "src"] -extended = true -verbose = 1 - -[install] -prefix = "install" -sysconfdir = "etc" - -[rust] -backtrace = false -codegen-tests = false - -[target.aarch64-unknown-linux-gnu] -llvm-config = "COOKBOOK_TOOLCHAIN/bin/llvm-config" - -[target.x86_64-unknown-linux-gnu] -llvm-config = "COOKBOOK_TOOLCHAIN/bin/llvm-config" diff --git a/recipes/dev/rust/config-cross-linux.toml b/recipes/dev/rust/config-cross.toml similarity index 83% rename from recipes/dev/rust/config-cross-linux.toml rename to recipes/dev/rust/config-cross.toml index c2d4ea1d9..afcebb84d 100644 --- a/recipes/dev/rust/config-cross-linux.toml +++ b/recipes/dev/rust/config-cross.toml @@ -5,11 +5,11 @@ link-shared = true [build] host = ["TARGET"] -target = ["TARGET", "COOKBOOK_TARGET"] +target = ["TARGET", "COOKBOOK_TARGET", "wasm32-wasip1"] cargo-native-static = true submodules = false docs = false -tools = ["cargo", "clippy", "rustdoc", "rustfmt", "src"] +tools = ["cargo", "cargo-miri", "clippy", "miri", "rustdoc", "rustfmt", "src"] extended = true verbose = 1 diff --git a/recipes/dev/rust/recipe.toml b/recipes/dev/rust/recipe.toml index ab51c2cc6..f2d1fd942 100644 --- a/recipes/dev/rust/recipe.toml +++ b/recipes/dev/rust/recipe.toml @@ -20,8 +20,7 @@ dev-dependencies = [ script = """ if [ "${COOKBOOK_HOST_SYSROOT}" = "/usr" ]; then -OS=$(echo "${TARGET}" | cut -d - -f3) -cat ${COOKBOOK_RECIPE}/config-cross-$OS.toml > config.toml +cat ${COOKBOOK_RECIPE}/config-cross.toml > config.toml sed -i "s|COOKBOOK_TOOLCHAIN|${COOKBOOK_TOOLCHAIN}|g" config.toml sed -i "s|COOKBOOK_TARGET|${COOKBOOK_CROSS_TARGET}|g" config.toml sed -i "s|COOKBOOK_GNU_TARGET|${COOKBOOK_CROSS_GNU_TARGET}|g" config.toml diff --git a/recipes/dev/wasi-libc/recipe.toml b/recipes/dev/wasi-libc/recipe.toml new file mode 100644 index 000000000..b866e6ef3 --- /dev/null +++ b/recipes/dev/wasi-libc/recipe.toml @@ -0,0 +1,10 @@ +# NOTE: This is only used to compile into wasi +[source] +git = "https://github.com/WebAssembly/wasi-libc" +shallow_clone = true + +[build] +template = "custom" +script = """ +cookbook_cmake +""" diff --git a/src/cook/script.rs b/src/cook/script.rs index 6562d5b93..1202878dc 100644 --- a/src/cook/script.rs +++ b/src/cook/script.rs @@ -212,11 +212,12 @@ COOKBOOK_CONFIGURE_FLAGS=( --disable-shared --enable-static ) +COOKBOOK_MAKE_FLAGS=() COOKBOOK_MAKE="make" function cookbook_configure { "${COOKBOOK_CONFIGURE}" "${COOKBOOK_CONFIGURE_FLAGS[@]}" "$@" - "${COOKBOOK_MAKE}" -j "${COOKBOOK_MAKE_JOBS}" + "${COOKBOOK_MAKE}" -j "${COOKBOOK_MAKE_JOBS}" "${COOKBOOK_MAKE_FLAGS[@]}" "${COOKBOOK_MAKE}" install DESTDIR="${COOKBOOK_STAGE}" } @@ -242,17 +243,28 @@ function generate_cookbook_cmake_file { SYSTEM_NAME="UnixPaths" fi - cat > $file < $file < $file <> $file <