forked from DrDonk/OC4VM
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake.sh
More file actions
executable file
·213 lines (183 loc) · 7.02 KB
/
make.sh
File metadata and controls
executable file
·213 lines (183 loc) · 7.02 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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#!/usr/bin/env zsh
# SPDX-FileCopyrightText: © 2023-2026 David Parsons
# SPDX-License-Identifier: MIT
# Enable debug mode if DEBUG environment variable is set to any non-empty value
[[ -n "$DEBUG" ]] && set -x
# Provide custom colors in Terminal for status and error messages
msg_status() {
echo "\033[0;32m$1\033[0m"
}
msg_warning() {
echo "\033[0;33m$1\033[0m"
}
msg_error() {
echo "\033[0;31m$1\033[0m"
exit 1
}
# Bail out if not macOS
msg_status "Creating OpenCore for Virtual Machines"
if [[ $OSTYPE != 'darwin'* ]]; then
msg_error 'OC4VM can only be built on macOS!'
fi
# Read current version
VERSION=$(<VERSION)
COMMIT=$(git rev-parse --short HEAD)
msg_status "Version: $VERSION Commit: $COMMIT"
# Build the ISO
build_dmg() {
# Make a copy of base image and ESXi descriptor file
mkdir -v -p $1
cp -v ./opencore/dmg/$2/opencore.iso $1/
# Attach blank DMG and create OC setup
hdiutil attach $1/opencore.iso -noverify -nobrowse -noautoopen
touch /Volumes/OPENCORE/oc4vm-$VARIANT-$VERSION-$COMMIT
cp -rv $3 /Volumes/OPENCORE/EFI/OC
mkdir -v -p /Volumes/OPENCORE/OC4VM/tools
cp -rv ./build/tools/guest/* /Volumes/OPENCORE/OC4VM/tools
cp -rv ./iso /Volumes/OPENCORE/OC4VM
rm -rf /Volumes/OPENCORE/.fseventsd
dot_clean -m /Volumes/OPENCORE
SetFile -a C /Volumes/OPENCORE
hdiutil detach /Volumes/OPENCORE -force
}
run_jinja(){
local input_file="$1"
local output_file="$2"
./utilities/minijinja-cli \
--format=toml \
-D VERSION=$VERSION \
-D COMMIT=$COMMIT \
-s comment-start="{|" \
-s comment-end="|}" \
-o $output_file \
$input_file
chmod +x $output_file
}
# Clear previous build
rm -rfv ./build 2>&1 >/dev/null
msg_status "Step 1. Compile tools"
# Fixup version/commit in tools scripts
mkdir -p ./build/tools/guest 2>&1 >/dev/null
mkdir -p ./build/tools/linux 2>&1 >/dev/null
mkdir -p ./build/tools/macos 2>&1 >/dev/null
mkdir -p ./build/tools/windows 2>&1 >/dev/null
# Build guest tools
run_jinja ./tools/guest/shrinkdisk ./build/tools/guest/shrinkdisk
run_jinja ./tools/guest/sysinfo ./build/tools/guest/sysinfo
cp -v ./tools/guest/macserial ./build/tools/guest/macserial
cp -v ./tools/guest/cpuid ./build/tools/guest/cpuid
chmod +x ./build/tools/guest/*
# Build host tools
# - Linux
run_jinja ./tools/host/common/macguest.sh ./build/tools/linux/macguest.sh
# run_jinja ./tools/host/common/regen.sh ./build/tools/linux/regen.sh
# run_jinja ./tools/host/common/cloak.sh ./build/tools/linux/cloak.sh
# run_jinja ./tools/host/common/uncloak.sh ./build/tools/linux/uncloak.sh
cp -v ./tools/host/linux/cpuid ./build/tools/linux/cpuid
cp -v ./tools/host/linux/macserial ./build/tools/linux/macserial
cp -v ./tools/host/linux/macrecovery ./build/tools/linux/macrecovery
cp -v ./tools/host/linux/recoveryOS ./build/tools/linux/recoveryOS
cp -v ./tools/host/linux/vmxtool ./build/tools/linux/vmxtool
chmod +x ./build/tools/linux/*
# - macOS
run_jinja ./tools/host/common/macguest.sh ./build/tools/macos/macguest.sh
# run_jinja ./tools/host/common/regen.sh ./build/tools/macos/regen.sh
# run_jinja ./tools/host/common/cloak.sh ./build/tools/macos/cloak.sh
# run_jinja ./tools/host/common/uncloak.sh ./build/tools/macos/uncloak.sh
cp -v ./tools/host/macos/cpuid ./build/tools/macos/cpuid
cp -v ./tools/host/macos/macserial ./build/tools/macos/macserial
cp -v ./tools/host/macos/macrecovery ./build/tools/macos/macrecovery
cp -v ./tools/host/macos/recoveryOS ./build/tools/macos/recoveryOS
cp -v ./tools/host/macos/vmxtool ./build/tools/macos/vmxtool
chmod +x ./build/tools/macos/*
# - Windows
# run_jinja ./tools/host/windows/regen.cmd ./build/tools/windows/regen.cmd
# run_jinja ./tools/host/windows/cloak.cmd ./build/tools/windows/cloak.cmd
# run_jinja ./tools/host/windows/uncloak.cmd ./build/tools/windows/uncloak.cmd
cp -v ./tools/host/windows/cpuid.exe ./build/tools/windows/cpuid.exe
cp -v ./tools/host/windows/macguest.exe ./build/tools/windows/macguest.exe
cp -v ./tools/host/windows/macserial.exe ./build/tools/windows/macserial.exe
cp -v ./tools/host/windows/macrecovery.exe ./build/tools/windows/macrecovery.exe
cp -v ./tools/host/windows/recoveryOS.exe ./build/tools/windows/recoveryOS.exe
cp -v ./tools/host/windows/vmxtool.exe ./build/tools/windows/vmxtool.exe
# Build OC4VM disk images
VARIANTS=("${(f)$(./utilities/stoml oc4vm.toml . | tr ' ' '\n')}")
for VARIANT in $VARIANTS
do
# Get description and build flag
DESCRIPTION=$(./utilities/stoml oc4vm.toml $VARIANT.DESCRIPTION)
BUILD=$(./utilities/stoml oc4vm.toml $VARIANT.BUILD)
# Check if build disabled
if [[ $BUILD == "0" ]]
then
msg_error "\nSkipping $DESCRIPTION variant!"
continue
else
msg_status "\nBuilding $DESCRIPTION variant..."
fi
# Build config.plist
msg_status "Step 2. Create config.plist for $VARIANT"
mkdir -p ./build/config/$VARIANT 2>&1 >/dev/null
./utilities/minijinja-cli \
--format=toml \
-D VERSION=$VERSION \
-D VARIANT=$VARIANT \
-D COMMIT=$COMMIT \
--select $VARIANT \
-o ./build/config/$VARIANT/config.plist \
./opencore/config.plist \
oc4vm.toml
# Tests to ensure valid plist and OC configuration
plutil -convert xml1 ./build/config/$VARIANT/config.plist
xmllint ./build/config/$VARIANT/config.plist --valid --noout
./utilities/ocvalidate ./build/config/$VARIANT/config.plist
RETURN=$?
if [ $RETURN -eq 0 ];
then
msg_status "config.plist correctly formatted"
else
msg_error "config.plist incorrectly formatted"
exit $RETURN
fi
# Build the OpenCore ISO files
msg_status "Step 3. Create ISO image for $VARIANT"
mkdir -p ./build/disks/$VARIANT
DMG=$(./utilities/stoml oc4vm.toml $VARIANT.DMG)
build_dmg ./build/disks/$VARIANT $DMG ./build/config/$VARIANT/config.plist
done
# Build the VMware templates
VARIANTS=("intel" "amd")
for VARIANT in $VARIANTS
do
msg_status "Step 4. Create VMware templates for $VARIANT"
mkdir -p ./build/vmware/$VARIANT 2>&1 >/dev/null
cp -v ./vmware/macos.plist ./build/vmware/$VARIANT 2>&1 >/dev/null
cp -v ./vmware/macos.vmdk ./build/vmware/$VARIANT 2>&1 >/dev/null
cp -v ./vmware/macos.nvram ./build/vmware/$VARIANT 2>&1 >/dev/null
cp -v ./vmware/opencore.vmdk ./build/vmware/$VARIANT 2>&1 >/dev/null
cp -v ./build/disks/$VARIANT/opencore.iso ./build/vmware/$VARIANT 2>&1 >/dev/null
if [[ $VARIANT == 'amd' ]]; then
AMD=1
else
AMD=0
fi
./utilities/minijinja-cli \
--format=toml \
-D VERSION=$VERSION \
-D COMMIT=$COMMIT \
-D DESCRIPTION="macOS ${VARIANT:u}" \
-D AMD=$AMD \
-o ./build/vmware/$VARIANT/macos.vmx \
./vmware/macos.vmx
done
msg_status "\nStep 5. Copying misc files"
cp -v LICENSE ./build/
cp -vr ./iso ./build/
cp -vr ./packages ./build/
msg_status "\nStep 6. Zipping OC4VM Release"
rm ./dist/oc4vm-$VERSION.* 2>&1 >/dev/null
7z a ./dist/oc4vm-$VERSION.zip ./build/*
cd ./dist
shasum -a 512 oc4vm-$VERSION.zip > oc4vm-$VERSION.sha512
cd ..
# eza -alT ./build