diff --git a/mk/prefix.mk b/mk/prefix.mk index 6bc1dfbca..b4cbce78e 100644 --- a/mk/prefix.mk +++ b/mk/prefix.mk @@ -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_TARGET=recipes/core/relibc/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) CLANG_TARGET=recipes/dev/clang21/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 rm -f "$@.partial"/$(GNU_TARGET)/lib/libstdc++.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 export PATH="$(ROOT)/$@.partial/bin:$$PATH" \ ACLOCAL_PATH="$(LIBTOOL_PATH)/share/aclocal:$$ACLOCAL_PATH" && \ @@ -431,7 +434,7 @@ endif endif # 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) $(PODMAN_RUN) make $@ else @@ -446,9 +449,15 @@ else cp -r "$(CLANG_TARGET)/stage/usr/". "$@.partial" cp -r "$(LLD_TARGET)/stage/usr/". "$@.partial" 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" "$@" # 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 diff --git a/recipes/dev/clang21/recipe.toml b/recipes/dev/clang21/recipe.toml index b5a7b3e74..6b0bf7323 100644 --- a/recipes/dev/clang21/recipe.toml +++ b/recipes/dev/clang21/recipe.toml @@ -34,6 +34,7 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_ENABLE_LTO=Off -DLLVM_ENABLE_RTTI=On -DLLVM_ENABLE_THREADS=On + -DLLVM_INCLUDE_DOCS=Off -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_OPTIMIZED_TABLEGEN=On diff --git a/recipes/dev/llvm-rt21/recipe.toml b/recipes/dev/llvm-rt21/recipe.toml new file mode 100644 index 000000000..4ca29d9d9 --- /dev/null +++ b/recipes/dev/llvm-rt21/recipe.toml @@ -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 + +""" diff --git a/recipes/dev/llvm21/recipe.toml b/recipes/dev/llvm21/recipe.toml index f20d7b066..ce29e47b9 100644 --- a/recipes/dev/llvm21/recipe.toml +++ b/recipes/dev/llvm21/recipe.toml @@ -63,6 +63,7 @@ COOKBOOK_CMAKE_FLAGS+=( -DLLVM_ENABLE_LTO=Off -DLLVM_ENABLE_RTTI=On -DLLVM_ENABLE_THREADS=On + -DLLVM_INCLUDE_DOCS=Off -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_INCLUDE_TESTS=Off -DLLVM_OPTIMIZED_TABLEGEN=On diff --git a/recipes/groups/llvm21-common/recipe.toml b/recipes/groups/llvm21-common/recipe.toml index 0a56afd54..31327ae19 100644 --- a/recipes/groups/llvm21-common/recipe.toml +++ b/recipes/groups/llvm21-common/recipe.toml @@ -4,4 +4,5 @@ dependencies = [ "llvm21", "llvm21.runtime", "lld21", + "llvm-rt21", ] diff --git a/src/cook/script.rs b/src/cook/script.rs index 43c327079..f1ad3cd8a 100644 --- a/src/cook/script.rs +++ b/src/cook/script.rs @@ -259,6 +259,15 @@ set(CMAKE_C_COMPILER clang) set(CMAKE_NM llvm-nm) set(CMAKE_RANLIB llvm-ranlib) EOF + +if [ "$target" != "$COOKBOOK_HOST_TARGET" ]; then +cat >> $file <> $file <