forked from UnclePunch/Training-Mode
-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathbuild.sh
More file actions
executable file
·144 lines (122 loc) · 4.13 KB
/
build.sh
File metadata and controls
executable file
·144 lines (122 loc) · 4.13 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
#! /usr/bin/env bash
set -Eeo pipefail
# ensure an iso was passed
if [ -z "${1}" ]; then
echo "Usage:"
echo " $0 <path/to/vanilla/melee.iso> [release]"
exit 1
fi
iso="${1}"
if [ "${2}" = "release" ]; then
release=true
elif [ -n "${2}" ]; then
mode="${2}"
fi
if [ ! -f "${iso}" ]; then
echo "Error: path '${iso}' does not exist!"
exit 1
fi
if [[ "$(uname)" =~ "MSYS" ]]; then
gc_fst="bin/gc_fst.exe"
hgecko="bin/hgecko.exe"
hmex="bin/hmex.exe"
xdelta="bin/xdelta.exe"
else
gc_fst="bin/gc_fst"
hgecko="bin/hgecko"
hmex="bin/hmex"
xdelta="xdelta3"
fi
# check if en or jp and use appropriate patch
header=$(${gc_fst} get-header "${iso}")
if [ "${header}" = "GALE01" ]; then
patch="patch.xdelta"
elif [ "${header}" = "GALJ01" ]; then
patch="patch_jp.xdelta"
else
echo "Error: Invalid ISO '${iso}'"
exit 1
fi
# fn to kill all processes everywhere
kill_all() {
trap "kill -- -$$" EXIT
}
# fn to build mex executable
mex_build() {
local sym="${1}"
local out="${2}"
local src="${3}"
if [[ -n "${mode}" && "${mode}" != "${out}" ]]; then
return
fi
if [ -n "${4}" ]; then
local dat="-dat ${4}"
else
local dat=""
fi
if [ "${release}" = true ]; then
local opt="-O2"
else
local opt="-DTM_DEBUG"
fi
warn="-Wall -Wextra -Wno-char-subscripts -Wno-builtin-declaration-mismatch -Wno-unused-parameter"
${hmex} -q -l "MexTK/melee.link" -f "${warn} ${opt}" -s "${sym}" -t "MexTK/${sym}.txt" -o "${out}" -i ${src} ${dat} || kill_all
echo built ${out}
}
# make build directory if necessary
mkdir -p build
# compile code in parallel
mex_build "tmFunction" "build/eventMenu.dat" "src/events.c src/menu.c src/osds.c src/savestate_v1.c" "dats/eventMenu.dat" &
mex_build "cssFunction" "build/labCSS.dat" "src/lab_css.c" "dats/labCSS.dat" &
mex_build "evFunction" "build/lab.dat" "src/lab.c" "dats/lab.dat" &
mex_build "evFunction" "build/lcancel.dat" "src/lcancel.c" "dats/lcancel.dat" &
mex_build "evFunction" "build/ledgedash.dat" "src/ledgedash.c" "dats/ledgedash.dat" &
mex_build "evFunction" "build/wavedash.dat" "src/wavedash.c" "dats/wavedash.dat" &
mex_build "evFunction" "build/powershield.dat" "src/powershield.c" &
mex_build "evFunction" "build/edgeguard.dat" "src/edgeguard.c" &
mex_build "evFunction" "build/fc.dat" "src/fc.c" "dats/ledgedash.dat" &
mex_build "evFunction" "build/sweetspot.dat" "src/sweetspot.c" &
mex_build "evFunction" "build/eggs.dat" "src/eggs.c" &
mex_build "evFunction" "build/techchase.dat" "src/techchase.c" &
mex_build "evFunction" "build/slalom.dat" "src/slalom.c" "dats/wavedash.dat" &
# wait for compilation to finish
wait
# compile asm
if [[ -z "${mode}" || "${mode}" = "build/codes.gct" ]]; then
${hgecko} -q ASM build/codes.gct
echo built build/codes.gct
fi
# build mex Start.dol
${gc_fst} read "${iso}" Start.dol build/ISOStart.dol
${xdelta} -dfs build/ISOStart.dol "Build TM Start.dol/${patch}" build/Start.dol
# copy iso over
if [ ! -f TM-CE.iso ]; then cp "${iso}" TM-CE.iso; fi
# add TM files to iso
${gc_fst} fs TM-CE.iso \
delete MvHowto.mth \
delete MvOmake15.mth \
delete MvOpen.mth \
insert TM/eventMenu.dat build/eventMenu.dat \
insert TM/lab.dat build/lab.dat \
insert TM/labCSS.dat build/labCSS.dat \
insert TM/lcancel.dat build/lcancel.dat \
insert TM/ledgedash.dat build/ledgedash.dat \
insert TM/wavedash.dat build/wavedash.dat \
insert TM/powershield.dat build/powershield.dat \
insert TM/edgeguard.dat build/edgeguard.dat \
insert TM/fc.dat build/fc.dat \
insert TM/sweetspot.dat build/sweetspot.dat \
insert TM/eggs.dat build/eggs.dat \
insert TM/techchase.dat build/techchase.dat \
insert TM/slalom.dat build/slalom.dat \
insert codes.gct build/codes.gct \
insert Start.dol build/Start.dol \
insert opening.bnr opening.bnr
${gc_fst} set-header TM-CE.iso "GTME01" "Training Mode Community Edition"
echo "built TM-CE.iso"
# build release
if [ "${2}" = "release" ]; then
${xdelta} -fs "${iso}" -e "TM-CE.iso" "TM-CE/patch.xdelta"
zip -r TM-CE.zip TM-CE/
echo "built TM-CE.zip"
fi