72 lines
1.6 KiB
Bash
Executable File
72 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
APP_NAME="Shelf"
|
|
BUILD_DIR="build"
|
|
APP_BUNDLE="$BUILD_DIR/$APP_NAME.app"
|
|
CONTENTS="$APP_BUNDLE/Contents"
|
|
ICON_SVG="resources/shelf.svg"
|
|
|
|
find_sdk() {
|
|
local tmp="/tmp/shelf_sdk_check_$$.swift"
|
|
printf 'let _=0\n' > "$tmp"
|
|
|
|
local default_sdk
|
|
default_sdk="$(xcrun --show-sdk-path 2>/dev/null)"
|
|
|
|
if swiftc -sdk "$default_sdk" -typecheck "$tmp" 2>/dev/null; then
|
|
rm -f "$tmp"
|
|
echo "$default_sdk"
|
|
return
|
|
fi
|
|
|
|
local sdk_dir
|
|
sdk_dir="$(dirname "$default_sdk")"
|
|
|
|
for sdk in $(ls -rd "$sdk_dir"/MacOSX[0-9]*.sdk 2>/dev/null); do
|
|
if swiftc -sdk "$sdk" -typecheck "$tmp" 2>/dev/null; then
|
|
rm -f "$tmp"
|
|
echo "$sdk"
|
|
return
|
|
fi
|
|
done
|
|
|
|
rm -f "$tmp"
|
|
echo "Error: no macOS SDK compatible with installed Swift compiler" >&2
|
|
exit 1
|
|
}
|
|
|
|
MACOS_SDK="$(find_sdk)"
|
|
|
|
rm -rf "$APP_BUNDLE"
|
|
mkdir -p "$CONTENTS/MacOS" "$CONTENTS/Resources"
|
|
|
|
# Build Rust core
|
|
(cd core && cargo build --release)
|
|
|
|
# Generate icon
|
|
core/target/release/shelf-icon "$ICON_SVG" "$CONTENTS/Resources/AppIcon.icns" --nearest-neighbor
|
|
|
|
# Build Swift
|
|
swiftc \
|
|
-target arm64-apple-macosx14.0 \
|
|
-sdk "$MACOS_SDK" \
|
|
-import-objc-header bridge/shelf_core.h \
|
|
-L core/target/release \
|
|
-lshelf_core \
|
|
-framework Cocoa \
|
|
-framework SwiftUI \
|
|
-framework Carbon \
|
|
-framework UniformTypeIdentifiers \
|
|
-framework ServiceManagement \
|
|
-framework Quartz \
|
|
-O \
|
|
-o "$CONTENTS/MacOS/$APP_NAME" \
|
|
src/*.swift
|
|
|
|
cp resources/Info.plist "$CONTENTS/"
|
|
|
|
codesign --force --sign "${MACOS_SIGNING_IDENTITY:--}" "$APP_BUNDLE"
|
|
|
|
echo "Built: $APP_BUNDLE"
|