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"
|