1#
2# OpenBOR - http://www.ChronoCrash.com
3# -----------------------------------------------------------------------
4# All rights reserved, see LICENSE in OpenBOR root for details.
5#
6# Copyright (c) 2004 - 2014 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  cp README ./releases/README.txt
24  cp LICENSE ./releases/LICENSE.txt
25  cp COMPILING ./releases/COMPILING.txt
26  cp translation.txt ./releases/translation.txt
27}
28
29# CleanUp Releases
30function clean {
31  make clean-releases
32}
33
34# Distribute Releases
35function distribute {
36  echo ------------------------------------------------------
37  echo "          Validating Platforms Built w/Bash"
38  echo ------------------------------------------------------
39  echo
40
41  if ! test "releases/PSP/OpenBOR/EBOOT.PBP"; then
42    echo "PSP Platform Failed To Build!"
43    exit 1
44  fi
45  if ! test -e "releases/DC/OpenBOR/1ST_READ.BIN"; then
46    echo "Dreamcast Platform Failed To Build!"
47    exit 1
48  fi
49  if test -e "releases/WINDOWS/OpenBOR/OpenBOR.exe"; then
50    cd ../tools/borpak/source/
51    . build.sh win
52    cp borpak.exe ../../../engine/releases/WINDOWS/OpenBOR/
53    cp ../scripts/packer.bat ../../../engine/releases/WINDOWS/OpenBOR/
54    cp ../scripts/paxplode.bat ../../../engine/releases/WINDOWS/OpenBOR/
55    cd ../../../engine
56  else
57    echo "Windows Platform Failed To Build!"
58    exit 1
59  fi
60  if ! test -e "releases/WII/OpenBOR/boot.dol"; then
61    echo "Wii Platform Failed To Build!"
62    exit 1
63  fi
64  if ! test -e "releases/OPENDINGUX/OpenBOR/OpenBOR.dge"; then
65    echo "OpenDingux Platform Failed To Build!"
66    exit 1
67  fi
68  if test -e "releases/LINUX/OpenBOR/OpenBOR"; then
69    cd ../tools/borpak/source/
70    . build.sh lin
71    cp borpak ../../../engine/releases/LINUX/OpenBOR/
72    cp ../scripts/packer ../../../engine/releases/LINUX/OpenBOR/
73    cp ../scripts/paxplode ../../../engine/releases/LINUX/OpenBOR/
74    cd ../../../engine
75  else
76    if [ `echo $HOST_PLATFORM | grep -o "Linux"` ]; then
77      echo "Linux Platform Failed To Build!"
78      exit 1
79    fi
80  fi
81  if test -e "releases/DARWIN/OpenBOR.app/Contents/MacOS/OpenBOR"; then
82    cd ../tools/borpak/source/
83    . build.sh mac
84    cp borpak ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
85    cp ../scripts/packer ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
86    cp ../scripts/paxplode ../../../engine/releases/DARWIN/OpenBOR.app/Contents/Resources/
87    cd ../../../engine
88  else
89    echo "Darwin Platform Failed To Build!"
90    exit 1
91  fi
92
93  echo "All Platforms Created Successfully"
94  if ! test "$BUILDBATCH"; then
95    TRIMMED_URL=`svn info | grep "URL:" | sed s/URL:\ svn\+ssh//g`
96    if test -n $TRIMMED_URL;  then
97      TRIMMED_URL="svn"$TRIMMED_URL
98    fi
99    svn log $TRIMMED_URL --verbose > ./releases/VERSION_INFO.txt
100    7za a -t7z -mx9 -r -x!.svn "./releases/OpenBOR $VERSION.7z" ./releases/*
101  fi
102  echo
103}
104
105# PSP Environment && Compile
106function psp {
107  export PATH=$OLD_PATH
108  . ./environ.sh 1
109  if test $PSPDEV; then
110    make clean BUILD_PSP=1
111    make BUILD_PSP=1
112    if test -f "./EBOOT.PBP"; then
113      if test ! -e "./releases/PSP"; then
114        mkdir ./releases/PSP
115        mkdir ./releases/PSP/OpenBOR
116        mkdir ./releases/PSP/OpenBOR/Images
117        mkdir ./releases/PSP/OpenBOR/Logs
118        mkdir ./releases/PSP/OpenBOR/Paks
119        mkdir ./releases/PSP/OpenBOR/Saves
120        mkdir ./releases/PSP/OpenBOR/Modules
121      fi
122      mv EBOOT.PBP ./releases/PSP/OpenBOR/
123      mv OpenBOR.elf ./releases/PSP/OpenBOR/Modules/
124      cp ./psp/dvemgr/dvemgr.prx ./releases/PSP/OpenBOR/Modules/
125      cp ./psp/kernel/kernel.prx ./releases/PSP/OpenBOR/Modules/
126      cp ./psp/control/control.prx ./releases/PSP/OpenBOR/Modules/
127      cp ./psp/exception/exception.prx ./releases/PSP/OpenBOR/Modules/
128      cp ./resources/OpenBOR_Menu_480x272_Sony.png ./releases/PSP/OpenBOR/Images/Menu.png
129      cp ./resources/OpenBOR_Logo_480x272.png ./releases/PSP/OpenBOR/Images/Loading.png
130    fi
131    make clean BUILD_PSP=1
132  fi
133}
134
135# Gp2x Environment && Compile
136function gp2x {
137  export PATH=$OLD_PATH
138  . ./environ.sh 3
139  if test $GP2XDEV; then
140    make clean BUILD_GP2X=1
141    make BUILD_GP2X=1
142    if test -f "./OpenBOR.gpe"; then
143      if test ! -e "./releases/GP2X"; then
144        mkdir ./releases/GP2X
145        mkdir ./releases/GP2X/OpenBOR
146        mkdir ./releases/GP2X/OpenBOR/Logs
147        mkdir ./releases/GP2X/OpenBOR/Paks
148        mkdir ./releases/GP2X/OpenBOR/Saves
149        mkdir ./releases/GP2X/OpenBOR/ScreenShots
150      fi
151      cp ./sdl/gp2x/modules/mmuhack.o ./releases/GP2X/OpenBOR/
152      mv OpenBOR.gpe ./releases/GP2X/OpenBOR/
153    fi
154    make clean BUILD_GP2X=1
155  fi
156}
157
158# Linux Environment && Compile (common to all architectures)
159function linux {
160  export PATH=$OLD_PATH
161  export GCC_TARGET=$1
162  export TARGET_ARCH=$2
163  . ./environ.sh 4
164  if test $LNXDEV; then
165    if [[ ! $BUILD_DEBUG ]] ; then
166      make clean BUILD_LINUX=1
167    elif [[ "$TARGET_ARCH" == "amd64" ]] ; then
168      export NO_RAM_DEBUGGER=1
169    fi
170    make BUILD_LINUX=1
171    if test -f "./OpenBOR"; then
172      if test ! -e "./releases/$3"; then
173        mkdir ./releases/$3
174        mkdir ./releases/$3/OpenBOR
175        mkdir ./releases/$3/OpenBOR/Logs
176        mkdir ./releases/$3/OpenBOR/Paks
177        mkdir ./releases/$3/OpenBOR/Saves
178        mkdir ./releases/$3/OpenBOR/ScreenShots
179      fi
180      mv OpenBOR ./releases/$3/OpenBOR
181      echo "moved binary to ./releases/$3/ !"
182    fi
183    if [[ ! $BUILD_DEBUG ]] ; then
184      make clean BUILD_LINUX=1
185    fi
186  fi
187  [ $LNXDEV ]
188}
189
190# Compile for Linux under various architectures
191function linux_x86 {
192  if [ `uname -s | grep -o "Linux"` ]; then
193    linux i.86-.*linux.* x86 LINUX || # try standard 32-bit GCC
194    [ `gcc -dumpmachine | grep -o x86_64-.*linux.*` ] && [ `gcc -print-multi-lib | grep -o '@m32'` ] && # check for x86_64 GCC with 32-bit multilib
195    linux x86_64-.*linux.* x86 LINUX  # try 64-bit compiler with multilib
196  fi
197}
198
199function linux_amd64 {
200  if [ `uname -s | grep -o "Linux"` ]; then
201    linux x86_64-.*linux.* amd64 LINUX_AMD64 || # try standard 64-bit GCC
202    [ `gcc -dumpmachine | grep -o i.86-.*linux.*` ] && [ `gcc -print-multi-lib | grep -o '@m64'` ] && # check for x86 GCC with 64-bit multilib
203    linux i.86-.*linux.* amd64 LINUX_AMD64 # try 32-bit compiler with multilib
204  fi
205}
206
207function linux_something {
208  if [ ! $1 -o $1 = x86 ]; then
209    linux_x86
210  elif [ $1 = amd64 ]; then
211    linux_amd64
212  else
213    echo "Error: unknown Linux architecture '$1'"
214  fi
215}
216
217# Windows Environment && Compile
218function windows {
219  export PATH=$OLD_PATH
220  . ./environ.sh 5
221  if test $WINDEV; then
222    make clean BUILD_WIN=1
223    make BUILD_WIN=1
224    if test -f "./OpenBOR.exe"; then
225      if test ! -e "./releases/WINDOWS" ; then
226        mkdir ./releases/WINDOWS
227        mkdir ./releases/WINDOWS/OpenBOR
228        mkdir ./releases/WINDOWS/OpenBOR/Logs
229        mkdir ./releases/WINDOWS/OpenBOR/Paks
230        mkdir ./releases/WINDOWS/OpenBOR/Saves
231        mkdir ./releases/WINDOWS/OpenBOR/ScreenShots
232      fi
233      mv OpenBOR.exe ./releases/WINDOWS/OpenBOR
234    fi
235    make clean BUILD_WIN=1
236  fi
237}
238
239# Dreamcast Environment && Compile
240function dreamcast {
241  export PATH=$OLD_PATH
242  . ./environ.sh 6
243  if test $KOS_BASE; then
244    make clean BUILD_DC=1
245    make BUILD_DC=1
246    if test -f "./1ST_READ.BIN"; then
247      if test ! -e "./releases/DC" ; then
248        mkdir ./releases/DC
249        mkdir ./releases/DC/OpenBOR
250      fi
251      mv 1ST_READ.BIN ./releases/DC/OpenBOR/
252    fi
253    make clean BUILD_DC=1
254  fi
255}
256
257# Wii Environment && Compile
258function wii {
259  export PATH=$OLD_PATH
260  . ./environ.sh 7
261  if test $DEVKITPPC; then
262    make clean BUILD_WII=1
263    make BUILD_WII=1
264    if test -f "./boot.dol"; then
265      if test ! -e "./releases/WII" ; then
266        mkdir ./releases/WII
267        mkdir ./releases/WII/OpenBOR
268        mkdir ./releases/WII/OpenBOR/Logs
269        mkdir ./releases/WII/OpenBOR/Paks
270        mkdir ./releases/WII/OpenBOR/Saves
271        mkdir ./releases/WII/OpenBOR/ScreenShots
272      fi
273      mv boot.dol ./releases/WII/OpenBOR/
274      cp ./resources/meta.xml ./releases/WII/OpenBOR
275      cp ./resources/OpenBOR_Icon_128x48.png ./releases/WII/OpenBOR/icon.png
276    fi
277    make clean BUILD_WII=1
278  fi
279}
280
281# OpenDingux Environment && Compile
282function opendingux {
283  export PATH=$OLD_PATH
284  . ./environ.sh 8
285  if test $OPENDINGUX_TOOLCHAIN; then
286    make clean BUILD_OPENDINGUX=1
287    make BUILD_OPENDINGUX=1
288    if test -f "OpenBOR.dge"; then
289      if test ! -e "./releases/OPENDINGUX" ; then
290        mkdir ./releases/OPENDINGUX
291        mkdir ./releases/OPENDINGUX/OpenBOR
292        mkdir ./releases/OPENDINGUX/OpenBOR/Logs
293        mkdir ./releases/OPENDINGUX/OpenBOR/Paks
294        mkdir ./releases/OPENDINGUX/OpenBOR/Saves
295        mkdir ./releases/OPENDINGUX/OpenBOR/ScreenShots
296      fi
297      mv OpenBOR.dge ./releases/OPENDINGUX/OpenBOR/
298    fi
299    make clean BUILD_OPENDINGUX=1
300  fi
301}
302
303# WIZ Environment && Compile
304function wiz {
305  export PATH=$OLD_PATH
306  . ./environ.sh 9
307  if test $WIZDEV; then
308    make clean BUILD_WIZ=1
309    make BUILD_WIZ=1
310    if test -f "./OpenBOR.gpe"; then
311      if test ! -e "./releases/WIZ"; then
312        mkdir ./releases/WIZ
313        mkdir ./releases/WIZ/OpenBOR
314        mkdir ./releases/WIZ/OpenBOR/Logs
315        mkdir ./releases/WIZ/OpenBOR/Paks
316        mkdir ./releases/WIZ/OpenBOR/Saves
317        mkdir ./releases/WIZ/OpenBOR/ScreenShots
318      fi
319      mv OpenBOR.gpe ./releases/WIZ/OpenBOR/
320      if [ `echo $HOST_PLATFORM | grep -o "SVN"` ]; then
321        cp $SDKPATH/lib/target/libSDL-1.2.so.0.11.2 ./releases/WIZ/OpenBOR/
322        cp $SDKPATH/lib/target/libSDL_gfx.so.0.0.17 ./releases/WIZ/OpenBOR/libSDL_gfx.so.0
323      else
324        cp $SDKPATH/lib/warm_2.6.24.ko ./releases/WIZ/OpenBOR/
325        cp $SDKPATH/lib/libSDL-1.2.so.0.11.2 ./releases/WIZ/OpenBOR/
326        cp $SDKPATH/lib/libSDL_gfx.so.0.0.17 ./releases/WIZ/OpenBOR/libSDL_gfx.so.0
327      fi
328    fi
329    make clean BUILD_WIZ=1
330  fi
331}
332
333# Darwin Environment && Compile
334function darwin {
335  export PATH=$OLD_PATH
336  . ./environ.sh 10
337  if test $DWNDEV; then
338    make clean BUILD_DARWIN=1
339    make BUILD_DARWIN=1
340    if test -f "./OpenBOR"; then
341      if test ! -e "./releases/DARWIN"; then
342        mkdir ./releases/DARWIN
343        mkdir ./releases/DARWIN/OpenBOR.app
344        mkdir ./releases/DARWIN/OpenBOR.app/Contents
345        mkdir ./releases/DARWIN/OpenBOR.app/Contents/MacOS
346        mkdir ./releases/DARWIN/OpenBOR.app/Contents/Resources
347        mkdir ./releases/DARWIN/OpenBOR.app/Contents/Libraries
348      fi
349      mv OpenBOR ./releases/DARWIN/OpenBOR.app/Contents/MacOS
350      cp ./resources/PkgInfo ./releases/DARWIN/OpenBOR.app/Contents
351      cp ./resources/Info.plist ./releases/DARWIN/OpenBOR.app/Contents
352      cp ./resources/OpenBOR.icns ./releases/DARWIN/OpenBOR.app/Contents/Resources
353      if [ "${DWNDEV}" != "/opt/mac" ]; then
354        ./darwin.sh
355      fi
356    fi
357    make clean BUILD_DARWIN=1
358  fi
359}
360
361function build_all {
362  clean
363  version
364  if test -e "buildspec.sh"; then
365    . ./buildspec.sh
366  else
367    psp
368    linux_x86
369    linux_amd64
370    windows
371    dreamcast
372    wii
373    opendingux
374    darwin
375  fi
376  distribute
377}
378
379function print_help {
380  echo
381  echo "Run $0 with one of the below targets"
382  echo "-------------------------------------------------------"
383  echo "    0 = Distribute"
384  echo "    1 = PSP"
385  echo "    2 = (unused)"
386  echo "    3 = Gp2x"
387  echo "    4 = Linux (x86, amd64) Example: $0 4 amd64"
388  echo "    5 = Windows"
389  echo "    6 = Dreamcast"
390  echo "    7 = Wii"
391  echo "    8 = OpenDingux"
392  echo "    9 = Wiz"
393  echo "   10 = Darwin"
394  echo "  all = build for all applicable targets"
395  echo "-------------------------------------------------------"
396  echo "Example: $0 10"
397  echo
398}
399
400case $1 in
401  0)
402    version
403    distribute
404    ;;
405
406  1)
407    version
408    psp
409    ;;
410
411  2)
412    version
413    echo "No platform here anymore (used to be PS2)"
414    ;;
415
416  3)
417    version
418    gp2x
419    ;;
420
421  4)
422    version
423    linux_something $2
424    ;;
425
426  5)
427    version
428    windows
429    ;;
430
431  6)
432    version
433    dreamcast
434    ;;
435
436  7)
437    version
438    wii
439    ;;
440
441  8)
442    version
443    opendingux
444    ;;
445
446  9)
447    version
448    wiz
449    ;;
450
451  10)
452    version
453    darwin
454    ;;
455
456  ?)
457    version
458    print_help
459    ;;
460
461  all)
462    build_all
463    ;;
464
465  *)
466    print_help
467    ;;
468esac
469
470