1#
2# OpenBOR - http://www.ChronoCrash.com
3# -----------------------------------------------------------------------
4# All rights reserved, see LICENSE in OpenBOR root for details.
5#
6# Copyright (c) 2004 - 2018 OpenBOR Team
7#
8
9#!/bin/bash
10# Building script for all platforms
11# build.sh by SX (SumolX@gmail.com)
12
13# Used for resetting path prior to each platform.
14export OLD_PATH=$PATH
15
16# Use parellel make to speed up compilation
17export MAKEFLAGS=-j4
18
19# Display Version
20function version {
21  . ./version.sh
22  make version
23  mkdir -p releases
24  cp README ./releases/README.txt
25  cp LICENSE ./releases/LICENSE.txt
26  cp COMPILING ./releases/COMPILING.txt
27  cp translation.txt ./releases/translation.txt
28}
29
30# CleanUp Releases
31function clean {
32  make clean-releases
33}
34
35# Distribute Releases
36function distribute {
37  echo ------------------------------------------------------
38  echo "          Validating Platforms Built w/Bash"
39  echo ------------------------------------------------------
40  echo
41
42  if ! test "releases/PSP/OpenBOR/EBOOT.PBP"; then
43    echo "PSP Platform Failed To Build!"
44    exit 1
45  fi
46
47if test -e "releases/WINDOWS/OpenBOR/OpenBOR.exe"; then
48    cd ../tools/borpak/source/
49    . build.sh win
50    cp borpak.exe ../../../engine/releases/WINDOWS/OpenBOR/
51    cp ../scripts/packer.bat ../../../engine/releases/WINDOWS/OpenBOR/
52    cp ../scripts/paxplode.bat ../../../engine/releases/WINDOWS/OpenBOR/
53    cd ../../../engine
54  else
55    echo "Windows Platform Failed To Build!"
56    exit 1
57  fi
58  if ! test -e "releases/WII/OpenBOR/boot.dol"; then
59    echo "Wii Platform Failed To Build!"
60    exit 1
61  fi
62  if ! test -e "releases/OPENDINGUX/OpenBOR/OpenBOR.dge"; then
63    echo "OpenDingux Platform Failed To Build!"
64    exit 1
65  fi
66  if test -e "releases/LINUX/OpenBOR/OpenBOR"; then
67    cd ../tools/borpak/source/
68    . build.sh lin
69    cp borpak ../../../engine/releases/LINUX/OpenBOR/
70    cp ../scripts/packer ../../../engine/releases/LINUX/OpenBOR/
71    cp ../scripts/paxplode ../../../engine/releases/LINUX/OpenBOR/
72    cd ../../../engine
73  else
74    if [ `echo $HOST_PLATFORM | grep -o "Linux"` ]; then
75      echo "Linux Platform Failed To Build!"
76      exit 1
77    fi
78  fi
79  if test -e "releases/DARWIN/OpenBOR.app/Contents/MacOS/OpenBOR"; then
80    cd ../tools/borpak/source/
81    . build.sh mac
82    cp borpak ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
83    cp ../scripts/packer ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
84    cp ../scripts/paxplode ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
85    cd ../../../engine
86  else
87    echo "Darwin Platform Failed To Build!"
88    exit 1
89  fi
90
91  echo "All Platforms Created Successfully"
92  if ! test "$BUILDBATCH"; then
93    TRIMMED_URL=`svn info | grep "URL:" | sed s/URL:\ svn\+ssh//g`
94    if test -n $TRIMMED_URL;  then
95      TRIMMED_URL="svn"$TRIMMED_URL
96    fi
97    svn log $TRIMMED_URL --verbose > ./releases/VERSION_INFO.txt
98    7za a -t7z -mx9 -r -x!.svn "./releases/OpenBOR $VERSION.7z" ./releases/*
99  fi
100  echo
101}
102
103# PSP Environment && Compile
104function psp {
105  export PATH=$OLD_PATH
106  . ./environ.sh 1
107  if test $PSPDEV; then
108    make clean BUILD_PSP=1
109    make BUILD_PSP=1
110    if test -f "./EBOOT.PBP"; then
111      if test ! -e "./releases/PSP"; then
112        mkdir ./releases/PSP
113        mkdir ./releases/PSP/OpenBOR
114        mkdir ./releases/PSP/OpenBOR/Images
115        mkdir ./releases/PSP/OpenBOR/Logs
116        mkdir ./releases/PSP/OpenBOR/Paks
117        mkdir ./releases/PSP/OpenBOR/Saves
118        mkdir ./releases/PSP/OpenBOR/Modules
119      fi
120      mv EBOOT.PBP ./releases/PSP/OpenBOR/
121      mv OpenBOR.elf ./releases/PSP/OpenBOR/Modules/
122      cp ./psp/dvemgr/dvemgr.prx ./releases/PSP/OpenBOR/Modules/
123      cp ./psp/kernel/kernel.prx ./releases/PSP/OpenBOR/Modules/
124      cp ./psp/control/control.prx ./releases/PSP/OpenBOR/Modules/
125      cp ./psp/exception/exception.prx ./releases/PSP/OpenBOR/Modules/
126      cp ./resources/OpenBOR_Menu_480x272_Sony.png ./releases/PSP/OpenBOR/Images/Menu.png
127      cp ./resources/OpenBOR_Logo_480x272.png ./releases/PSP/OpenBOR/Images/Loading.png
128    fi
129    make clean BUILD_PSP=1
130  fi
131}
132
133# PS Vita Environment && Compile
134function vita {
135  export PATH=$OLD_PATH
136  . ./environ.sh 2
137  if test $VITASDK; then
138    make clean BUILD_VITA=1
139    make BUILD_VITA=1
140    if test -f "./OpenBOR.vpk"; then
141      if test ! -e "./releases/VITA"; then
142        mkdir ./releases/VITA
143      fi
144      mv OpenBOR.vpk ./releases/VITA/
145    fi
146    make clean BUILD_VITA=1
147  fi
148}
149
150# Linux Environment && Compile (common to all architectures)
151function linux {
152  export PATH=$OLD_PATH
153  export GCC_TARGET=$1
154  export TARGET_ARCH=$2
155  . ./environ.sh 4
156  if test $LNXDEV; then
157    if [[ ! $BUILD_DEBUG ]] ; then
158      make clean BUILD_LINUX=1
159    elif [[ "$TARGET_ARCH" == "amd64" ]] ; then
160      export NO_RAM_DEBUGGER=1
161    fi
162    make BUILD_LINUX=1
163    if test -f "./OpenBOR"; then
164      if test ! -e "./releases/$3"; then
165        mkdir ./releases/$3
166        mkdir ./releases/$3/OpenBOR
167        mkdir ./releases/$3/OpenBOR/Logs
168        mkdir ./releases/$3/OpenBOR/Paks
169        mkdir ./releases/$3/OpenBOR/Saves
170        mkdir ./releases/$3/OpenBOR/ScreenShots
171      fi
172      mv OpenBOR ./releases/$3/OpenBOR
173      echo "moved binary to ./releases/$3/ !"
174    fi
175    if [[ ! $BUILD_DEBUG ]] ; then
176      make clean BUILD_LINUX=1
177    fi
178  fi
179  [ $LNXDEV ]
180}
181
182# Compile for Linux under various architectures
183function linux_x86 {
184  if [ `uname -s | grep -o "Linux"` ]; then
185    linux i.86-.*linux.* x86 LINUX || # try standard 32-bit GCC
186    [ `gcc -dumpmachine | grep -o x86_64-.*linux.*` ] && [ `gcc -print-multi-lib | grep -o '@m32'` ] && # check for x86_64 GCC with 32-bit multilib
187    linux x86_64-.*linux.* x86 LINUX  # try 64-bit compiler with multilib
188  fi
189}
190
191function linux_amd64 {
192  if [ `uname -s | grep -o "Linux"` ]; then
193    linux x86_64-.*linux.* amd64 LINUX_AMD64 || # try standard 64-bit GCC
194    [ `gcc -dumpmachine | grep -o i.86-.*linux.*` ] && [ `gcc -print-multi-lib | grep -o '@m64'` ] && # check for x86 GCC with 64-bit multilib
195    linux i.86-.*linux.* amd64 LINUX_AMD64 # try 32-bit compiler with multilib
196  fi
197}
198
199function linux_something {
200  if [ ! $1 -o $1 = x86 ]; then
201    linux_x86
202  elif [ $1 = amd64 ]; then
203    linux_amd64
204  else
205    echo "Error: unknown Linux architecture '$1'"
206  fi
207}
208
209# Windows Environment && Compile
210function windows {
211  export PATH=$OLD_PATH
212  . ./environ.sh 5
213  if test $WINDEV; then
214    make clean BUILD_WIN=1
215		#first remove old resource file and update with build number from build_number.h.
216		if test -e "resources/OpenBOR.res"; then
217			rm "resources/OpenBOR.res";
218		fi
219
220		# if it's cross-compile for Windows from Linux, then
221		# find a proper tool
222		if test -e "/usr/bin/i686-w64-mingw32-gcc" && test -e "/usr/bin/i686-w64-mingw32-windres"; then
223			i686-w64-mingw32-windres resources/OpenBOR.rc -o resources/OpenBOR.res -O coff
224		else
225			windres.exe resources/OpenBOR.rc -o resources/OpenBOR.res -O coff
226		fi
227    make BUILD_WIN=1
228    if test -f "./OpenBOR.exe"; then
229      if test ! -e "./releases/WINDOWS" ; then
230        mkdir ./releases/WINDOWS
231        mkdir ./releases/WINDOWS/OpenBOR
232        mkdir ./releases/WINDOWS/OpenBOR/Logs
233        mkdir ./releases/WINDOWS/OpenBOR/Paks
234        mkdir ./releases/WINDOWS/OpenBOR/Saves
235        mkdir ./releases/WINDOWS/OpenBOR/ScreenShots
236      fi
237      mv OpenBOR.exe ./releases/WINDOWS/OpenBOR
238    fi
239    make clean BUILD_WIN=1
240  fi
241}
242
243# Wii Environment && Compile
244function wii {
245  export PATH=$OLD_PATH
246  . ./environ.sh 7
247  if test $DEVKITPPC; then
248    make clean BUILD_WII=1
249    make BUILD_WII=1
250    if test -f "./boot.dol"; then
251      if test ! -e "./releases/WII" ; then
252        mkdir ./releases/WII
253        mkdir ./releases/WII/OpenBOR
254        mkdir ./releases/WII/OpenBOR/Logs
255        mkdir ./releases/WII/OpenBOR/Paks
256        mkdir ./releases/WII/OpenBOR/Saves
257        mkdir ./releases/WII/OpenBOR/ScreenShots
258      fi
259      mv boot.dol ./releases/WII/OpenBOR/
260      cp ./resources/meta.xml ./releases/WII/OpenBOR
261      cp ./resources/OpenBOR_Icon_128x48.png ./releases/WII/OpenBOR/icon.png
262    fi
263    make clean BUILD_WII=1
264  fi
265}
266
267# Darwin Environment && Compile
268function darwin {
269  export PATH=$OLD_PATH
270  . ./environ.sh 10
271  if test $DWNDEV; then
272    make clean BUILD_DARWIN=1
273    make BUILD_DARWIN=1
274    if test -f "./OpenBOR"; then
275      if test ! -e "./releases/DARWIN"; then
276        mkdir ./releases/DARWIN
277        mkdir ./releases/DARWIN/OpenBOR.app
278        mkdir ./releases/DARWIN/OpenBOR.app/Contents
279        mkdir ./releases/DARWIN/OpenBOR.app/Contents/MacOS
280        mkdir ./releases/DARWIN/OpenBOR.app/Contents/Resources
281        mkdir ./releases/DARWIN/OpenBOR.app/Contents/Libraries
282      fi
283      mv OpenBOR ./releases/DARWIN/OpenBOR.app/Contents/MacOS
284      cp ./resources/PkgInfo ./releases/DARWIN/OpenBOR.app/Contents
285      cp ./resources/Info.plist ./releases/DARWIN/OpenBOR.app/Contents
286      cp ./resources/OpenBOR.icns ./releases/DARWIN/OpenBOR.app/Contents/Resources
287      if [ "${DWNDEV}" != "/opt/mac" ]; then
288        ./darwin.sh
289      fi
290    fi
291    make clean BUILD_DARWIN=1
292  fi
293}
294
295# Android Compile
296function android {
297  export PATH=$OLD_PATH
298    if test -f "./android/app/build/outputs/apk/debug/OpenBOR.apk"; then
299      if test ! -e "./releases/Android/"; then
300		rm -rf ./releases/ANDROID
301        mkdir ./releases/ANDROID
302      fi
303      cp ./android/app/build/outputs/apk/debug/OpenBOR.apk ./releases/ANDROID
304		echo "Android Build Copied!"
305    fi
306}
307
308
309function build_all {
310  clean
311  version
312  if test -e "buildspec.sh"; then
313    . ./buildspec.sh
314  else
315    psp
316    vita
317    linux_x86
318    linux_amd64
319    windows
320    wii
321    darwin
322	android
323  fi
324  distribute
325}
326
327function print_help {
328  echo
329  echo "Run $0 with one of the below targets"
330  echo "-------------------------------------------------------"
331  echo "    0 = Distribute"
332  echo "    1 = PSP"
333  echo "    2 = PS Vita"
334  echo "    4 = Linux (x86, amd64) Example: $0 4 amd64"
335  echo "    5 = Windows"
336  echo "    7 = Wii"
337  echo "   10 = Darwin"
338  echo "  all = build for all applicable targets"
339  echo "-------------------------------------------------------"
340  echo "Example: $0 10"
341  echo
342}
343
344case $1 in
345  0)
346    version
347    distribute
348    ;;
349
350  1)
351    version
352    psp
353    ;;
354
355  2)
356    version
357    vita
358    ;;
359
360  4)
361    version
362    linux_something $2
363    ;;
364
365  5)
366    version
367    windows
368    ;;
369
370  7)
371    version
372    wii
373    ;;
374
375  10)
376    version
377    darwin
378    ;;
379
380  ?)
381    version
382    print_help
383    ;;
384
385  all)
386    build_all
387    ;;
388
389  *)
390    print_help
391    ;;
392esac
393
394