1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

7-Zip をできるだけ広範な環境で動く Universal Binary としてビルドする

1
Last updated at Posted at 2025-07-10

先日,7-zipが歴史的なバージョンアップを遂げたとのニュースがありました。

そこで,macOS環境にも 7-zip のコマンドライン版である 7zz コマンドをインストールしたいと考えます。

7zz コマンドのインストール方法

パッケージマネージャを使う場合

Homebrew の場合

$ brew install sevenzip

MacPorts の場合

$ sudo port install 7zip

公式バイナリを用いる場合

公式サイトのダウンロードページから 7-Zip for MacOS: console version をダウンロードする。

7zz バイナリの動作環境

ただし,これでインストールされる 7zz バイナリの動作環境を巡っては注意が必要です。

パッケージマネージャを使った場合

  • そのホストマシンのCPUと同じCPUアーキテクチャ用 (x86_64 or arm64)
  • 動作するOSバージョンはそのホストマシンの macOS バージョン以降

公式バイナリを使った場合

  • x86_64 + arm64 の両方を含む Universal Binary
  • 動作OSは macOS 12 Monterey 以降

となります。

これでほぼ困ることはないのですが,自分でソースコードからビルドすることで,より広い環境で動くバイナリが生成できます。次のスクリプトでビルドすると,macOS 10.15 Catalina 以降で動く 7zz コマンドのUniversal Binary が生成できます。

ビルドスクリプト

#!/usr/bin/env bash
set -eux

# 1. 変数
VERSION="25.00"
URL="https://7-zip.org/a/7z${VERSION//./}-src.tar.xz"
ORIGDIR="$(pwd)"
WORKDIR="${ORIGDIR}/sevenzip_build"
export MACOSX_DEPLOYMENT_TARGET="10.15"

# 2. ダウンロードと展開
mkdir -p "${WORKDIR}"
cd "${WORKDIR}"
curl -fL -o "7z${VERSION//./}-src.tar.xz" "${URL}"
tar xf "7z${VERSION//./}-src.tar.xz"

# 3. clang, clang++ のラッパースクリプトを生成
cd "CPP/7zip/Bundles/Alone2"

WRAPPER_DIR="${WORKDIR}/wrapper-bin"
mkdir -p "${WRAPPER_DIR}"

## clangのswitch文に関する警告を抑制
cat > "${WRAPPER_DIR}/clang" << 'EOF'
#!/usr/bin/env bash
exec /usr/bin/clang "$@" -Wno-switch-default -Wno-switch -Wno-fatal-errors
EOF

chmod +x "${WRAPPER_DIR}/clang"

## clang++のswitch文に関する警告を抑制
cat > "${WRAPPER_DIR}/clang++" << 'EOF'
#!/usr/bin/env bash
exec /usr/bin/clang++ "$@" -Wno-switch-default -Wno-switch -Wno-fatal-errors
EOF

chmod +x "${WRAPPER_DIR}/clang++"

## ラッパースクリプトが代わりに呼び出されるように
export PATH="${WRAPPER_DIR}:$PATH"
export CC="clang"
export CXX="clang++"

export CFLAGS="-arch x86_64 -arch arm64 -mmacosx-version-min=${MACOSX_DEPLOYMENT_TARGET}"

# 4. x86_64 バイナリのビルド
make -j$(sysctl -n hw.ncpu) -f ../../cmpl_mac_x64.mak DISABLE_RAR_COMPRESS=1
cp "b/m_x64/7zz" "${WORKDIR}/7zz_x86_64"
make -f ../../cmpl_mac_x64.mak clean

# 5. arm64 バイナリのビルド
make -j$(sysctl -n hw.ncpu) -f ../../cmpl_mac_arm64.mak DISABLE_RAR_COMPRESS=1
cp "b/m_arm64/7zz" "${WORKDIR}/7zz_arm64"

# 6. Universal Binary へ結合
lipo -create \
  -output "${ORIGDIR}/7zz" \
  "${WORKDIR}/7zz_x86_64" \
  "${WORKDIR}/7zz_arm64"

# 7. 結果表示
echo "Universal 7zz created at ${ORIGDIR}/7zz:"
lipo -info "${ORIGDIR}/7zz"
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?