04b7641e85
- Add x11proto to redbear-full.toml package list - libxau recipe updated with x11proto dependency and custom build script - Fixes libxau build failure: 'Package xproto was not found'
148 lines
5.4 KiB
TOML
148 lines
5.4 KiB
TOML
[source]
|
|
git = "https://gitlab.redox-os.org/redox-os/llvm-project.git"
|
|
upstream = "https://github.com/rust-lang/llvm-project.git"
|
|
branch = "redox-2025-10-03"
|
|
shallow_clone = true
|
|
|
|
[build]
|
|
template = "custom"
|
|
dependencies = [
|
|
"zstd",
|
|
]
|
|
script = """
|
|
DYNAMIC_INIT
|
|
ARCH="$(echo "${TARGET}" | cut -d - -f1)"
|
|
|
|
# Save and unset cross-compile flags inherited from DYNAMIC_INIT so
|
|
# the host cc in the native TableGen build links against the host libc
|
|
# instead of the Redox sysroot libc (which would fail with "undefined
|
|
# reference to __libc_start_main"). These env vars are also cleared
|
|
# inside native.cmake for the sub-process, but the parent shell
|
|
# still needs them unset before generating native.cmake so that the
|
|
# generated file does not embed the cross sysroot paths. The cross
|
|
# build (cookbook_cmake below) restores them from the saved values.
|
|
_SAVED_LDFLAGS="${LDFLAGS:-}"
|
|
_SAVED_CFLAGS="${CFLAGS:-}"
|
|
_SAVED_CXXFLAGS="${CXXFLAGS:-}"
|
|
unset LDFLAGS CFLAGS CXXFLAGS
|
|
# Use /usr (host sysroot) for the native build, NOT $COOKBOOK_TOOLCHAIN
|
|
# (which points to the Redox cross sysroot). The Redox sysroot's libc.a
|
|
# (relibc) lacks __libc_start_main, causing the native cmake try_compile
|
|
# to fail with "undefined reference to __libc_start_main".
|
|
generate_cookbook_cmake_file "$COOKBOOK_HOST_TARGET" "" "/usr" native.cmake
|
|
|
|
# The generated native.cmake inherits CMAKE_C_FLAGS / CMAKE_LDFLAGS / etc.
|
|
# from the cross toolchain, which causes the host cc to link the native
|
|
# TableGen build against the Redox sysroot libc and fail with
|
|
# "undefined reference to __libc_start_main". CACHE FORCE is required
|
|
# because CMake's try_compile creates a sub-cache that re-reads the
|
|
# parent values unless they are explicitly forced in the cache.
|
|
cat >> native.cmake <<'NATIVE_EOF'
|
|
|
|
# Override cross-sysroot flags so the host cc links against the host libc.
|
|
# Also clear the LDFLAGS env var that DYNAMIC_INIT exports, because cc
|
|
# picks up -L<sysroot>/lib from it and links against the Redox libc,
|
|
# which then fails with "undefined reference to __libc_start_main".
|
|
set(CMAKE_C_FLAGS "" CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_FLAGS "" CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_FLAGS_DEBUG "" CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_FLAGS_RELEASE "" CACHE STRING "" FORCE)
|
|
set(CMAKE_C_FLAGS_DEBUG "" CACHE STRING "" FORCE)
|
|
set(CMAKE_C_FLAGS_RELEASE "" CACHE STRING "" FORCE)
|
|
set(CMAKE_LDFLAGS "" CACHE STRING "" FORCE)
|
|
set(CMAKE_LDFLAGS_DEBUG "" CACHE STRING "" FORCE)
|
|
set(CMAKE_LDFLAGS_RELEASE "" CACHE STRING "" FORCE)
|
|
set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "" FORCE)
|
|
set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "" FORCE)
|
|
set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "" CACHE STRING "" FORCE)
|
|
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "" CACHE STRING "" FORCE)
|
|
set(CMAKE_SYSROOT "" CACHE STRING "" FORCE)
|
|
set(CMAKE_FIND_ROOT_PATH "" CACHE STRING "" FORCE)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM "NEVER" CACHE STRING "" FORCE)
|
|
set(ENV{LDFLAGS} "")
|
|
set(ENV{CFLAGS} "")
|
|
set(ENV{CXXFLAGS} "")
|
|
NATIVE_EOF
|
|
|
|
case "${ARCH}" in
|
|
x86 | x86_64) LLVM_TARGETS_TO_BUILD="X86";;
|
|
aarch64) LLVM_TARGETS_TO_BUILD="AArch64";;
|
|
riscv64gc) LLVM_TARGETS_TO_BUILD="RISCV";;
|
|
esac
|
|
|
|
if [ "${COOKBOOK_HOST_SYSROOT}" = "/usr" ]; then
|
|
LLVM_TARGETS_TO_BUILD="X86;AArch64;RISCV"
|
|
fi
|
|
|
|
# This just build the LLVM library and tools just enough for Rust, to build the rest of LLVM see
|
|
# https://github.com/llvm/llvm-zorg/blob/main/zorg/buildbot/builders/annotated/standalone-build.sh
|
|
|
|
COOKBOOK_CMAKE_FLAGS+=(
|
|
-DLLVM_BUILD_LLVM_DYLIB=On
|
|
-DLLVM_LINK_LLVM_DYLIB=On
|
|
-DLLVM_INCLUDE_UTILS=On
|
|
-DLLVM_INSTALL_UTILS=On
|
|
-DLLVM_TOOL_LLVM_COV_BUILD=On
|
|
-DLLVM_TOOL_LLVM_PROFDATA_BUILD=On
|
|
-DLLVM_TARGETS_TO_BUILD="$LLVM_TARGETS_TO_BUILD"
|
|
-DLLVM_ENABLE_ZLIB=Off
|
|
-DLLVM_USE_STATIC_ZSTD=On
|
|
-DLLVM_ENABLE_LIBXML2=Off
|
|
|
|
# the rest of options that shared to clang
|
|
-DCROSS_TOOLCHAIN_FLAGS_NATIVE="-DCMAKE_TOOLCHAIN_FILE=$(realpath "${COOKBOOK_RECIPE}/native.cmake")"
|
|
-DCMAKE_CXX_FLAGS="--std=gnu++11"
|
|
-DBUILD_SHARED_LIBS=False
|
|
-DLLVM_BUILD_EXAMPLES=Off
|
|
-DLLVM_BUILD_TESTS=Off
|
|
-DLLVM_DEFAULT_TARGET_TRIPLE="${TARGET}"
|
|
-DLLVM_ENABLE_LTO=Off
|
|
-DLLVM_ENABLE_RTTI=On
|
|
-DLLVM_ENABLE_THREADS=On
|
|
-DLLVM_INCLUDE_EXAMPLES=Off
|
|
-DLLVM_INCLUDE_TESTS=Off
|
|
-DLLVM_OPTIMIZED_TABLEGEN=On
|
|
-DLLVM_TARGET_ARCH=$ARCH
|
|
-DLLVM_TOOLS_INSTALL_DIR=bin
|
|
-DLLVM_UTILS_INSTALL_DIR=bin
|
|
-DUNIX=1
|
|
)
|
|
|
|
COOKBOOK_SOURCE="$COOKBOOK_SOURCE/llvm"
|
|
# Pass cross-compile linker flags via cmake variables instead of the
|
|
# LDFLAGS env var. LDFLAGS in the environment leaks into the native
|
|
# TableGen build's cmake try_compile, causing it to link against the
|
|
# Redox relibc (which lacks __libc_start_main) instead of host glibc.
|
|
# By keeping LDFLAGS unset and passing flags through cmake, the native
|
|
# build inherits a clean environment.
|
|
if [ -n "${_SAVED_LDFLAGS}" ]; then
|
|
COOKBOOK_CMAKE_FLAGS+=(-DCMAKE_EXE_LINKER_FLAGS="${_SAVED_LDFLAGS}")
|
|
COOKBOOK_CMAKE_FLAGS+=(-DCMAKE_SHARED_LINKER_FLAGS="${_SAVED_LDFLAGS}")
|
|
fi
|
|
if [ -n "${_SAVED_CFLAGS}" ]; then
|
|
COOKBOOK_CMAKE_FLAGS+=(-DCMAKE_C_FLAGS="${_SAVED_CFLAGS}")
|
|
fi
|
|
if [ -n "${_SAVED_CXXFLAGS}" ]; then
|
|
COOKBOOK_CMAKE_FLAGS+=(-DCMAKE_CXX_FLAGS="--std=gnu++11 ${_SAVED_CXXFLAGS}")
|
|
else
|
|
COOKBOOK_CMAKE_FLAGS+=(-DCMAKE_CXX_FLAGS="--std=gnu++11")
|
|
fi
|
|
cookbook_cmake
|
|
"""
|
|
|
|
# llvm runtime
|
|
[[optional-packages]]
|
|
name = "runtime"
|
|
files = [
|
|
"usr/bin/**",
|
|
]
|
|
|
|
[[optional-packages]]
|
|
name = "dev"
|
|
dependencies = [ ".runtime" ]
|
|
files = [
|
|
"usr/include/llvm*/**",
|
|
"usr/lib/libLLVM*.a",
|
|
"usr/lib/cmake/llvm/**",
|
|
]
|