Build from source for Ubuntu Desktop 22.04 LTS
ちょっとずつ Zig について試しているが、言語仕様が確定して v1.0.0 がリリースされるのは、もうちょっと先の様子で、当然、破壊的変更がmasterブランチでは、それなりに発生する。
ビルド済みのZigをダウンロードしてきて設置しても良いのだけども、masterブランチとピッタリ連動しているだけではないようなので、最新のソースコードを取得してきてビルドしながらZigについて、試していこうと思います。
メイン環境の Ubuntu Desktop 22.04 LTS 上でサクッと常に最新のZigが生成できるように、手順をまとめてみました。(まとめに記載していますが、最新だけならLinuxbrewでええんよ?)
1. パッケージを最新に更新
sudo apt update && sudo apt -y full-upgrade
一応、システム全体のパッケージをアップグレードしておきます。
不要な方はスキップして構いません。
2. 必須パッケージインストール
sudo apt update
sudo apt install -y \
libtinfo-dev \
libzstd-dev \
build-essential \
cmake \
git \
curl \
ninja-build
3. スワップ拡張
sudo mkdir -p /var/cache/swap/
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
sudo chmod 0600 /var/cache/swap/swap0
sudo mkswap /var/cache/swap/swap0
sudo swapon /var/cache/swap/swap0
sudo swapon -s
4. LLVM インストール
$ cd /tmp
$ git clone --depth 1 --branch release/15.x https://github.com/llvm/llvm-project llvm-project-15
$ cd llvm-project-15
$ git checkout release/15.x
$ mkdir build-release
$ cd build-release
$ cmake ../llvm \
-DCMAKE_INSTALL_PREFIX=$HOME/local/llvm15-release \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="lld;clang" \
-DLLVM_ENABLE_LIBXML2=OFF \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_LIBEDIT=OFF \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_PARALLEL_LINK_JOBS=1 \
-G Ninja
$ ninja install
$ cd
$ rm -rf /tmp/llvm-project-15
5. build-zig-head.sh 作成
$ cat <<EOS > ~/build-zig-head.sh
# Set PATH to llvm
export PATH="$HOME/local/llvm15-release/bin:$PATH"
# Set script directory path
SCRIPT_DIR=\$(cd \$(dirname \$0); pwd)
# Set source directory path
SOURCE_ROOT="\${SCRIPT_DIR}/source"
SOURCE_DIR="\${SOURCE_ROOT}/zig"
# Clone Zig source code from github.com
if [ ! -d \${SOURCE_DIR} ]; then
mkdir -p "\${SOURCE_ROOT}"
cd "\${SOURCE_ROOT}"
git clone https://github.com/ziglang/zig.git
fi
# Set build directory path
BUILD_DIR="\${SOURCE_DIR}/build"
# Move to source directory
cd "\${SOURCE_DIR}" || exit
# Pull from github.com
git fetch origin master
git reset --hard origin/master
# Cleanup build directory
if [ ! -d \${BUILD_DIR} ]; then
mkdir \${BUILD_DIR}
else
rm -rf \${BUILD_DIR}
mkdir \${BUILD_DIR}
fi
# Move to build directory
cd "\${BUILD_DIR}"
# Build from source
cmake ..
# Install Zig
make install
# Copt built zig to "/usr/local/bin"
if [ ! -f "/usr/local/bin/zig" ]; then
sudo cp "\${BUILD_DIR}/stage3/bin/zig" /usr/local/bin
fi
# EOF
EOS
chmod +x ~/build-zig-head.sh
6. Zig ビルド
$ bash ~/build-zig-head.sh
$ which zig
/usr/local/bin/zig
7. バージョン確認
$ zig version
0.11.0-dev.1480+f68d3c63d
次回以降は、~/build-zig-head.sh
を実行すれば、最新版のソースコードを取得し、ビルド後に/usr/local/bin/zig
として更新されます。
まとめ
コマンド叩いてほっとけば、Zigが最新になるようにスクリプトを組んでみました。
(あと、Zenn使って見たかったのもあります)
結果、Linuxbrew 入れていれば brew install zig --HEAD
でソースからビルドしてくれてインストールできるんですが、コミット辿ってビルドし直したりできるように、ローカルでのビルド環境
構築のついでに、上記の手順をまとめておきました。
Linuxbrew でインストールされたパスと切り替えるの面倒だし、LunuxbrewでZigの開発版バージョン指定方法がわからなかったというだけなんですが・・・(指定方法わかる方いたら教えてほしいです、絶対それでいいじゃんっ!てなるんで、バージョン切り替えもできるしLinuxbrew)
C/C++ からの進化という形で見ていますが、そのうちC言語で低レベル操作するのからはいるのではなく、Zigから若い子たちが入る時代も来るんですかねぇ。
ビルドしたときのバイナリサイズの小ささといい、Bunの登場でも話題になったみたいですが、ずっと実際に触れられてなかったので、まずは環境作りから。
ソースビルドしたい方のお役に立てば幸いです。
Discussion