#!/bin/bash
set -e
BUILD_MODE="$1"
BUILD_PLATFORM="$2"
TSIL_CMD="${4:-ціль}"
CLANG="$5"
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
LIST_FILE="$ROOT_DIR/БУДЦ"
BUILD_VERSION=$(cat "$ROOT_DIR/ВЕРСІЯ" | xargs)
case "$BUILD_MODE" in
debug)
TSIL_MODE="відлагодження"
;;
release)
TSIL_MODE="випуск"
;;
*)
echo "Unsupported build mode: $BUILD_MODE" >&2
exit 1 ;;
esac
case "$BUILD_PLATFORM" in
linux-i686)
TSIL_PLATFORM="ай686-пк-лінукс-гну"; TSIL_PLATFORM_FOLDER="лінукс-ай686"
TARGET_TRIPLE="i686-linux-gnu"
;;
linux-x86_64)
TSIL_PLATFORM="ікс86_64-пк-лінукс-гну"; TSIL_PLATFORM_FOLDER="лінукс-ікс86_64"
TARGET_TRIPLE="x86_64-linux-gnu"
;;
linux-aarch64)
TSIL_PLATFORM="аарч64-пк-лінукс-гну"; TSIL_PLATFORM_FOLDER="лінукс-аарч64"
TARGET_TRIPLE="aarch64-linux-gnu"
;;
macos-x86_64)
TSIL_PLATFORM="ікс86_64-епл-дарвін"; TSIL_PLATFORM_FOLDER="макос-ікс86_64"
TARGET_TRIPLE="x86_64-macos"
;;
macos-aarch64)
TSIL_PLATFORM="аарч64-епл-дарвін"; TSIL_PLATFORM_FOLDER="макос-аарч64"
TARGET_TRIPLE="aarch64-macos"
;;
windows-x86_64)
TSIL_PLATFORM="ікс86_64-пк-віндовс-гну"; TSIL_PLATFORM_FOLDER="віндовс-ікс86_64"
TARGET_TRIPLE="x86_64-windows-gnu"
;;
windows-aarch64)
TSIL_PLATFORM="аарч64-пк-віндовс-гну"; TSIL_PLATFORM_FOLDER="віндовс-аарч64"
TARGET_TRIPLE="aarch64-windows-gnu"
;;
msvc-x86_64)
TSIL_PLATFORM="ікс86_64-пк-віндовс-мсвс"; TSIL_PLATFORM_FOLDER="мсвс-ікс86_64"
TARGET_TRIPLE="x86_64-windows-msvc"
;;
msvc-aarch64)
TSIL_PLATFORM="аарч64-пк-віндовс-мсвс"; TSIL_PLATFORM_FOLDER="мсвс-аарч64"
TARGET_TRIPLE="aarch64-windows-msvc"
;;
android-aarch64)
TSIL_PLATFORM="аарч64-пк-лінукс-гну"; TSIL_PLATFORM_FOLDER="андроїд-аарч64"
TARGET_TRIPLE="aarch64-linux-android24"
;;
wasm64)
TSIL_PLATFORM="васм64"; TSIL_PLATFORM_FOLDER="васм64"
TARGET_TRIPLE="wasm64-unknown-unknown"
;;
*)
echo "Unsupported platform: $BUILD_PLATFORM" >&2
exit 1 ;;
esac
SEMIREADY_DIR="$ROOT_DIR/будування/$BUILD_VERSION/$TSIL_PLATFORM_FOLDER/$TSIL_MODE/напівготове/сіанг"
if [ ! -f "$LIST_FILE" ]; then
echo "Помилка: Файл конфігурації '$LIST_FILE' не знайдено." >&2
exit 1
fi
while IFS= read -r line || [ -n "$line" ]; do
line=$(echo "$line" | xargs)
[[ -z "$line" || "$line" =~ ^# ]] && continue
mkdir -p "$SEMIREADY_DIR/$(dirname "$line")"
done < "$LIST_FILE"
OFILES=""
while IFS= read -r line || [ -n "$line" ]; do
line=$(echo "$line" | xargs)
[[ -z "$line" || "$line" =~ ^# ]] && continue
echo "переклад $line" >&2
$TSIL_CMD \
"$(realpath --relative-to="$(pwd)" "$SEMIREADY_DIR/$line.c")" -Ф=сіанг -П="$TSIL_PLATFORM" \
перекласти \
"$(realpath --relative-to="$(pwd)" "$line")" -В=./машина/КД/визначення -В=./машина/РМв1/визначення -В=./машина/визначення -В=./пристрій_мавки/визначення >&2
$CLANG -c -o "$SEMIREADY_DIR/$line.o" "$SEMIREADY_DIR/$line.c"
OFILES+=" $SEMIREADY_DIR/$line.o"
done < "$LIST_FILE"
echo "$OFILES"