#!/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"