-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathbuild.sh
More file actions
executable file
·71 lines (57 loc) · 2 KB
/
build.sh
File metadata and controls
executable file
·71 lines (57 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
# Exit on error
set -e
echo "Building MacTray library (Swift + JNI bridge)..."
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
OUTPUT_DIR="${NATIVE_LIBS_OUTPUT_DIR:-$SCRIPT_DIR/../src/commonMain/resources}"
echo "Output dir for mac is: $OUTPUT_DIR"
# Detect JAVA_HOME
if [ -z "$JAVA_HOME" ]; then
JAVA_HOME=$(/usr/libexec/java_home 2>/dev/null || true)
fi
if [ -z "$JAVA_HOME" ] || [ ! -d "$JAVA_HOME" ]; then
echo "ERROR: JAVA_HOME not found. Install a JDK or set JAVA_HOME."
exit 1
fi
echo "Using JAVA_HOME: $JAVA_HOME"
JNI_INCLUDE="$JAVA_HOME/include"
JNI_INCLUDE_DARWIN="$JAVA_HOME/include/darwin"
if [ ! -f "$JNI_INCLUDE/jni.h" ]; then
echo "ERROR: jni.h not found at $JNI_INCLUDE/jni.h"
exit 1
fi
mkdir -p "$OUTPUT_DIR/darwin-aarch64"
mkdir -p "$OUTPUT_DIR/darwin-x86-64"
build_arch() {
local ARCH=$1
local TARGET=$2
local OUT_DIR=$3
echo "Building for $ARCH..."
# 1. Compile the JNI bridge (Objective-C) -> bridge.o
clang -c -o "$SCRIPT_DIR/bridge_${ARCH}.o" \
-arch "$ARCH" \
-mmacosx-version-min=11.0 \
-I "$JNI_INCLUDE" \
-I "$JNI_INCLUDE_DARWIN" \
-I "$SCRIPT_DIR" \
-fobjc-arc \
"$SCRIPT_DIR/MacTrayBridge.m"
# 2. Compile Swift + link with the bridge object -> dylib
swiftc -emit-library -o "$OUT_DIR/libMacTray.dylib" \
-module-name MacTray \
-swift-version 5 \
-target "$TARGET" \
-O -whole-module-optimization \
-framework Foundation \
-framework Cocoa \
-framework ApplicationServices \
-Xlinker -rpath -Xlinker @executable_path/../Frameworks \
-Xlinker -rpath -Xlinker @loader_path/Frameworks \
"$SCRIPT_DIR/tray.swift" \
"$SCRIPT_DIR/bridge_${ARCH}.o"
# Clean up intermediate object
rm -f "$SCRIPT_DIR/bridge_${ARCH}.o"
}
build_arch "arm64" "arm64-apple-macosx11.0" "$OUTPUT_DIR/darwin-aarch64"
build_arch "x86_64" "x86_64-apple-macosx11.0" "$OUTPUT_DIR/darwin-x86-64"
echo "Build completed successfully."