Files
build_infra/linux_shell/build_script/lld.bash
T
2026-06-29 16:16:11 +08:00

108 lines
2.7 KiB
Bash

#!/bin/bash
if ! type "include" >/dev/null 2>&1; then
include() {
. "$(cd "$(dirname "$1")" && pwd)/${2}"
}
fi
include "${BASH_SOURCE[0]}" ./pragma_once.bash
if ! pragma_once ${BASH_SOURCE[0]}; then return 0; fi
include "${BASH_SOURCE[0]}" ./attach/export.bash
include "${BASH_SOURCE[0]}" ./patch/export.bash
include "${BASH_SOURCE[0]}" ./libc/export.bash
include "${BASH_SOURCE[0]}" ./base/export.bash
# =========================
# GLOBAL CONFIG (LLD BUILD)
# =========================
L_LLD_SRC_DIR=""
L_LLD_BUILD_DIR="/ae/bash/0_cmake_build_dir/lld"
L_LLD_INSTALL_DIR="/ae/bash/0_cmake_install_dir/lld"
L_LLD_CMAKE="/ae/opt/cmake/bin/cmake"
L_LLD_NINJA="/usr/bin/ninja"
L_LLD_TOOLCHAIN_FILE=""
L_LLD_LLVM_VERSION="llvmorg-22.1.8"
L_LLD_BUILD_TYPE="Release"
# =========================
# TOOLCHAIN SETTER
# =========================
lld_set_toolchain() {
L_LLD_TOOLCHAIN_FILE="$1"
}
lld_use_clang() {
L_LLD_TOOLCHAIN_FILE="${_library_root_dir_}/cmake_toolchain/mingw-clang.cmake"
}
lld_use_mingw() {
L_LLD_TOOLCHAIN_FILE="${_library_root_dir_}/cmake_toolchain/mingw.cmake"
}
# =========================
# BUILD LLD (CLEAN VERSION)
# =========================
build_lld() {
local src_dir=""
ensure_repo_version src_dir "llvm" "${L_LLD_LLVM_VERSION}"
L_LLD_SRC_DIR="${src_dir}/llvm"
mkdir -p "${L_LLD_BUILD_DIR}"
mkdir -p "${L_LLD_INSTALL_DIR}"
local toolchain_arg=""
if [[ -n "${L_LLD_TOOLCHAIN_FILE}" ]]; then
toolchain_arg="-DCMAKE_TOOLCHAIN_FILE=${L_LLD_TOOLCHAIN_FILE}"
fi
local cmd
cmd="${L_LLD_CMAKE} -S ${L_LLD_SRC_DIR} -B ${L_LLD_BUILD_DIR} ${toolchain_arg} -DCMAKE_INSTALL_PREFIX=${L_LLD_INSTALL_DIR} -DCMAKE_BUILD_TYPE=${L_LLD_BUILD_TYPE} -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DLLVM_ENABLE_PROJECTS=lld -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF"
exec_record "${cmd}"
exec_record "${L_LLD_CMAKE} --build ${L_LLD_BUILD_DIR} -j$(nproc)"
exec_record "${L_LLD_CMAKE} --install ${L_LLD_BUILD_DIR}"
}
# =========================
# MINGW ENTRY
# =========================
build_mingw_lld() {
local suffix="_629_1518"
L_LLD_BUILD_DIR="${_root_}/0_cmake_build_dir/lld${suffix}"
L_LLD_INSTALL_DIR="${_root_}/0_cmake_install_dir/lld${suffix}"
lld_use_mingw
build_lld
return 0
}
# =========================
# CLANG ENTRY
# =========================
build_clang_lld() {
local suffix="_clang"
local toolchain_dir="${_library_root_dir_}/linux_shell/build_script/cmake_toolchain"
L_LLD_TOOLCHAIN_FILE="${toolchain_dir}/mingw-clang.cmake"
L_LLD_BUILD_DIR="${_root_}/0_cmake_build_dir/lld${suffix}"
L_LLD_INSTALL_DIR="${_root_}/0_cmake_install_dir/lld${suffix}"
lld_use_clang
build_lld
return 0
}