mirror of
https://gitlab.redox-os.org/redox-os/redox.git
synced 2026-11-04 19:56:36 +08:00
Merge branch 'rust-more' into 'master'
toolchain: Add wasip1 target and miri See merge request redox-os/redox!2278
This commit is contained in:
commit
67f36dfb7f
38
mk/prefix.mk
38
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
10
recipes/dev/wasi-libc/recipe.toml
Normal file
10
recipes/dev/wasi-libc/recipe.toml
Normal file
@ -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
|
||||
"""
|
||||
@ -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 <<EOF
|
||||
if [ -z "${REDOXER_USE_CLANG}" ]; then
|
||||
cat > $file <<EOF
|
||||
set(CMAKE_AR ${gcc_prefix}ar)
|
||||
set(CMAKE_CXX_COMPILER ${gcc_prefix}g++)
|
||||
set(CMAKE_C_COMPILER ${gcc_prefix}gcc)
|
||||
set(CMAKE_RANLIB ${gcc_prefix}ranlib)
|
||||
EOF
|
||||
else
|
||||
cat > $file <<EOF
|
||||
set(CMAKE_AR llvm-ar)
|
||||
set(CMAKE_CXX_COMPILER clang++)
|
||||
set(CMAKE_C_COMPILER clang)
|
||||
set(CMAKE_RANLIB llvm-ranlib)
|
||||
EOF
|
||||
fi
|
||||
cat >> $file <<EOF
|
||||
set(CMAKE_FIND_ROOT_PATH ${sysroot})
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_PLATFORM_USES_PATH_WHEN_NO_SONAME 1)
|
||||
set(CMAKE_PREFIX_PATH, ${sysroot})
|
||||
set(CMAKE_RANLIB ${gcc_prefix}ranlib)
|
||||
set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
|
||||
set(CMAKE_SYSTEM_NAME ${SYSTEM_NAME})
|
||||
set(CMAKE_SYSTEM_PROCESSOR ${arch})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user