64 lines
2.7 KiB
Bash
64 lines
2.7 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# ============================================================================
|
|||
|
|
# build.sh —— 編譯 rix2midi(《大富翁 2》RIX → MIDI 轉換器)
|
|||
|
|
# ----------------------------------------------------------------------------
|
|||
|
|
# 會做的事:
|
|||
|
|
# 1. 找到 AdPlug(負責 RIX 解碼 + OPL 晶片模擬)與 libbinio(AdPlug 依賴的
|
|||
|
|
# 小型 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"
|