From d034e6a381106053c0441aec490dd65c685ecc8e Mon Sep 17 00:00:00 2001 From: Wildan M Date: Fri, 26 Dec 2025 07:18:29 +0700 Subject: [PATCH] Fixes for other arch like RISC-V --- mk/prefix.mk | 30 ++++++++++++++------------- recipes/dev/gcc13/recipe.toml | 2 ++ recipes/libs/libstdcxx-v3/recipe.toml | 12 ----------- 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/mk/prefix.mk b/mk/prefix.mk index 92fbf522..686d3ccc 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -125,10 +125,10 @@ ifeq ($(PODMAN_BUILD),1) else @echo "\033[1;36;49mBuilding gcc-freestanding-install\033[0m" rm -rf "$@.partial" "$@" $(PREFIX)/relibc-freestanding-install $(PREFIX)/sysroot - mkdir -p "$@.partial" $(PREFIX)/relibc-freestanding-install/$(TARGET)/include + mkdir -p "$@.partial" $(PREFIX)/relibc-freestanding-install/$(GNU_TARGET)/include export CI=1 PATH="$(ROOT)/$(PREFIX)/binutils-install/bin:$$PATH" \ COOKBOOK_CLEAN_BUILD=true COOKBOOK_CROSS_TARGET=$(TARGET) COOKBOOK_CROSS_GNU_TARGET=$(GNU_TARGET) \ - COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_SYSROOT=$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(TARGET) && \ + COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_SYSROOT=$(ROOT)/$(PREFIX)/relibc-freestanding-install/$(GNU_TARGET) && \ ./target/release/repo cook host:gcc13 cp -r "$(GCC_TARGET)/stage/usr/". "$@.partial" cp -r "$(GCC_TARGET)/stage.cxx/usr/". "$@.partial" @@ -144,13 +144,13 @@ ifeq ($(PODMAN_BUILD),1) else @echo "\033[1;36;49mBuilding relibc-freestanding-install\033[0m" rm -rf "$@.partial" "$@" - mkdir -p "$@.partial/$(TARGET)" + mkdir -p "$@.partial" export CARGO="env -u CARGO -u RUSTUP_TOOLCHAIN cargo" && \ export PATH="$(ROOT)/$(PREFIX)/gcc-freestanding-install/bin:$$PATH" && \ export CC_$(subst -,_,$(TARGET))="$(GNU_TARGET)-gcc -isystem $(ROOT)/$@.partial/$(GNU_TARGET)/include" LINKFLAGS="" && \ export CI=1 COOKBOOK_CLEAN_BUILD=true COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(HOST_TARGET) && \ ./target/release/repo cook relibc - cp -r "$(RELIBC_FREESTANDING_TARGET)/stage/usr/". "$@.partial/$(TARGET)" + cp -r "$(RELIBC_FREESTANDING_TARGET)/stage/usr/". "$@.partial/$(GNU_TARGET)" touch "$@.partial" mv "$@.partial" "$@" endif @@ -171,25 +171,27 @@ else cp -r "$(PREFIX)/libtool-install/". "$@.partial" @#TODO: how to make this not conflict with libc? rm -f "$@.partial/lib/gcc/$(GNU_TARGET)/13.2.0/include/limits.h" -# libgcc +# libgcc and bare features of libstdcxx export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \ - $(MAKE) -C "$(ROOT)/$(GCC_TARGET)/build" all-target-libgcc && \ - $(MAKE) -C "$(ROOT)/$(GCC_TARGET)/build" install-target-libgcc DESTDIR="$(ROOT)/$@-build.partial/usr" + $(MAKE) -C "$(ROOT)/$(GCC_TARGET)/build" all-target-libgcc all-target-libstdc++-v3 && \ + $(MAKE) -C "$(ROOT)/$(GCC_TARGET)/build" install-target-libgcc install-target-libstdc++-v3 DESTDIR="$(ROOT)/$@-build.partial/usr" cp -r "$@-build.partial/usr/". "$@.partial" -# libstdcxx, bare features - export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \ - export CI=1 COOKBOOK_CLEAN_BUILD=true "COOKBOOK_HOST_SYSROOT=$(ROOT)/$@.partial" COOKBOOK_CROSS_TARGET=$(HOST_TARGET) COOKBOOK_CROSS_GNU_TARGET=$(HOST_GNU_TARGET) && \ - ./target/release/repo cook libstdcxx-v3 - cp -r "$(LIBSTDCXX_TARGET)/stage/usr/". "$@.partial" -# libstdcxx, full features + @#TODO: in riscv64gc libgcc_s.so is a GNU ld script + rm -f "$@.partial"/$(GNU_TARGET)/lib/libgcc_s.so + ln -s libgcc_s.so.1 "$@.partial"/$(GNU_TARGET)/lib/libgcc_s.so +# fully featured libstdcxx, not supported for targets only supporting static linking +ifneq ($(TARGET),riscv64gc-unknown-redox) +ifneq ($(TARGET),i586-unknown-redox) export PATH="$(ROOT)/$@.partial/bin:$$PATH" && \ export CI=1 COOKBOOK_CLEAN_BUILD=true "COOKBOOK_HOST_SYSROOT=$(ROOT)/$@.partial" COOKBOOK_CROSS_TARGET=$(HOST_TARGET) && \ rm -rf "$(LIBSTDCXX_TARGET)/stage" && ./target/release/repo cook libstdcxx-v3 cp -r "$(LIBSTDCXX_TARGET)/stage/usr/". "$@.partial/$(GNU_TARGET)" +endif +endif rm -rf "$@-build.partial" touch "$@.partial" mv "$@.partial" "$@" -# no longer needed, delete to save disk space +# no longer needed, delete build files to save disk space rm -rf $(BINUTILS_TARGET) $(LIBTOOL_TARGET) $(GCC_TARGET) $(LIBSTDCXX_TARGET) $(RELIBC_FREESTANDING_TARGET) endif diff --git a/recipes/dev/gcc13/recipe.toml b/recipes/dev/gcc13/recipe.toml index 19866f01..4a460b0a 100644 --- a/recipes/dev/gcc13/recipe.toml +++ b/recipes/dev/gcc13/recipe.toml @@ -28,6 +28,7 @@ COOKBOOK_CONFIGURE_FLAGS=( --host="${GNU_TARGET}" --program-prefix="${CROSS_GNU_TARGET}-" --with-native-system-header-dir="/include" + --disable-hosted-libstdcxx --with-sysroot ) else @@ -55,6 +56,7 @@ COOKBOOK_CONFIGURE_FLAGS+=( --enable-host-shared --enable-threads=posix --enable-frame-pointer + --enable-libstdcxx-threads --with-bugurl="https://gitlab.redox-os.org/redox-os/gcc/-/issues" ) diff --git a/recipes/libs/libstdcxx-v3/recipe.toml b/recipes/libs/libstdcxx-v3/recipe.toml index 9499cd8e..a0d76ef0 100644 --- a/recipes/libs/libstdcxx-v3/recipe.toml +++ b/recipes/libs/libstdcxx-v3/recipe.toml @@ -6,18 +6,6 @@ template = "custom" script = """ DYNAMIC_STATIC_INIT -# this results C++ missing nice stuff like mutex -# our prefix workaround this by compiling twice -if [[ -n "$COOKBOOK_CROSS_GNU_TARGET" ]]; then -COOKBOOK_STAGE+="/usr" -COOKBOOK_CONFIGURE_FLAGS=( - --prefix="" - --host="${GNU_TARGET}" - --disable-hosted-libstdcxx - --with-cross-host="${COOKBOOK_CROSS_GNU_TARGET}" -) -fi - COOKBOOK_CONFIGURE_FLAGS+=( --enable-threads=posix --enable-libstdcxx-threads