Files
rix2midi/build.sh

64 lines
2.7 KiB
Bash
Raw Permalink Normal View History

2026-08-22 05:52:55 +00:00
#!/usr/bin/env bash
# ============================================================================
# build.sh —— 編譯 rix2midi《大富翁 2》RIX → MIDI 轉換器)
# ----------------------------------------------------------------------------
# 會做的事:
# 1. 找到 AdPlug負責 RIX 解碼 + OPL 晶片模擬)與 libbinioAdPlug 依賴的
# 小型 I/O 庫)——本機預設看 /tmp/AdPlug 與 /tmp/libbinio。
# 2. 若它們還沒編過,就現編一次。
# 3. 以「靜態連結」把 rix2midi 編出來 → 執行檔自給自足、不用設環境變數。
#
# 用法:
# ./build.sh
#
# 若想指定 AdPlug / binio 的位置(一般不必):
# ADPLUG=/path/to/AdPlug BINIO=/path/to/libbinio ./build.sh
#
# 編譯完成後:
# ./rix2midi ../RICHU.RIX # 轉單一個
# ./rix2midi ../ ../mid # 批次轉 ../ 裡所有 .RIX → ../mid/*.mid
# ============================================================================
set -e
cd "$(dirname "$0")"
# ---- 找到 AdPlug / libbinio優先用環境變數其次 /tmp 現成的)-----------
pick() { # pick VAR 預設值...
local v="$1"; shift
local d
for d in "$@"; do
[ -f "$d/Makefile" ] && { v="$d"; return 0; }
done
echo "$v"
}
ADPLUG="$(pick "${ADPLUG:-/tmp/AdPlug}" /tmp/AdPlug "$ADPLUG" ./vendor/AdPlug)"
BINIO="$(pick "${BINIO:-/tmp/libbinio}" /tmp/libbinio "$BINIO" ./vendor/libbinio)"
[ -f "$ADPLUG/Makefile" ] || ADPLUG=/tmp/AdPlug
[ -f "$BINIO/Makefile" ] || BINIO=/tmp/libbinio
echo "[build] AdPlug = $ADPLUG"
echo "[build] libbinio= $BINIO"
# ---- libbinio / AdPlug 若還沒編,就編(以靜態 .a 為準) ------------------
if [ ! -f "$BINIO/build/libbinio_local.a" ]; then
echo "[build] 編譯 libbinio …"
( cd "$BINIO" && make -j"$(nproc)" )
fi
if [ ! -f "$ADPLUG/build/libadplug.a" ]; then
echo "[build] 編譯 AdPlug約一分鐘…"
( cd "$ADPLUG" && make -j"$(nproc)" )
fi
[ -f "$ADPLUG/build/libadplug.a" ] || { echo "[X] 找不到 libadplug.a"; exit 1; }
[ -f "$BINIO/build/libbinio_local.a" ] || { echo "[X] 找不到 libbinio_local.a"; exit 1; }
# ---- 組編譯參數(全靜態、自給自足)-------------------------------------
INC="-I$ADPLUG/src -I$BINIO/build/inc -I$BINIO/src"
LIBS="-L$ADPLUG/build -ladplug -L$BINIO/build -lbinio_local"
echo "[build] 開始編譯 rix2midi.c++(實為 .cpp…"
g++ -std=c++14 -O1 -Wall $INC rix2midi.cpp -o rix2midi $LIBS
# ---- 驗證執行檔能跑 ------------------------------------------------------
echo
echo "[build] 完成!執行檔:$(pwd)/rix2midi"
./rix2midi --help | head -5
echo "範例: ./rix2midi ../RICHU.RIX 或 ./rix2midi ../ ../mid"