diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8674c22fa1..e500c55373 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,7 +4,6 @@ "ghcr.io/devcontainers/features/python:1": {}, "ghcr.io/devcontainers/features/sshd:1": {} }, - "postCreateCommand": "sudo sh -ce 'wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh 20'", "customizations": { "vscode": { "extensions": ["llvm-vs-code-extensions.vscode-clangd", "DavidAnson.vscode-markdownlint"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09e0862255..77baa45af2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -230,7 +230,7 @@ jobs: uses: actions/cache@v4 with: path: ./MaaDeps - key: ${{ runner.os }}-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-maadeps-${{ hashFiles('tools/maadeps-download.py', 'tools/linux-toolchain-download.py') }} + key: ${{ runner.os }}-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-maadeps-${{ hashFiles('tools/maadeps-download.py') }} - name: Bootstrap MaaDeps and Toolchain if: steps.cache-maadeps.outputs.cache-hit != 'true' @@ -238,14 +238,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | python3 tools/maadeps-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux - python3 tools/linux-toolchain-download.py ${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }} - - - name: Install llvm 20 - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 - rm llvm.sh - name: Config cmake run: | @@ -256,7 +248,7 @@ jobs: -DINSTALL_RESOURCE=ON \ -DINSTALL_PYTHON=ON \ -DMAA_HASH_VERSION='${{ needs.meta.outputs.tag }}' \ - -DCMAKE_TOOLCHAIN_FILE=cmake/linux/maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux-toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-${{ matrix.arch == 'x86_64' && 'x64' || 'arm64' }}-linux-toolchain.cmake - name: Build run: | diff --git a/.github/workflows/res-update-game.yml b/.github/workflows/res-update-game.yml index 6d999dd1bf..9b50b1de94 100644 --- a/.github/workflows/res-update-game.yml +++ b/.github/workflows/res-update-game.yml @@ -159,7 +159,7 @@ jobs: with: path: | ./MaaDeps - key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('tools/maadeps-download.py', 'tools/linux-toolchain-download.py') }} + key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('tools/maadeps-download.py') }} - name: Bootstrap MaaDeps if: steps.resupd-cache.outputs.cache-hit != 'true' && steps.maadeps-cache.outputs.cache-hit != 'true' @@ -167,15 +167,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | python3 tools/maadeps-download.py x64-linux - python3 tools/linux-toolchain-download.py x64 - - - name: Install llvm-20 - if: steps.resupd-cache.outputs.cache-hit != 'true' - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 - rm llvm.sh - name: Config cmake if: steps.resupd-cache.outputs.cache-hit != 'true' @@ -185,7 +176,7 @@ jobs: -DCMAKE_BUILD_TYPE=Release \ -DMAADEPS_TRIPLET='maa-x64-linux' \ -DBUILD_RES_UPDATER=ON \ - -DCMAKE_TOOLCHAIN_FILE=cmake/linux/maa-x64-linux-toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake - name: Build if: steps.resupd-cache.outputs.cache-hit != 'true' diff --git a/.github/workflows/smoke-testing.yml b/.github/workflows/smoke-testing.yml index e2aacadc0b..f588aeceaa 100644 --- a/.github/workflows/smoke-testing.yml +++ b/.github/workflows/smoke-testing.yml @@ -73,7 +73,7 @@ jobs: uses: actions/cache@v4 with: path: ./MaaDeps - key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('tools/maadeps-download.py', 'tools/linux-toolchain-download.py') }} + key: ${{ runner.os }}-x64-maadeps-${{ hashFiles('tools/maadeps-download.py') }} - name: Bootstrap MaaDeps if: steps.smoke-cache.outputs.cache-hit != 'true' && steps.maadeps-cache.outputs.cache-hit != 'true' @@ -81,15 +81,6 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | python3 tools/maadeps-download.py x64-linux - python3 tools/linux-toolchain-download.py x64 - - - name: Install llvm-20 - if: steps.smoke-cache.outputs.cache-hit != 'true' - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 - rm llvm.sh - name: Config cmake if: steps.smoke-cache.outputs.cache-hit != 'true' @@ -99,7 +90,7 @@ jobs: -DCMAKE_BUILD_TYPE=Debug \ -DMAADEPS_TRIPLET='maa-x64-linux' \ -DBUILD_SMOKE_TEST=ON \ - -DCMAKE_TOOLCHAIN_FILE=cmake/linux/maa-x64-linux-toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake - name: Build if: steps.smoke-cache.outputs.cache-hit != 'true' diff --git a/cmake/config.cmake b/cmake/config.cmake index e902737439..645f750ed0 100644 --- a/cmake/config.cmake +++ b/cmake/config.cmake @@ -63,7 +63,6 @@ if(LINUX) message(STATUS "${LIBNAME}.so.1 path: ${LIB_PATH_REAL}") - install(FILES "${LIB_PATH_REAL}" DESTINATION . RENAME "${LIBNAME}.so.1") install(FILES "${LIB_PATH_REAL}" DESTINATION . RENAME "${LIBNAME}.so.1" COMPONENT libcxx) get_filename_component(LIB_PATH_DIR "${LIB_PATH_REAL}" DIRECTORY) diff --git a/cmake/linux/maa-arm64-linux-toolchain.cmake b/cmake/linux/maa-arm64-linux-toolchain.cmake deleted file mode 100644 index 5c545c3f94..0000000000 --- a/cmake/linux/maa-arm64-linux-toolchain.cmake +++ /dev/null @@ -1,19 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR aarch64) - -set(XTOOLS_ROOT ${CMAKE_CURRENT_LIST_DIR}/../../MaaDeps/x-tools/aarch64-linux-gnu) -set(CMAKE_C_COMPILER_TARGET aarch64-linux-gnu) -set(CMAKE_C_COMPILER clang-20) -set(CMAKE_CXX_COMPILER_TARGET aarch64-linux-gnu) -set(CMAKE_CXX_COMPILER clang++-20) -set(CMAKE_ASM_COMPILER_TARGET aarch64-linux-gnu) -set(CMAKE_ASM_COMPILER clang-20) -set(CMAKE_SYSROOT ${XTOOLS_ROOT}/aarch64-linux-gnu/sysroot) - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT}") - -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_LINKER_TYPE LLD) diff --git a/cmake/linux/maa-x64-linux-toolchain.cmake b/cmake/linux/maa-x64-linux-toolchain.cmake deleted file mode 100644 index 9ee9f825e1..0000000000 --- a/cmake/linux/maa-x64-linux-toolchain.cmake +++ /dev/null @@ -1,19 +0,0 @@ -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_PROCESSOR x86_64) - -set(XTOOLS_ROOT ${CMAKE_CURRENT_LIST_DIR}/../../MaaDeps/x-tools/x86_64-linux-gnu) -set(CMAKE_C_COMPILER_TARGET x86_64-linux-gnu) -set(CMAKE_C_COMPILER clang-20) -set(CMAKE_CXX_COMPILER_TARGET x86_64-linux-gnu) -set(CMAKE_CXX_COMPILER clang++-20) -set(CMAKE_ASM_COMPILER_TARGET x86_64-linux-gnu) -set(CMAKE_ASM_COMPILER clang-20) -set(CMAKE_SYSROOT ${XTOOLS_ROOT}/x86_64-linux-gnu/sysroot) - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT}") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT}") - -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -stdlib=libc++ --sysroot=${CMAKE_SYSROOT} -fuse-ld=lld --gcc-toolchain=${XTOOLS_ROOT}") -set(CMAKE_LINKER_TYPE LLD) diff --git a/docs/en-us/develop/linux-tutorial.md b/docs/en-us/develop/linux-tutorial.md index c138e61521..970975ee91 100644 --- a/docs/en-us/develop/linux-tutorial.md +++ b/docs/en-us/develop/linux-tutorial.md @@ -22,9 +22,6 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r - Ubuntu/Debian ```bash - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 sudo apt install cmake ``` @@ -32,8 +29,6 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r ```bash sudo pacman -S --needed cmake - # also, llvm 20 is needed. - # clang-20, clang++-20 are required to be found in PATH ``` 2. Build third-party libraries @@ -48,7 +43,6 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r ```bash python tools/maadeps-download.py - python tools/linux-toolchain-download.py ``` If you find the libraries downloaded above cannot run on your system due to ABI version issues and you don't want to use container solutions, you can also try compiling from scratch @@ -58,8 +52,8 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r ```bash git clone https://github.com/MaaAssistantArknights/MaaDeps cd MaaDeps - # If the system is too old to install llvm 20, please consider using local build enviroment instead of cross compiling. - # The toolchain config under MaaDeps/vcpkg-overlay/triplet needs to be modified. + # If the system is too old to use our prebuilt llvm 20, please consider using local build enviroment instead of cross compiling. + # The toolchain config under MaaDeps/cmake needs to be modified. python linux-toolchain-download.py python build.py ``` @@ -70,7 +64,7 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r cmake -B build \ -DINSTALL_RESOURCE=ON \ -DINSTALL_PYTHON=ON \ - -DCMAKE_TOOLCHAIN_FILE=cmake/linux/maa-x64-linux-toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake cmake --build build ``` diff --git a/docs/zh-cn/develop/linux-tutorial.md b/docs/zh-cn/develop/linux-tutorial.md index 389210670e..cf1177aa21 100644 --- a/docs/zh-cn/develop/linux-tutorial.md +++ b/docs/zh-cn/develop/linux-tutorial.md @@ -22,9 +22,6 @@ Mac 可以使用 `tools/build_macos_universal.zsh` 脚本进行编译。建议 - Ubuntu/Debian ```bash - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh 20 sudo apt install cmake ``` @@ -32,9 +29,6 @@ Mac 可以使用 `tools/build_macos_universal.zsh` 脚本进行编译。建议 ```bash sudo pacman -S --needed cmake - # 另外, 需要安装 llvm 20 - # clang-20, clang++-20 - # 在 PATH 中需要能找到 clang-20, clang++-20 ``` 2. 构建第三方库 @@ -49,7 +43,6 @@ Mac 可以使用 `tools/build_macos_universal.zsh` 脚本进行编译。建议 ```bash python tools/maadeps-download.py - python tools/linux-toolchain-download.py ``` 如果您发现上面的方法下载的库由于 ABI 版本等原因无法在您的系统上运行且不希望使用容器等方案, 也可以尝试从头编译 @@ -59,8 +52,8 @@ Mac 可以使用 `tools/build_macos_universal.zsh` 脚本进行编译。建议 ```bash git clone https://github.com/MaaAssistantArknights/MaaDeps cd MaaDeps - # 如果系统环境过低无法安装 llvm 20, 请考虑不使用交叉编译, 直接使用本地编译环境. - # 需要调整 MaaDeps/vcpkg-overlay/triplet 中的 toolchain 配置. + # 如果系统环境过低无法使用我们预构建的 llvm 20, 请考虑不使用交叉编译, 直接使用本地编译环境. + # 需要调整 MaaDeps/cmake 中的 toolchain 配置. python linux-toolchain-download.py python build.py ``` @@ -71,7 +64,7 @@ Mac 可以使用 `tools/build_macos_universal.zsh` 脚本进行编译。建议 cmake -B build \ -DINSTALL_RESOURCE=ON \ -DINSTALL_PYTHON=ON \ - -DCMAKE_TOOLCHAIN_FILE=cmake/linux/maa-x64-linux-toolchain.cmake + -DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake cmake --build build ``` diff --git a/tools/linux-toolchain-download.py b/tools/linux-toolchain-download.py deleted file mode 100755 index 002155af94..0000000000 --- a/tools/linux-toolchain-download.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys -import urllib.request -import urllib.error -import json -import time -from pathlib import Path -import shutil - -basedir = Path(__file__).parent -maadeps_dir = Path(basedir, "..", "MaaDeps") -download_dir = Path(maadeps_dir, "tarball") - -def detect_host_arch(): - import platform - machine = platform.machine().lower() - system = platform.system().lower() - if machine in {"amd64", "x86_64"}: - machine = "x64" - elif machine in {"x86", "i386", "i486", "i586", "i686"}: - machine = "x86" - elif machine in {"armv7l", "armv7a", "arm", "arm32"}: - machine = "arm" - elif machine in {"arm64", "armv8l", "aarch64"}: - machine = "arm64" - else: - raise Exception("unsupported architecture: " + machine) - if system in {"windows", "linux"}: - pass - elif 'mingw' in system or 'cygwin' in system: - system = "windows" - elif system == "darwin": - system = "osx" - else: - raise Exception("unsupported system: " + system) - if system != "linux": - raise Exception("must on linux") - return machine - -def format_size(num, suffix="B"): - for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]: - if abs(num) < 1024.0: - return f"{num:3.1f}{unit}{suffix}" - num /= 1024.0 - return f"{num:.1f}Yi{suffix}" - - -class ProgressHook: - def __init__(self): - self.downloaded = 0 - self.last_print = 0 - - def __call__(self, block, chunk, total): - self.downloaded += chunk - t = time.monotonic() - if t - self.last_print >= 0.5 or self.downloaded == total: - self.last_print = t - if total > 0: - print(f"\r [{self.downloaded / total * 100.0:3.1f}%] {format_size(self.downloaded)} / {format_size(total)} \r", end='') - if self.downloaded == total: - print("") - - -def sanitize_filename(filename: str): - import platform - system = platform.system() - if system == "Windows": - filename = filename.translate(str.maketrans("/\\:\"?*|\0", "________")).rstrip('.') - elif system == "Darwin": - filename = filename.translate(str.maketrans("/:\0", "___")) - else: - filename = filename.translate(str.maketrans("/\0", "__")) - return filename - - -def retry_urlopen(*args, **kwargs): - import time - import http.client - for _ in range(5): - try: - resp: http.client.HTTPResponse = urllib.request.urlopen(*args, **kwargs) - return resp - except urllib.error.HTTPError as e: - if e.status == 403 and e.headers.get("x-ratelimit-remaining") == "0": - # rate limit - t0 = time.time() - reset_time = t0 + 10 - try: - reset_time = int(e.headers.get("x-ratelimit-reset", 0)) - except ValueError: - pass - reset_time = max(reset_time, t0 + 10) - print(f"rate limit exceeded, retrying after {reset_time - t0:.1f} seconds") - time.sleep(reset_time - t0) - continue - raise - - -def main(): - if len(sys.argv) == 2: - target_arch = sys.argv[1] - else: - target_arch = detect_host_arch() - print("about to download prebuilt dependency libraries for", target_arch) - # if len(sys.argv) == 1: - # print(f"to specify another triplet, run `{sys.argv[0]} `") - # print(f"e.g. `{sys.argv[0]} x64-windows`") - req = urllib.request.Request("https://api.github.com/repos/MaaXYZ/MaaLinuxToolchain/releases/latest") - token = os.environ.get("GH_TOKEN", os.environ.get("GITHUB_TOKEN", None)) - if token: - req.add_header("Authorization", f"Bearer {token}") - resp = retry_urlopen(req).read() - release = json.loads(resp) - - def split_asset_name(name: str): - if not name.endswith('.tar.xz'): - return None - name = name.replace('.tar.xz', '') - *remainder, architecture = name.rsplit('-', 1) - print(f'{name.ljust(29)} arch:{architecture}') - if architecture in { 'x64', 'arm64' }: - return architecture - return None - toolchain_asset = None - for asset in release["assets"]: - arch = split_asset_name(asset["name"]) - if arch == target_arch: - toolchain_asset = asset - if toolchain_asset: - print("found assets:") - print(" " + toolchain_asset["name"]) - download_dir.mkdir(parents=True, exist_ok=True) - for asset in [toolchain_asset]: - url = asset['browser_download_url'] - print("downloading from", url) - local_file = download_dir / sanitize_filename(asset["name"]) - urllib.request.urlretrieve(url, local_file, reporthook=ProgressHook()) - print("extracting", asset["name"]) - os.system(f'rm -rf {maadeps_dir}/x-tools') - shutil.unpack_archive(local_file, maadeps_dir) - os.system(f'chmod -R +w {maadeps_dir}/x-tools') - else: - raise Exception(f"no binary release found for {target_arch}") - -if __name__ == "__main__": - main() diff --git a/tools/maadeps-download.py b/tools/maadeps-download.py index d8f107c14b..f2bd4128a6 100644 --- a/tools/maadeps-download.py +++ b/tools/maadeps-download.py @@ -11,7 +11,7 @@ from pathlib import Path import shutil import http.client -TARGET_TAG = "v2.9.2-maa.1" +TARGET_TAG = "v2.10.0-maa.1" basedir = Path(__file__).parent.parent