Port clang compiler-rt and libcxx

This commit is contained in:
Wildan M 2026-09-01 11:44:39 +07:00
parent 6f5aae29b3
commit a417d3484c
No known key found for this signature in database
GPG Key ID: 01AC53185C679C79
6 changed files with 66 additions and 2 deletions

View File

@ -12,6 +12,7 @@ LIBSTDCXX_TARGET=recipes/libs/libstdcxx-v3/target/$(TARGET)/$(HOST_TARGET)
RELIBC_FREESTANDING_TARGET=recipes/core/relibc/target/$(TARGET)/$(HOST_TARGET) RELIBC_FREESTANDING_TARGET=recipes/core/relibc/target/$(TARGET)/$(HOST_TARGET)
RELIBC_TARGET=recipes/core/relibc/target/$(TARGET) RELIBC_TARGET=recipes/core/relibc/target/$(TARGET)
LLVM_TARGET=recipes/dev/llvm21/target/$(HOST_TARGET)/$(TARGET) LLVM_TARGET=recipes/dev/llvm21/target/$(HOST_TARGET)/$(TARGET)
LLVM_RT_TARGET=recipes/dev/llvm-rt21/target/$(TARGET)/$(HOST_TARGET)
RUST_TARGET=recipes/dev/rust/target/$(HOST_TARGET)/$(TARGET) RUST_TARGET=recipes/dev/rust/target/$(HOST_TARGET)/$(TARGET)
CLANG_TARGET=recipes/dev/clang21/target/$(HOST_TARGET)/$(TARGET) CLANG_TARGET=recipes/dev/clang21/target/$(HOST_TARGET)/$(TARGET)
LLD_TARGET=recipes/dev/lld21/target/$(HOST_TARGET)/$(TARGET) LLD_TARGET=recipes/dev/lld21/target/$(HOST_TARGET)/$(TARGET)
@ -305,6 +306,8 @@ else
@#TODO: generates wrong lib path for libtool @#TODO: generates wrong lib path for libtool
rm -f "$@.partial"/$(GNU_TARGET)/lib/libstdc++.la rm -f "$@.partial"/$(GNU_TARGET)/lib/libstdc++.la
rm -f "$@.partial"/$(GNU_TARGET)/lib/libsupc++.la rm -f "$@.partial"/$(GNU_TARGET)/lib/libsupc++.la
@#TODO: Needed by clang, yet not emitted
ln -s crtbegin.o "$@.partial"/lib/gcc/$(GNU_TARGET)/13.2.0/crtbeginT.o
# hosted libstdcxx # hosted libstdcxx
export PATH="$(ROOT)/$@.partial/bin:$$PATH" \ export PATH="$(ROOT)/$@.partial/bin:$$PATH" \
ACLOCAL_PATH="$(LIBTOOL_PATH)/share/aclocal:$$ACLOCAL_PATH" && \ ACLOCAL_PATH="$(LIBTOOL_PATH)/share/aclocal:$$ACLOCAL_PATH" && \
@ -431,7 +434,7 @@ endif
endif endif
# BUILD CLANG --------------------------------------------------- # BUILD CLANG ---------------------------------------------------
$(PREFIX)/clang-install: | $(PREFIX)/gcc-install $(FSTOOLS_TAG) $(CONTAINER_TAG) $(PREFIX)/clang-install: | $(PREFIX)/relibc-freestanding-install $(FSTOOLS_TAG) $(CONTAINER_TAG)
ifeq ($(PODMAN_BUILD),1) ifeq ($(PODMAN_BUILD),1)
$(PODMAN_RUN) make $@ $(PODMAN_RUN) make $@
else else
@ -446,9 +449,15 @@ else
cp -r "$(CLANG_TARGET)/stage/usr/". "$@.partial" cp -r "$(CLANG_TARGET)/stage/usr/". "$@.partial"
cp -r "$(LLD_TARGET)/stage/usr/". "$@.partial" cp -r "$(LLD_TARGET)/stage/usr/". "$@.partial"
rm -rf "$@.partial/lib/"*.a rm -rf "$@.partial/lib/"*.a
echo "--sysroot=$(ROOT)/$(PREFIX)/relibc-freestanding-install" > "$@.partial/bin/$(GNU_TARGET).cfg"
export PATH="$(LIBTOOL_PATH)/bin:$(ROOT)/$@.partial/bin:$$PATH" $(PREFIX_CONFIG) \
COOKBOOK_HOST_SYSROOT=/usr COOKBOOK_CROSS_TARGET=$(HOST_TARGET) REDOXER_USE_CLANG=1 && \
$(REPO_BIN) cook llvm-rt21
cp -r "$(LLVM_RT_TARGET)/stage/usr/". "$@.partial"
echo "--sysroot=../$(GNU_TARGET)" > "$@.partial/bin/$(GNU_TARGET).cfg"
mv "$@.partial" "$@" mv "$@.partial" "$@"
# no longer needed, delete build files to save disk space # no longer needed, delete build files to save disk space
rm -rf $(CLANG_TARGET) $(LLD_TARGET) rm -rf $(CLANG_TARGET) $(LLD_TARGET) $(LLVM_RT_TARGET)
endif endif
endif endif

View File

@ -34,6 +34,7 @@ COOKBOOK_CMAKE_FLAGS+=(
-DLLVM_ENABLE_LTO=Off -DLLVM_ENABLE_LTO=Off
-DLLVM_ENABLE_RTTI=On -DLLVM_ENABLE_RTTI=On
-DLLVM_ENABLE_THREADS=On -DLLVM_ENABLE_THREADS=On
-DLLVM_INCLUDE_DOCS=Off
-DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_INCLUDE_EXAMPLES=Off
-DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_TESTS=Off
-DLLVM_OPTIMIZED_TABLEGEN=On -DLLVM_OPTIMIZED_TABLEGEN=On

View File

@ -0,0 +1,43 @@
[source]
same_as = "../llvm21"
[build]
template = "custom"
script = """
DYNAMIC_INIT
generate_cookbook_cmake_file "$COOKBOOK_HOST_TARGET" "" "$COOKBOOK_TOOLCHAIN" native.cmake
COOKBOOK_CMAKE_FLAGS+=(
-DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi"
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY
-DCOMPILER_RT_BUILD_ORC=OFF
-DCOMPILER_RT_BUILD_XRAY=OFF
-DCOMPILER_RT_BUILD_MEMPROF=OFF
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF
-DCOMPILER_RT_BUILD_SANITIZERS=OFF
-DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON
-DLIBCXX_ENABLE_LOCALIZATION=OFF # TODO: *_l functions
-DLIBCXX_ENABLE_FILESYSTEM=OFF # TODO: fstream require locales
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF # TODO: libunwind need link.h
-DLIBCXX_ENABLE_WIDE_CHARACTERS=OFF # TODO: wsctof, wsctold
-DCOMPILER_RT_INSTALL_PATH="/usr/lib/clang/21"
# the shared options from llvm
-DCMAKE_CXX_FLAGS="--std=gnu++11"
-DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET}"
-DLLVM_INCLUDE_DOCS=Off
-DLLVM_INCLUDE_EXAMPLES=Off
-DLLVM_INCLUDE_TESTS=Off
-DUNIX=1
)
COOKBOOK_SOURCE="$COOKBOOK_SOURCE/runtimes"
COOKBOOK_CMAKE_FLAGS+=(
-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=$(realpath native.cmake)"
)
cookbook_cmake
"""

View File

@ -63,6 +63,7 @@ COOKBOOK_CMAKE_FLAGS+=(
-DLLVM_ENABLE_LTO=Off -DLLVM_ENABLE_LTO=Off
-DLLVM_ENABLE_RTTI=On -DLLVM_ENABLE_RTTI=On
-DLLVM_ENABLE_THREADS=On -DLLVM_ENABLE_THREADS=On
-DLLVM_INCLUDE_DOCS=Off
-DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_INCLUDE_EXAMPLES=Off
-DLLVM_INCLUDE_TESTS=Off -DLLVM_INCLUDE_TESTS=Off
-DLLVM_OPTIMIZED_TABLEGEN=On -DLLVM_OPTIMIZED_TABLEGEN=On

View File

@ -4,4 +4,5 @@ dependencies = [
"llvm21", "llvm21",
"llvm21.runtime", "llvm21.runtime",
"lld21", "lld21",
"llvm-rt21",
] ]

View File

@ -259,6 +259,15 @@ set(CMAKE_C_COMPILER clang)
set(CMAKE_NM llvm-nm) set(CMAKE_NM llvm-nm)
set(CMAKE_RANLIB llvm-ranlib) set(CMAKE_RANLIB llvm-ranlib)
EOF EOF
if [ "$target" != "$COOKBOOK_HOST_TARGET" ]; then
cat >> $file <<EOF
set(CMAKE_C_COMPILER_TARGET ${target})
set(CMAKE_CXX_COMPILER_TARGET ${target})
set(CMAKE_ASM_COMPILER_TARGET ${target})
EOF
fi
fi fi
cat >> $file <<EOF cat >> $file <<EOF
set(CMAKE_FIND_ROOT_PATH ${sysroot}) set(CMAKE_FIND_ROOT_PATH ${sysroot})