-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathbuild-macos.sh
More file actions
executable file
·165 lines (144 loc) · 4.09 KB
/
build-macos.sh
File metadata and controls
executable file
·165 lines (144 loc) · 4.09 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/usr/bin/env bash
set -e
echo "=================================="
echo " OpenModSim build script (macOS) "
echo "=================================="
echo ""
# ==========================
# Check macOS
# ==========================
if [[ "$(uname)" != "Darwin" ]]; then
echo "Error: This script is for macOS only."
exit 1
fi
# ==========================
# Parse script arguments
# ==========================
QT_CHOICE=""
for arg in "$@"; do
case "$arg" in
-qt5|qt5)
QT_CHOICE="qt5"
;;
-qt6|qt6)
QT_CHOICE="qt6"
;;
*)
;;
esac
done
if [ -z "$QT_CHOICE" ]; then
QT_CHOICE="qt6"
fi
# ==========================
# Check Xcode Command Line Tools
# ==========================
echo "Checking for Xcode Command Line Tools..."
if ! xcode-select -p >/dev/null 2>&1; then
echo "Error: Xcode Command Line Tools not found."
echo "Install with: xcode-select --install"
exit 1
fi
echo " Found: $(xcode-select -p)"
# ==========================
# Check Homebrew
# ==========================
echo "Checking for Homebrew..."
if ! command -v brew >/dev/null 2>&1; then
echo "Error: Homebrew not found."
echo "Install from: https://brew.sh"
exit 1
fi
echo " Found: $(brew --prefix)"
# ==========================
# Check CMake and Ninja
# ==========================
echo "Checking for CMake..."
if ! command -v cmake >/dev/null 2>&1; then
echo "CMake not found. Installing..."
brew install cmake
fi
echo " Found: $(cmake --version | head -1)"
echo "Checking for Ninja..."
if ! command -v ninja >/dev/null 2>&1; then
echo "Ninja not found. Installing..."
brew install ninja
fi
echo " Found: ninja $(ninja --version)"
# ==========================
# Check Qt
# ==========================
echo "Checking for Qt..."
QT_PREFIX=""
QT_VERSION=""
if [ "$QT_CHOICE" = "qt6" ]; then
QT_PREFIX="$(brew --prefix qt@6 2>/dev/null || brew --prefix qt 2>/dev/null || true)"
if [ -z "$QT_PREFIX" ] || [ ! -d "$QT_PREFIX" ]; then
echo "Qt6 not found. Installing..."
brew install qt@6
QT_PREFIX="$(brew --prefix qt@6 2>/dev/null || brew --prefix qt 2>/dev/null)"
fi
QT_VERSION=$("${QT_PREFIX}/bin/qmake" -query QT_VERSION 2>/dev/null || true)
elif [ "$QT_CHOICE" = "qt5" ]; then
QT_PREFIX="$(brew --prefix qt@5 2>/dev/null || true)"
if [ -z "$QT_PREFIX" ] || [ ! -d "$QT_PREFIX" ]; then
echo "Qt5 not found. Installing..."
brew install qt@5
QT_PREFIX="$(brew --prefix qt@5 2>/dev/null)"
fi
QT_VERSION=$("${QT_PREFIX}/bin/qmake" -query QT_VERSION 2>/dev/null || true)
fi
if [ -z "$QT_VERSION" ]; then
echo "Error: Cannot detect Qt version from ${QT_PREFIX}"
exit 1
fi
echo " Found: Qt ${QT_VERSION} at ${QT_PREFIX}"
# ==========================
# Check minimum Qt version
# ==========================
MIN_QT_VERSION="5.15.0"
verlte() {
[ "$1" = "$(printf '%s\n%s' "$1" "$2" | sort -V | head -n1)" ]
}
verlt() {
[ "$1" != "$2" ] && verlte "$1" "$2"
}
if verlt "$QT_VERSION" "$MIN_QT_VERSION"; then
echo "Error: Qt >= $MIN_QT_VERSION is required, but found $QT_VERSION"
exit 1
fi
# ==========================
# Setup cmake options
# ==========================
CMAKE_QT_OPTION="-DUSE_QT5=OFF -DUSE_QT6=OFF"
if [ "$QT_CHOICE" = "qt5" ]; then
CMAKE_QT_OPTION="-DUSE_QT5=ON"
elif [ "$QT_CHOICE" = "qt6" ]; then
CMAKE_QT_OPTION="-DUSE_QT6=ON"
fi
# ==========================
# Detect architecture
# ==========================
ARCH=$(uname -m)
BUILD_TYPE=Release
# ==========================
# Build project
# ==========================
SANITIZED_QT_VERSION=$(echo "$QT_VERSION" | tr '.' '_')
BUILD_DIR="build-omodsim-Qt_${SANITIZED_QT_VERSION}_clang_${ARCH}-${BUILD_TYPE}"
echo ""
echo "Starting build in: ${BUILD_DIR}"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
cmake ../src -GNinja \
-DCMAKE_PREFIX_PATH="${QT_PREFIX}" \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
${CMAKE_QT_OPTION}
ninja
echo ""
echo "Build finished successfully!"
echo "Application bundle: ${BUILD_DIR}/omodsim.app"
echo ""
echo "To run:"
echo " open ${BUILD_DIR}/omodsim.app"
echo ""