3
3
# RefindPlusBuilder.sh
4
4
# A script to build RefindPlus
5
5
#
6
- # Copyright (c) 2020-2024 Dayo Akanji
6
+ # Copyright (c) 2020-2025 Dayo Akanji
7
7
# MIT-0 License
8
8
# ##
9
9
@@ -40,27 +40,21 @@ msg_error() {
40
40
41
41
# # REVERT WORD_WRAP FIX ##
42
42
RevertWordWrap () {
43
+ export PATH=" ${ORIG_PATH} " ;
44
+ if [ -f " ${MAKEFILE_ORIG} " ] ; then
45
+ mv -f " ${MAKEFILE_ORIG} " " ${MAKEFILE_BASE} " || true
46
+ fi
43
47
if [ " ${WORD_WRAP} " == ' 0' ] ; then
44
48
# Enable WordWrap
45
49
tput smam
46
50
fi
47
51
}
48
52
49
- # # REVERT SHASUM FIX ##
50
- RevertShasumFix () {
51
- if [ " ${SHASUM_FIX} " == ' true' ] ; then
52
- mv -f " ${TMP_SHASUM} " " ${DUP_SHASUM} "
53
- fi
54
- }
55
-
56
53
# # ERROR HANDLERS ##
57
54
trapINT () { # $1: message
58
55
# Declare Local Variables
59
56
local errMessage
60
57
61
- # In case it was stopped while shasum is unset
62
- RevertShasumFix ;
63
-
64
58
# Revert Word Wrap Fix
65
59
RevertWordWrap ;
66
60
@@ -77,9 +71,6 @@ runErr() { # $1: message
77
71
# Declare Local Variables
78
72
local errMessage
79
73
80
- # In case it failed while shasum is unset
81
- RevertShasumFix ;
82
-
83
74
# Revert Word Wrap Fix
84
75
RevertWordWrap ;
85
76
@@ -96,6 +87,7 @@ trap trapINT SIGINT
96
87
97
88
98
89
# Set Script Params
90
+ ORIG_PATH=" ${PATH} "
99
91
DONE_ONE=" False"
100
92
101
93
BUILD_BRANCH=" ${1:- GOPFix} "
116
108
if [ " ${BUILD_TYPE} " == ' REL' ] || [ " ${BUILD_TYPE} " == ' NPT' ] ; then
117
109
RUN_DBG=" False"
118
110
fi
119
- if [ " ${BUILD_TYPE} " == ' ALL' ] || [ " ${BUILD_TYPE} " == ' NPT' ] || ( [ " ${BUILD_TYPE} " != ' REL' ] && [ " ${BUILD_TYPE} " != ' DBG' ] && [ " ${BUILD_TYPE} " != ' SOME' ] ) ; then
111
+ if [ " ${BUILD_TYPE} " == ' ALL' ] || [ " ${BUILD_TYPE} " == ' NPT' ] \
112
+ || ([ " ${BUILD_TYPE} " != ' REL' ] && [ " ${BUILD_TYPE} " != ' DBG' ] && \
113
+ [ " ${BUILD_TYPE} " != ' SOME' ]) ; then
120
114
RUN_NPT=" True"
121
115
fi
122
116
@@ -139,40 +133,45 @@ BINARY_DIR_DBG="${XCODE_DIR_DBG}/X64"
139
133
BINARY_DIR_NPT=" ${XCODE_DIR_NPT} /X64"
140
134
OUTPUT_DIR=" ${EDK2_DIR} /000-BOOTx64-Files"
141
135
OUR_SHASUM=' /usr/bin/shasum'
142
- DUP_SHASUM=' /usr/local/bin/shasum'
143
- TMP_SHASUM=' /usr/local/bin/_shasum'
136
+ MAKEFILE_BASE=" ${EDK2_DIR} /BaseTools/Source/C/Makefiles/header.makefile"
137
+ MAKEFILE_ORIG=" ${EDK2_DIR} /BaseTools/Source/C/Makefiles/header.makefile-orig"
138
+
144
139
145
140
ErrMsg=" ERROR: Could not find '${EDK2_DIR} /BaseTools'"
146
141
pushd " ${EDK2_DIR} /BaseTools" > /dev/null || runErr " ${ErrMsg} "
147
- SHASUM_FIX=' false'
148
- if [ -f " ${DUP_SHASUM} " ] ; then
149
- mv -f " ${DUP_SHASUM} " " ${TMP_SHASUM} "
150
- SHASUM_FIX=' true'
151
- fi
152
142
BASETOOLS_SHA_FILE=" ${EDK2_DIR} /000-BuildScript/BaseToolsSHA.txt"
153
143
if [ ! -f " ${BASETOOLS_SHA_FILE} " ] ; then
154
144
BASETOOLS_SHA_OLD=' Default'
155
145
else
156
146
# shellcheck disable=SC1090
157
147
source " ${BASETOOLS_SHA_FILE} " || BASETOOLS_SHA_OLD=' Default'
158
148
fi
159
- Get_Sha_Str=" $( find . -type f \( -name ' *.c' -or -name ' *.cpp' -or -name ' *.h' -or -name ' *.py' -or -name ' *.makefile' -or -name ' GNUmakefile' \) -print0 | sort -z | xargs -0 ${OUR_SHASUM} | ${OUR_SHASUM} | cut -d ' ' -f 1) "
160
- RevertShasumFix ;
149
+ Get_Sha_Str=" $( find " ${EDK2_DIR} /BaseTools" " ${EDK2_DIR} /Conf" \
150
+ -type f \( -name ' *.c' -or -name ' *.cpp' -or -name ' *.h' -or -name ' *.py' -or \
151
+ -name ' *.txt' -or -name ' *.template' -or -name ' *.makefile' -or -name ' GNUmakefile' \) \
152
+ -print0 | sort -z | xargs -0 ${OUR_SHASUM} | ${OUR_SHASUM} | cut -d ' ' -f 1) "
161
153
Get_Mac_Ver=" $( sysctl kern.osrelease | cut -d ' :' -f 2 | xargs ) "
162
154
BASETOOLS_SHA_NEW=" ${Get_Sha_Str} :${Get_Mac_Ver} "
163
155
BUILD_TOOLS=' false'
164
- if [ ! -d " ${EDK2_DIR} /BaseTools/Source/C/bin" ] || [ " ${BASETOOLS_SHA_NEW} " != " ${BASETOOLS_SHA_OLD} " ] ; then
156
+ if [ ! -d " ${EDK2_DIR} /BaseTools/Source/C/bin" ] \
157
+ || [ " ${BASETOOLS_SHA_NEW} " != " ${BASETOOLS_SHA_OLD} " ] ; then
165
158
BUILD_TOOLS=' true'
166
- echo ' #!/usr/bin/env bash' > " ${BASETOOLS_SHA_FILE} "
167
- echo " BASETOOLS_SHA_OLD='${BASETOOLS_SHA_NEW} '" >> " ${BASETOOLS_SHA_FILE} "
159
+ if [ -f " ${BASETOOLS_SHA_FILE} " ] ; then
160
+ rm -f " ${BASETOOLS_SHA_FILE} "
161
+ fi
168
162
fi
169
- popd > /dev/null || exit 1
163
+ popd > /dev/null || true
164
+
165
+ msg_base ' Export Temp "PATH"...'
166
+ export PATH=" /usr/bin:/opt/local/bin:/opt/local/sbin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/local/sbin:${PATH} "
167
+ msg_status ' ...OK' ; echo ' '
170
168
171
169
ErrMsg=" ERROR: Could not find '${WORK_DIR} '"
172
170
pushd " ${WORK_DIR} " > /dev/null || runErr " ${ErrMsg} "
173
171
msg_base " Checkout '${BUILD_BRANCH} ' branch..."
174
172
git checkout ${BUILD_BRANCH} > /dev/null
175
173
msg_status ' ...OK' ; echo ' '
174
+
176
175
msg_base ' Update RefindPlusPkg...'
177
176
# Remove Later - START #
178
177
rm -fr " ${EDK2_DIR} /RefindPkg"
@@ -183,38 +182,70 @@ if [ ! -L "${EDK2_DIR}/RefindPlusPkg" ]; then
183
182
ln -s " ${WORK_DIR} " " ${EDK2_DIR} /RefindPlusPkg"
184
183
fi
185
184
msg_status ' ...OK' ; echo ' '
186
- popd > /dev/null || exit 1
185
+ popd > /dev/null || true
187
186
188
187
if [ " ${BUILD_TOOLS} " == ' true' ] ; then
189
188
ErrMsg=" ERROR: Could not find '${EDK2_DIR} /BaseTools/Source/C'"
190
189
pushd " ${EDK2_DIR} /BaseTools/Source/C" > /dev/null || runErr " ${ErrMsg} "
191
190
msg_base ' Make Clean...'
192
191
make clean
193
192
msg_status ' ...OK' ; echo ' '
194
- popd > /dev/null || exit 1
193
+ popd > /dev/null || true
194
+
195
+ msg_base ' Update Temp Makefile...'
196
+ if [ -f " ${MAKEFILE_ORIG} " ] ; then
197
+ cp -f " ${MAKEFILE_ORIG} " " ${MAKEFILE_BASE} "
198
+ else
199
+ cp -f " ${MAKEFILE_BASE} " " ${MAKEFILE_ORIG} "
200
+ fi
201
+ CFLAGS=-Wno-pointer-to-int-cast
202
+ BUILD_CFLAGS+=($CFLAGS )
203
+ BUILD_CXXFLAGS+=($CFLAGS )
204
+ # CC_FLAGS+=($CFLAGS)
205
+ (
206
+ echo " "
207
+ echo " BUILD_CFLAGS += $BUILD_CFLAGS "
208
+ echo " BUILD_CXXFLAGS += $BUILD_CXXFLAGS "
209
+ ) >> " ${MAKEFILE_BASE} "
210
+ msg_status ' ...OK' ; echo ' '
195
211
196
212
ErrMsg=" ERROR: Could not find '${EDK2_DIR} '"
197
213
pushd " ${EDK2_DIR} " > /dev/null || runErr " ${ErrMsg} "
198
214
msg_base ' Make BaseTools...'
199
215
make -C BaseTools/Source/C
216
+ echo ' #!/usr/bin/env bash' > " ${BASETOOLS_SHA_FILE} "
217
+ echo " BASETOOLS_SHA_OLD='${BASETOOLS_SHA_NEW} '" >> " ${BASETOOLS_SHA_FILE} "
218
+ msg_status ' ...OK' ; echo ' '
219
+ popd > /dev/null || true
220
+
221
+ msg_base ' Update BaseTools SHA...'
222
+ echo ' #!/usr/bin/env bash' > " ${BASETOOLS_SHA_FILE} "
223
+ echo " BASETOOLS_SHA_OLD='${BASETOOLS_SHA_NEW} '" >> " ${BASETOOLS_SHA_FILE} "
224
+ msg_status ' ...OK' ; echo ' '
225
+
226
+ msg_base ' Discard Temp Makefile...'
227
+ if [ -f " ${MAKEFILE_ORIG} " ] ; then
228
+ mv -f " ${MAKEFILE_ORIG} " " ${MAKEFILE_BASE} " || true
229
+ fi
200
230
msg_status ' ...OK' ; echo ' '
201
- popd > /dev/null || exit 1
202
231
fi
203
232
204
233
205
234
# Basic clean up
235
+ echo ' '
206
236
clear
207
237
msg_info " ## RefindPlusBuilder - Initial Clean Up ## : ${BUILD_BRANCH} "
208
238
msg_info ' ##--------------------------------------##'
239
+ msg_base ' Misc Item Fixup...'
209
240
rm -fr " ${EDK2_DIR} /Build"
210
241
rm -fr " ${OUTPUT_DIR} "
211
242
mkdir -p " ${EDK2_DIR} /Build"
212
243
mkdir -p " ${OUTPUT_DIR} "
213
-
214
-
244
+ msg_status ' ...OK' ; echo ' '
215
245
216
246
# Build RELEASE version
217
247
if [ " ${RUN_REL} " == ' True' ] ; then
248
+ echo ' '
218
249
clear
219
250
msg_info " ## RefindPlusBuilder - Building REL Version ## : ${BUILD_BRANCH} "
220
251
msg_info ' ##------------------------------------------##'
@@ -225,7 +256,15 @@ if [ "${RUN_REL}" == 'True' ] ; then
225
256
if [ -d " ${EDK2_DIR} /Build" ] ; then
226
257
cp " ${BINARY_DIR_REL} /RefindPlus.efi" " ${OUTPUT_DIR} /BOOTx64-REL.efi"
227
258
fi
228
- popd > /dev/null || exit 1
259
+ for file in " ${BINARY_DIR_REL} " /* .efi; do
260
+ filetag=$( basename " ${file% .efi} " )
261
+ if [[ " ${filetag} " == ' gptsync' || " ${filetag} " == ' RefindPlus' ]]; then
262
+ mv " ${file} " " ${BINARY_DIR_REL} /x64_${filetag} _REL.efi"
263
+ else
264
+ mv " ${file} " " ${BINARY_DIR_REL} /DRIVER_REL--x64_${filetag} .efi"
265
+ fi
266
+ done
267
+ popd > /dev/null || true
229
268
echo ' '
230
269
msg_info " Completed REL Build on '${BUILD_BRANCH} ' Branch of RefindPlus"
231
270
DONE_ONE=" True"
@@ -250,7 +289,15 @@ if [ "${RUN_DBG}" == 'True' ] ; then
250
289
if [ -d " ${EDK2_DIR} /Build" ] ; then
251
290
cp -f " ${BINARY_DIR_DBG} /RefindPlus.efi" " ${OUTPUT_DIR} /BOOTx64-DBG.efi"
252
291
fi
253
- popd > /dev/null || exit 1
292
+ for file in " ${BINARY_DIR_DBG} " /* .efi; do
293
+ filetag=$( basename " ${file% .efi} " )
294
+ if [[ " ${filetag} " == ' gptsync' || " ${filetag} " == ' RefindPlus' ]]; then
295
+ mv " ${file} " " ${BINARY_DIR_DBG} /x64_${filetag} _DBG.efi"
296
+ else
297
+ mv " ${file} " " ${BINARY_DIR_DBG} /DRIVER_DBG--x64_${filetag} .efi"
298
+ fi
299
+ done
300
+ popd > /dev/null || true
254
301
echo ' '
255
302
msg_info " Completed DBG Build on '${BUILD_BRANCH} ' Branch of RefindPlus"
256
303
DONE_ONE=" True"
@@ -275,7 +322,15 @@ if [ "${RUN_NPT}" == 'True' ] ; then
275
322
if [ -d " ${EDK2_DIR} /Build" ] ; then
276
323
cp -f " ${BINARY_DIR_NPT} /RefindPlus.efi" " ${OUTPUT_DIR} /BOOTx64-NPT.efi"
277
324
fi
278
- popd > /dev/null || exit 1
325
+ for file in " ${BINARY_DIR_NPT} " /* .efi; do
326
+ filetag=$( basename " ${file% .efi} " )
327
+ if [[ " ${filetag} " == ' gptsync' || " ${filetag} " == ' RefindPlus' ]]; then
328
+ mv " ${file} " " ${BINARY_DIR_NPT} /x64_${filetag} _NPT.efi"
329
+ else
330
+ mv " ${file} " " ${BINARY_DIR_NPT} /DRIVER_NPT--x64_${filetag} .efi"
331
+ fi
332
+ done
333
+ popd > /dev/null || true
279
334
echo ' '
280
335
msg_info " Completed NPT Build on '${BUILD_BRANCH} ' Branch of RefindPlus"
281
336
DONE_ONE=" True"
0 commit comments