From eac81e8e95c9f4c6fee31c885b2fbab6cf0106af Mon Sep 17 00:00:00 2001 From: elysia Date: Mon, 25 May 2026 11:27:06 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20macOS=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98=E5=8C=96=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: elysia --- .github/workflows/release.yaml | 83 +++++++-- scripts/make | 307 ++++++++++++++++++++++++++------- 2 files changed, 308 insertions(+), 82 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 2eb8a37..efd024e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -17,6 +17,8 @@ jobs: os: - ubuntu-22.04 - ubuntu-22.04-arm + - macos-26-intel + - macos-26 version: - stable - mainline @@ -27,36 +29,86 @@ jobs: - loongarch64-unknown-linux-musl exclude: - target: loongarch64-unknown-linux-musl - version: baseline - + version: baseline + steps: - name: Checkout uses: actions/checkout@v6 with: fetch-depth: 1 + - name: Prepare runner + id: runner + shell: bash + run: | + case "${{ matrix.os }}" in + ubuntu-22.04) + echo "host_tag=linux-x86_64" >> "$GITHUB_OUTPUT" + echo "macos=false" >> "$GITHUB_OUTPUT" + ;; + ubuntu-22.04-arm) + echo "host_tag=linux-aarch64" >> "$GITHUB_OUTPUT" + echo "macos=false" >> "$GITHUB_OUTPUT" + ;; + macos-26-intel) + echo "host_tag=darwin-x86_64" >> "$GITHUB_OUTPUT" + echo "macos=true" >> "$GITHUB_OUTPUT" + ;; + macos-26) + echo "host_tag=darwin-arm64" >> "$GITHUB_OUTPUT" + echo "macos=true" >> "$GITHUB_OUTPUT" + ;; + *) + echo "Unsupported runner: ${{ matrix.os }}" >&2 + exit 1 + ;; + esac - name: Build + shell: bash run: | - sudo rm -rf /opt/x-tools - ./scripts/make ${{ matrix.target }} ${{ matrix.version }} + set -euo pipefail + file_name="${{ steps.runner.outputs.host_tag }}-cross-tools-${{ matrix.target }}-${{ matrix.version }}" + + if [[ "${{ steps.runner.outputs.macos }}" == "true" ]]; then + ulimit -n 2048 + image="$RUNNER_TEMP/cross-tools.sparseimage" + mount_point="$RUNNER_TEMP/cross-tools-case-sensitive" + + mkdir -p "$mount_point" + hdiutil create -size 200g -type SPARSE -fs APFSX -volname cross-tools "$image" + hdiutil attach "$image" -mountpoint "$mount_point" + trap 'cd "$GITHUB_WORKSPACE"; hdiutil detach "$mount_point" || true' EXIT + + rsync -a --delete "$GITHUB_WORKSPACE/" "$mount_point/workspace/" + pushd "$mount_point/workspace" + HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} + popd + + cp "$mount_point/workspace/${file_name}.tar.xz" "$GITHUB_WORKSPACE/" + cp "$mount_point/workspace/${file_name}.tar.xz.sha256" "$GITHUB_WORKSPACE/" + else + sudo rm -rf /opt/x-tools + HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} + fi - name: Generate file + id: package run: | - file_name="$(uname -m)-cross-tools-${{ matrix.target }}-${{ matrix.version }}" - echo "file_name=${file_name}" >> $GITHUB_ENV + file_name="${{ steps.runner.outputs.host_tag }}-cross-tools-${{ matrix.target }}-${{ matrix.version }}" + echo "file_name=${file_name}" >> "$GITHUB_OUTPUT" ls -al - name: Upload package uses: actions/upload-artifact@v7 with: - name: ${{ env.file_name }}.tar.xz - path: ${{ env.file_name }}.tar.xz + name: ${{ steps.package.outputs.file_name }}.tar.xz + path: ${{ steps.package.outputs.file_name }}.tar.xz if-no-files-found: error retention-days: 1 - name: Upload checksum uses: actions/upload-artifact@v7 with: - name: ${{ env.file_name }}.tar.xz.sha256 - path: ${{ env.file_name }}.tar.xz.sha256 + name: ${{ steps.package.outputs.file_name }}.tar.xz.sha256 + path: ${{ steps.package.outputs.file_name }}.tar.xz.sha256 if-no-files-found: error retention-days: 1 @@ -77,16 +129,17 @@ jobs: pattern: "*.tar.*" merge-multiple: true - name: Create release + id: release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -x tag_name="$(date +%Y%m%d)" - echo "tag_name=${tag_name}" >> $GITHUB_ENV + echo "tag_name=${tag_name}" >> "$GITHUB_OUTPUT" gh release create ${tag_name} --title "${tag_name}" --generate-notes || true - name: Generate checksums run: | - echo "**Supported targets**: [${{ env.tag_name }}](https://github.com/${{ github.repository }}/tree/${{ env.tag_name }}#supported-targets)" > RELEASE.md + echo "**Supported targets**: [${{ steps.release.outputs.tag_name }}](https://github.com/${{ github.repository }}/tree/${{ steps.release.outputs.tag_name }}#supported-targets)" > RELEASE.md echo "| Filename | Sha256sum |" >> RELEASE.md echo "| -------- | --------- |" >> RELEASE.md for i in release/*.sha256; do @@ -97,7 +150,7 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | for i in release/*.tar.xz; do - # gh release upload ${{ env.tag_name }} $i $i.sha256 - gh release upload ${{ env.tag_name }} $i + # gh release upload ${{ steps.release.outputs.tag_name }} $i $i.sha256 + gh release upload ${{ steps.release.outputs.tag_name }} $i done - gh release edit ${{ env.tag_name }} -F RELEASE.md + gh release edit ${{ steps.release.outputs.tag_name }} -F RELEASE.md diff --git a/scripts/make b/scripts/make index 6b1ce42..01cc5fa 100755 --- a/scripts/make +++ b/scripts/make @@ -1,89 +1,262 @@ #!/bin/bash -set -e +set -euo pipefail -TARGET=$1 -VERSION=$2 - -if [ -z "${VERSION}" ]; then - VERSION=stable -fi +TARGET=${1:-} +VERSION=${2:-stable} +OS_NAME="$(uname -s)" +ARCH_NAME="$(uname -m)" if [ -z "${TARGET}" ]; then echo "Usage: $0 " exit 1 fi -# packages -sudo apt-get update -sudo apt-get install -y --no-install-recommends \ - automake \ - bison \ - bzip2 \ - ca-certificates \ - cmake \ - curl \ - file \ - flex \ - g++ \ - gawk \ - gdb \ - git \ - gperf \ - help2man \ - libncurses-dev \ - libssl-dev \ - libtool-bin \ - lzip \ - make \ - ninja-build \ - patch \ - pkg-config \ - python3 \ - rsync \ - sudo \ - texinfo \ - unzip \ - wget \ - xz-utils \ - libssl-dev \ - libffi-dev - -# crosstool-ng -if [ ! -e /usr/bin/ct-ng ]; then - if [ $VERSION != "latest" ]; then +case "${OS_NAME}" in + Linux) + HOST_OS=linux + MAKE=make + TAR=tar + JOBS="$(nproc)" + if [ -z "${HOST_TAG:-}" ]; then + case "${ARCH_NAME}" in + x86_64) HOST_TAG=linux-x86_64 ;; + aarch64|arm64) HOST_TAG=linux-aarch64 ;; + *) HOST_TAG="linux-${ARCH_NAME}" ;; + esac + fi + ;; + Darwin) + HOST_OS=darwin + MAKE=gmake + TAR=gtar + JOBS="$(sysctl -n hw.ncpu)" + if [ -z "${HOST_TAG:-}" ]; then + case "${ARCH_NAME}" in + x86_64) HOST_TAG=darwin-x86_64 ;; + arm64|aarch64) HOST_TAG=darwin-arm64 ;; + *) HOST_TAG="darwin-${ARCH_NAME}" ;; + esac + fi + ;; + *) + echo "Unsupported host OS: ${OS_NAME}" + exit 1 + ;; +esac + +checksum_file() { + local file=$1 + + if command -v sha256sum >/dev/null 2>&1; then + sha256sum "${file}" | awk '{ print $1 }' + elif command -v gsha256sum >/dev/null 2>&1; then + gsha256sum "${file}" | awk '{ print $1 }' + else + shasum -a 256 "${file}" | awk '{ print $1 }' + fi +} + +install_linux_packages() { + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + automake \ + bison \ + bzip2 \ + ca-certificates \ + cmake \ + curl \ + file \ + flex \ + g++ \ + gawk \ + gdb \ + git \ + gperf \ + help2man \ + libncurses-dev \ + libssl-dev \ + libtool-bin \ + lzip \ + make \ + ninja-build \ + patch \ + pkg-config \ + python3 \ + rsync \ + sudo \ + texinfo \ + unzip \ + wget \ + xz-utils \ + libffi-dev +} + +install_darwin_packages() { + brew update + brew install \ + autoconf \ + automake \ + bash \ + bison \ + cmake \ + coreutils \ + curl \ + flex \ + gawk \ + gcc \ + gettext \ + gnu-sed \ + gnu-tar \ + gnu-which \ + gperf \ + help2man \ + libtool \ + lzip \ + make \ + ncurses \ + ninja \ + pkg-config \ + python \ + texinfo \ + wget \ + xz + + local brew_prefix gcc_bin gcc_version gxx_bin + brew_prefix="$(brew --prefix)" + export PATH="${brew_prefix}/opt/bison/bin:${brew_prefix}/opt/flex/bin:${brew_prefix}/opt/gettext/bin:${brew_prefix}/opt/gnu-sed/libexec/gnubin:${brew_prefix}/opt/gnu-tar/libexec/gnubin:${brew_prefix}/opt/gnu-which/libexec/gnubin:${brew_prefix}/opt/make/libexec/gnubin:${brew_prefix}/opt/texinfo/bin:${brew_prefix}/bin:${brew_prefix}/sbin:${HOME}/.local/bin:${PATH}" + + gcc_bin="$(find "${brew_prefix}/bin" -maxdepth 1 -type f -name 'gcc-[0-9]*' | sort -t- -k2,2n | tail -n 1)" + if [ -n "${gcc_bin}" ]; then + gcc_version="${gcc_bin##*-}" + gxx_bin="${brew_prefix}/bin/g++-${gcc_version}" + export CC="${gcc_bin}" + if [ -x "${gxx_bin}" ]; then + export CXX="${gxx_bin}" + fi + fi +} + +install_packages() { + case "${HOST_OS}" in + linux) install_linux_packages ;; + darwin) install_darwin_packages ;; + esac +} + +install_crosstool_ng() { + if command -v ct-ng >/dev/null 2>&1; then + return + fi + + local prefix + if [ "${HOST_OS}" = linux ]; then + prefix=/usr + else + prefix="${HOME}/.local" + mkdir -p "${prefix}" + export PATH="${prefix}/bin:${PATH}" + fi + + if [ "${VERSION}" != "latest" ]; then curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/crosstool-ng-1.28.0.tar.gz | tar xzf - pushd crosstool-ng-crosstool-ng-1.28.0 for i in ../targets/${TARGET}/*; do if [[ $i == *.patch ]]; then - patch -Np1 -i $i + patch -Np1 -i "$i" fi done else curl -Lf https://github.com/crosstool-ng/crosstool-ng/archive/refs/heads/master.tar.gz | tar xzf - pushd crosstool-ng-master fi + ./bootstrap - ./configure --prefix=/usr - make -j$(nproc) - sudo make install + ./configure --prefix="${prefix}" + "${MAKE}" -j"${JOBS}" + if [ "${HOST_OS}" = linux ]; then + sudo "${MAKE}" install + else + "${MAKE}" install + fi popd -fi +} + +prepare_config() { + mkdir -p build + cp "targets/${TARGET}/${VERSION}/.config" build/.config + + if [ "${HOST_OS}" = darwin ]; then + local escaped_prefix + INSTALL_DIR="${PWD}/x-tools/${TARGET}" + escaped_prefix=$(printf '%s\n' "${INSTALL_DIR}" | sed 's/[&/]/\\&/g') + sed -i.bak "s/^CT_PREFIX_DIR=.*/CT_PREFIX_DIR=\"${escaped_prefix}\"/" build/.config + rm -f build/.config.bak + + if grep -q '^CT_STATIC_TOOLCHAIN=y' build/.config; then + sed -i.bak \ + -e 's/^CT_STATIC_TOOLCHAIN=y/# CT_STATIC_TOOLCHAIN is not set/' \ + -e 's/^CT_WANTS_STATIC_LINK=y/# CT_WANTS_STATIC_LINK is not set/' \ + -e 's/^CT_WANTS_STATIC_LINK_CXX=y/# CT_WANTS_STATIC_LINK_CXX is not set/' \ + build/.config + rm -f build/.config.bak + fi + else + INSTALL_DIR="/opt/x-tools/${TARGET}" + sudo mkdir -p /opt + sudo chmod 0777 /opt + fi +} + +run_olddefconfig_if_needed() { + if [ "${HOST_OS}" != darwin ]; then + return + fi + + pushd build + ct-ng olddefconfig + popd +} + +build_toolchain() { + pushd build + export CT_ALLOW_BUILD_AS_ROOT_SURE=1 + ct-ng build || { tail -n 500 build.log; exit 1; } + popd +} + +verify_toolchain() { + local gcc="${INSTALL_DIR}/bin/${TARGET}-gcc" + local verify_dir="${PWD}/build/verify" + + "${gcc}" --version + file "${gcc}" + + mkdir -p "${verify_dir}" + printf 'int main(void) { return 0; }\n' > "${verify_dir}/smoke.c" + "${gcc}" -c "${verify_dir}/smoke.c" -o "${verify_dir}/smoke.o" + file "${verify_dir}/smoke.o" +} + +package_toolchain() { + FILE_NAME="${HOST_TAG}-cross-tools-${TARGET}-${VERSION}" + + if [ "${HOST_OS}" = linux ]; then + sudo mv "${INSTALL_DIR}" . + sudo chown -R root:root "${TARGET}" + sudo "${TAR}" -cJf "${FILE_NAME}.tar.xz" "${TARGET}" + else + mv "${INSTALL_DIR}" . + "${TAR}" -cJf "${FILE_NAME}.tar.xz" "${TARGET}" + fi + + checksum_file "${FILE_NAME}.tar.xz" > "${FILE_NAME}.tar.xz.sha256" +} -# build -sudo mkdir -p /opt -sudo chmod 0777 /opt -mkdir -p build -cp targets/${TARGET}/${VERSION}/.config build/.config -pushd build -export CT_ALLOW_BUILD_AS_ROOT_SURE=1 -ct-ng build || { tail -n 500 build.log; exit $ERRCODE; } -popd - -# tarball -sudo mv /opt/x-tools/${TARGET} . -sudo chown -R root:root ${TARGET} - -FILE_NAME="$(uname -m)-cross-tools-${TARGET}-${VERSION}" -sudo tar -cJf ${FILE_NAME}.tar.xz ${TARGET} -sudo sha256sum ${FILE_NAME}.tar.xz | awk '{ print $1 }' > ${FILE_NAME}.tar.xz.sha256 +install_packages +install_crosstool_ng +prepare_config +run_olddefconfig_if_needed +build_toolchain +verify_toolchain +package_toolchain From bb0024aad58233f71a57a8d1b3d51cb85d0413c2 Mon Sep 17 00:00:00 2001 From: elysia Date: Mon, 25 May 2026 11:30:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20macOS=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=B8=AD=E7=9A=84=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E6=AD=A5=E9=AA=A4=E4=BB=A5=E7=AE=80=E5=8C=96=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: elysia --- .github/workflows/release.yaml | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index efd024e..c799cea 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -70,21 +70,7 @@ jobs: if [[ "${{ steps.runner.outputs.macos }}" == "true" ]]; then ulimit -n 2048 - image="$RUNNER_TEMP/cross-tools.sparseimage" - mount_point="$RUNNER_TEMP/cross-tools-case-sensitive" - - mkdir -p "$mount_point" - hdiutil create -size 200g -type SPARSE -fs APFSX -volname cross-tools "$image" - hdiutil attach "$image" -mountpoint "$mount_point" - trap 'cd "$GITHUB_WORKSPACE"; hdiutil detach "$mount_point" || true' EXIT - - rsync -a --delete "$GITHUB_WORKSPACE/" "$mount_point/workspace/" - pushd "$mount_point/workspace" HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} - popd - - cp "$mount_point/workspace/${file_name}.tar.xz" "$GITHUB_WORKSPACE/" - cp "$mount_point/workspace/${file_name}.tar.xz.sha256" "$GITHUB_WORKSPACE/" else sudo rm -rf /opt/x-tools HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} From a8c33a61061eebee3a7e2d206d27aa85ad9d4722 Mon Sep 17 00:00:00 2001 From: elysia Date: Mon, 25 May 2026 14:11:47 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E5=9C=A8=20macOS=20=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E5=8C=85=E4=B8=AD=E6=B7=BB=E5=8A=A0=20binutils=20?= =?UTF-8?q?=E5=B9=B6=E6=9B=B4=E6=96=B0=20PATH=20=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: elysia --- scripts/make | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/make b/scripts/make index 01cc5fa..8b20305 100755 --- a/scripts/make +++ b/scripts/make @@ -98,6 +98,7 @@ install_darwin_packages() { autoconf \ automake \ bash \ + binutils \ bison \ cmake \ coreutils \ @@ -124,7 +125,7 @@ install_darwin_packages() { local brew_prefix gcc_bin gcc_version gxx_bin brew_prefix="$(brew --prefix)" - export PATH="${brew_prefix}/opt/bison/bin:${brew_prefix}/opt/flex/bin:${brew_prefix}/opt/gettext/bin:${brew_prefix}/opt/gnu-sed/libexec/gnubin:${brew_prefix}/opt/gnu-tar/libexec/gnubin:${brew_prefix}/opt/gnu-which/libexec/gnubin:${brew_prefix}/opt/make/libexec/gnubin:${brew_prefix}/opt/texinfo/bin:${brew_prefix}/bin:${brew_prefix}/sbin:${HOME}/.local/bin:${PATH}" + export PATH="${brew_prefix}/opt/binutils/bin:${brew_prefix}/opt/bison/bin:${brew_prefix}/opt/flex/bin:${brew_prefix}/opt/gettext/bin:${brew_prefix}/opt/gnu-sed/libexec/gnubin:${brew_prefix}/opt/gnu-tar/libexec/gnubin:${brew_prefix}/opt/gnu-which/libexec/gnubin:${brew_prefix}/opt/make/libexec/gnubin:${brew_prefix}/opt/texinfo/bin:${brew_prefix}/bin:${brew_prefix}/sbin:${HOME}/.local/bin:${PATH}" gcc_bin="$(find "${brew_prefix}/bin" -maxdepth 1 -type f -name 'gcc-[0-9]*' | sort -t- -k2,2n | tail -n 1)" if [ -n "${gcc_bin}" ]; then From 7e3923cc97b1b4ff022e56d8f6cd7346fac8574b Mon Sep 17 00:00:00 2001 From: elysia Date: Mon, 25 May 2026 14:19:34 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E5=9C=A8=20macOS=20=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E4=B8=AD=E6=B7=BB=E5=8A=A0=E7=A8=80=E7=96=8F=E6=8D=86?= =?UTF-8?q?=E7=BB=91=E6=94=AF=E6=8C=81=E5=B9=B6=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=90=8C=E6=AD=A5=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: elysia --- .github/workflows/release.yaml | 14 ++++++++++++++ scripts/make | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index c799cea..378f7f7 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -70,7 +70,21 @@ jobs: if [[ "${{ steps.runner.outputs.macos }}" == "true" ]]; then ulimit -n 2048 + image="$RUNNER_TEMP/cross-tools.sparsebundle" + mount_point="$RUNNER_TEMP/cross-tools-case-sensitive" + + hdiutil create -size 200g -type SPARSEBUNDLE -fs 'Case-sensitive Journaled HFS+' -volname cross-tools "$image" + mkdir -p "$mount_point" + hdiutil attach "$image" -mountpoint "$mount_point" -nobrowse + trap 'cd "$GITHUB_WORKSPACE"; hdiutil detach "$mount_point" || true' EXIT + + rsync -a --delete "$GITHUB_WORKSPACE/" "$mount_point/workspace/" + pushd "$mount_point/workspace" HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} + popd + + cp "$mount_point/workspace/${file_name}.tar.xz" "$GITHUB_WORKSPACE/" + cp "$mount_point/workspace/${file_name}.tar.xz.sha256" "$GITHUB_WORKSPACE/" else sudo rm -rf /opt/x-tools HOST_TAG="${{ steps.runner.outputs.host_tag }}" ./scripts/make ${{ matrix.target }} ${{ matrix.version }} diff --git a/scripts/make b/scripts/make index 8b20305..3aaf904 100755 --- a/scripts/make +++ b/scripts/make @@ -257,7 +257,7 @@ package_toolchain() { install_packages install_crosstool_ng prepare_config -run_olddefconfig_if_needed +# run_olddefconfig_if_needed build_toolchain verify_toolchain package_toolchain From df348437ce4b577ce74ae26a79b8866292c774d9 Mon Sep 17 00:00:00 2001 From: elysia Date: Mon, 25 May 2026 14:30:03 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=20macOS=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E8=84=9A=E6=9C=AC=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=9E=84=E5=BB=BA=E5=89=8D=E7=BC=80=E5=92=8C?= =?UTF-8?q?=E5=90=8E=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: elysia --- scripts/make | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/make b/scripts/make index 3aaf904..76dee3b 100755 --- a/scripts/make +++ b/scripts/make @@ -6,6 +6,8 @@ TARGET=${1:-} VERSION=${2:-stable} OS_NAME="$(uname -s)" ARCH_NAME="$(uname -m)" +BUILD_PREFIX="" +BUILD_SUFFIX="" if [ -z "${TARGET}" ]; then echo "Usage: $0 " @@ -131,6 +133,8 @@ install_darwin_packages() { if [ -n "${gcc_bin}" ]; then gcc_version="${gcc_bin##*-}" gxx_bin="${brew_prefix}/bin/g++-${gcc_version}" + BUILD_PREFIX="$(${gcc_bin} -dumpmachine)-" + BUILD_SUFFIX="-${gcc_version}" export CC="${gcc_bin}" if [ -x "${gxx_bin}" ]; then export CXX="${gxx_bin}" @@ -194,14 +198,14 @@ prepare_config() { sed -i.bak "s/^CT_PREFIX_DIR=.*/CT_PREFIX_DIR=\"${escaped_prefix}\"/" build/.config rm -f build/.config.bak - if grep -q '^CT_STATIC_TOOLCHAIN=y' build/.config; then - sed -i.bak \ - -e 's/^CT_STATIC_TOOLCHAIN=y/# CT_STATIC_TOOLCHAIN is not set/' \ - -e 's/^CT_WANTS_STATIC_LINK=y/# CT_WANTS_STATIC_LINK is not set/' \ - -e 's/^CT_WANTS_STATIC_LINK_CXX=y/# CT_WANTS_STATIC_LINK_CXX is not set/' \ - build/.config - rm -f build/.config.bak - fi + sed -i.bak \ + -e "s/^CT_BUILD_PREFIX=.*/CT_BUILD_PREFIX=\"${BUILD_PREFIX}\"/" \ + -e "s/^CT_BUILD_SUFFIX=.*/CT_BUILD_SUFFIX=\"${BUILD_SUFFIX}\"/" \ + -e 's/^CT_WANTS_STATIC_LINK=y/# CT_WANTS_STATIC_LINK is not set/' \ + -e 's/^CT_WANTS_STATIC_LINK_CXX=y/# CT_WANTS_STATIC_LINK_CXX is not set/' \ + -e 's/^CT_STATIC_TOOLCHAIN=y/# CT_STATIC_TOOLCHAIN is not set/' \ + build/.config + rm -f build/.config.bak else INSTALL_DIR="/opt/x-tools/${TARGET}" sudo mkdir -p /opt