rockbox/tools/configure
Daniel Stenberg 4902996148 1. auto-detect and auto-use ccache if installed and present in $PATH
2. slap on -fno-strict-aliasing for gcc 4.1.x builds to see if it HIDES some
 warnings. We really should fix the source code instead.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10609 a1c6a512-1295-4272-9138-f99709370657
2006-08-16 13:02:29 +00:00

1401 lines
37 KiB
Bash
Executable file

#!/bin/sh
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# global CC options for all platforms
CCOPTS="-W -Wall -O -nostdlib -ffreestanding -Wstrict-prototypes"
use_logf="#undef ROCKBOX_HAS_LOGF"
use_simsound="#undef ROCKBOX_HAS_SIMSOUND"
scriptver=`echo '$Revision$' | sed -e 's:\\$::g' -e 's/Revision: //'`
#
# Begin Function Definitions
#
input() {
read response
echo $response
}
prefixtools () {
prefix="$1"
CC=${prefix}gcc
WINDRES=${prefix}windres
DLLTOOL=${prefix}dlltool
DLLWRAP=${prefix}dllwrap
RANLIB=${prefix}ranlib
LD=${prefix}ld
AR=${prefix}ar
AS=${prefix}as
OC=${prefix}objcopy
}
crosswincc () {
# naive approach to selecting a mingw cross-compiler on linux/*nix
echo "Enabling win32 crosscompiling"
prefixtools i586-mingw32msvc-
LDOPTS="-lgdi32 -luser32 -mwindows"
# add cross-compiler option(s)
GCCOPTS="$GCCOPTS -mno-cygwin"
output="rockboxui.exe" # use this as output binary name
crosscompile="yes"
endian="little" # windows is little endian
}
checksoundcard () {
if test -n "$codecs"; then
if test -f "/usr/include/sys/soundcard.h"; then
# We have a header file so we can build the sound code
use_simsound="#define ROCKBOX_HAS_SIMSOUND 1"
echo "Enabled PCM sound playback in simulator"
fi # header file present
fi # has codecs
}
# scan the $PATH for the given command
findtool(){
file="$1"
IFS=":"
for path in $PATH
do
# echo "checks for $file in $path" >&2
if test -f "$path/$file"; then
echo "$path/$file"
return
fi
done
}
simcc () {
# default tool setup for native building
prefixtools ""
GCCOPTS='-W -Wall -g -fno-builtin'
output="rockboxui" # use this as default output binary name
if [ "$simver" = "sdl" ]; then
# generic sdl-config checker
sdl=`findtool sdl-config`
if [ -z "$sdl" ]; then
echo "configure didn't find sdl-config, which indicates that you"
echo "don't have SDL (properly) installed. Please correct and"
echo "re-run configure!"
exit
fi
fi
case $uname in
CYGWIN*)
echo "Cygwin host detected"
if [ "$simver" = "win32" ]; then
# win32 version
GCCOPTS="$GCCOPTS -mno-cygwin -DNOCYGWIN"
LDOPTS="-lgdi32 -luser32 -mno-cygwin"
elif [ "$simver" = "sdl" ]; then
# sdl version
GCCOPTS="$GCCOPTS `sdl-config --cflags`"
LDOPTS="`sdl-config --libs`"
checksoundcard
else
# x11 version
GCCOPTS="$GCCOPTS"
LDOPTS='-L/usr/X11R6/lib -lSM -lICE -lXt -lX11 -lXmu -lSM -lICE -lX11 -lpthread'
checksoundcard
fi
output="rockboxui.exe" # use this as output binary name
;;
Linux)
echo "Linux host detected"
GCCOPTS="$GCCOPTS"
if [ "$simver" = "win32" ]; then
LDOPTS='-L/usr/X11R6/lib -lX11 -lm -lXt -lXmu -lnsl -ldl -lpthread'
crosswincc # setup cross-compiler
elif [ "$simver" = "sdl" ]; then
GCCOPTS="$GCCOPTS `sdl-config --cflags`"
LDOPTS="`sdl-config --libs`"
checksoundcard
else
LDOPTS='-L/usr/X11R6/lib -lX11 -lm -lXt -lXmu -lnsl -ldl -lpthread'
checksoundcard
fi # not a cross-compiler
;;
FreeBSD)
echo "FreeBSD host detected"
LDOPTS='-L/usr/X11R6/lib -lX11 -lm -lXt -lXmu -dl -lpthread'
if [ "$simver" = "win32" ]; then
crosswincc # setup cross-compiler
fi
;;
*)
echo "Unsupported system: $uname, fix configure and retry"
exit
;;
esac
if [ `uname -m` = "x86_64" ]; then
GCCOPTS="$GCCOPTS -fPIC" # needed to make shared objects link
fi
if test "X$crosscompile" != "Xyes"; then
id=$$
cat >/tmp/conftest-$id.c <<EOF
#include <stdio.h>
int main(int argc, char **argv)
{
int var=0;
char *varp = (char *)&var;
*varp=1;
printf("%d\n", var);
return 0;
}
EOF
$CC -o /tmp/conftest-$id /tmp/conftest-$id.c 2>/dev/null
if test `/tmp/conftest-$id 2>/dev/null` -gt "1"; then
# big endian
endian="big"
else
# little endian
endian="little"
fi
echo "Simulator environment deemed $endian endian"
# use wildcard here to make it work even if it was named *.exe like
# on cygwin
rm -f /tmp/conftest-$id*
fi
}
shcc () {
prefixtools sh-elf-
GCCOPTS="$CCOPTS -m1"
GCCOPTIMIZE="-fomit-frame-pointer -fschedule-insns"
endian="big"
}
calmrisccc () {
prefixtools calmrisc16-unknown-elf-
GCCOPTS="-Wl\,--no-check-sections $CCOPTS"
GCCOPTIMIZE="-fomit-frame-pointer"
endian="big"
}
coldfirecc () {
prefixtools m68k-elf-
GCCOPTS="$CCOPTS -g -m5200 -Wa\,-m5249 -malign-int -mstrict-align"
GCCOPTIMIZE="-fomit-frame-pointer"
endian="big"
}
arm7tdmicc () {
prefixtools arm-elf-
GCCOPTS="$CCOPTS -mcpu=arm7tdmi"
if test "X$1" != "Xshort"; then
GCCOPTS="$GCCOPTS -ffunction-sections -mlong-calls"
fi
GCCOPTIMIZE="-fomit-frame-pointer"
endian="little"
}
arm9tdmicc () {
prefixtools arm-elf-
GCCOPTS="$CCOPTS -mcpu=arm9tdmi -ffunction-sections -mlong-calls"
GCCOPTIMIZE="-fomit-frame-pointer"
endian="little"
}
whichaddr () {
case $archos in
gmini120|gminisp)
echo ""
echo "Where do you want the firmware to be flashed?"
echo "WARNING: Do not answer this question lightly,"
echo "unless you don't plan to flash your gmini."
echo "In this case, reply '0x10000' (no quotes) and "
echo "re-configure when you know better."
loadaddress=`input`
if [ "0$loadaddress" = "0" ]; then
#default
loadaddress="0x10000";
fi
echo "You selected $loadaddress"
;;
*)
;;
esac
}
whichdevel () {
##################################################################
# Prompt for specific developer options
#
echo ""
echo "Enter your developer options (press enter when done)"
echo "(D)EBUG, (L)ogf, (S)imulator, (P)rofiling"
cont=1
while [ $cont = "1" ]; do
option=`input`;
case $option in
[Dd])
if [ "yes" = "$profile" ]; then
echo "Debug is incompatible with profiling"
else
echo "define DEBUG"
use_debug="yes"
fi
;;
[Ll])
echo "logf() support enabled"
logf="yes"
;;
[Ss])
echo "Simulator build enabled"
simulator="yes"
;;
[Pp])
if [ "yes" = "$use_debug" ]; then
echo "Profiling is incompatible with debug"
else
echo "Profiling support is enabled"
profile="yes"
fi
;;
*)
echo "done"
cont=0
;;
esac
done
if [ "yes" = "$use_debug" ]; then
debug="-DDEBUG"
GCCOPTS="$GCCOPTS -g -DDEBUG"
fi
if [ "yes" = "$logf" ]; then
use_logf="#define ROCKBOX_HAS_LOGF 1"
fi
if [ "yes" = "$simulator" ]; then
debug="-DDEBUG"
extradefines="$extradefines -DSIMULATOR"
whichsim
fi
if [ "yes" = "$profile" ]; then
extradefines="$extradefines -DRB_PROFILE"
PROFILE_OPTS="-finstrument-functions"
GCCOPTS="$GCCOPTS $GCCOPTIMIZE"
fi
}
whichsim () {
if [ -z "$simver" ]; then
##################################################################
# Figure out what simulator version
#
# x11 is deprecated so hide it from the question
# win32 is also deprecated
#
echo ""
echo "Build (S)DL version? (S)"
option=`input`;
case $option in
[Ww])
simver="win32"
WINDRES=windres
DLLTOOL=dlltool
DLLWRAP=dllwrap
# make sure the code knows this is for win32
extradefines="$extradefines -DWIN32"
;;
[Xx])
simver="x11"
extradefines="$extradefines -DX11"
;;
[Ss]|*)
simver="sdl"
extradefines="$extradefines -DSDL"
;;
esac
echo "Selected $simver simulator"
fi
}
if test "$1" = "--help"; then
echo "Rockbox configure script."
echo "Invoke this in a directory to generate a Makefile to build Rockbox"
echo "Do *NOT* run this within the tools directory!"
echo ""
echo "Usage: configure [--ccache][--no-ccache]"
exit
fi
if test -r "configure"; then
# this is a check for a configure script in the current directory, it there
# is one, try to figure out if it is this one!
if { grep "^# Jukebox" configure >/dev/null 2>&1 ; } then
echo "WEEEEEEEEP. Don't run this configure script within the tools directory."
echo "It will only cause you pain and grief. Instead do this:"
echo ""
echo " cd .."
echo " mkdir build-dir"
echo " cd build-dir"
echo " ../tools/configure"
echo ""
echo "Much happiness will arise from this. Enjoy"
exit
fi
fi
if [ "$target" = "--help" -o \
"$target" = "-h" ]; then
echo "Just invoke the script and answer the questions."
echo "This script will write a Makefile for you"
exit
fi
# get our current directory
pwd=`pwd`;
echo "This script will setup your Rockbox build environment."
echo "Further docs here: http://www.rockbox.org/"
echo ""
if [ -z "$rootdir" ]; then
##################################################################
# Figure out where the source code root is!
#
firmfile="crt0.S" # a file to check for in the firmware root dir
for dir in . .. ../.. ../rockbox*; do
if [ -f $dir/firmware/$firmfile ]; then
rootdir=$dir
break
fi
done
if [ -z "$rootdir" ]; then
echo "This script couldn't find your source code root directory. Please enter the"
echo "full path to the source code directory here:"
firmdir=`input`
fi
#####################################################################
# Convert the possibly relative directory name to an absolute version
#
now=`pwd`
cd $rootdir
rootdir=`pwd`
echo "Using this source code root directory:"
echo $rootdir
echo ""
# cd back to the build dir
cd $now
fi
apps="apps"
appsdir='\$(ROOTDIR)/apps'
firmdir='\$(ROOTDIR)/firmware'
toolsdir='\$(ROOTDIR)/tools'
##################################################################
# Figure out target platform
#
echo "Enter target platform:"
echo "1 - Archos Player/Studio"
echo "2 - Archos Recorder"
echo "3 - Archos FM Recorder"
echo "4 - Archos Recorder v2"
echo "5 - Archos Gmini 120"
echo "6 - Archos Gmini SP"
echo "7 - Archos Ondio SP"
echo "8 - Archos Ondio FM"
echo "9 - iriver H120/H140"
echo "10 - iriver H320/H340"
echo "11 - iriver iHP-100/iHP-110/iHP-115"
echo "12 - iAudio X5"
echo "13 - iPod Color/Photo"
echo "14 - iPod Nano"
echo "15 - iPod Video"
echo "16 - iPod 3G"
echo "17 - iPod 4G (Grayscale)"
echo "18 - iPod Mini (1G)"
echo "19 - iriver iFP-790"
echo "20 - Toshiba Gigabeat F"
echo "21 - iPod Mini 2G"
echo "22 - iriver H10"
echo "23 - SanDisk Sansa e200"
target_id=`input`;
# Set of tools built for all target platforms:
toolset="rdf2binary convbdf"
# Toolsets for some target families:
archosbitmaptools="$toolset scramble descramble sh2d uclpack bmp2rb codepages"
iriverbitmaptools="$toolset scramble descramble mkboot bmp2rb codepages"
iaudiobitmaptools="$toolset scramble descramble mkboot bmp2rb codepages"
ipodbitmaptools="$toolset scramble ipod_fw bmp2rb codepages"
# generic is used by Gigabeat, IFP, H10, Sansa-e200
genericbitmaptools="$toolset bmp2rb codepages"
case $target_id in
1)
archos="player"
target="-DARCHOS_PLAYER"
shcc
tool="$rootdir/tools/scramble"
output="archos.mod"
appextra="player:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$toolset scramble descramble sh2d generate_rocklatin uclpack"
# Note: the convbdf is present in the toolset just because: 1) the
# firmware/Makefile assumes it is present always, and 2) we will need it when we
# build the player simulator
;;
2)
archos="recorder"
target="-DARCHOS_RECORDER"
shcc
tool="$rootdir/tools/scramble"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="ajbrec.ajz"
appextra="recorder:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$archosbitmaptools
;;
3)
archos="fmrecorder"
target="-DARCHOS_FMRECORDER"
shcc
tool="$rootdir/tools/scramble -fm"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="ajbrec.ajz"
appextra="recorder:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$archosbitmaptools
;;
4)
archos="recorderv2"
target="-DARCHOS_RECORDERV2"
shcc
tool="$rootdir/tools/scramble -v2"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="ajbrec.ajz"
appextra="recorder:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$archosbitmaptools
;;
5)
archos="gmini120"
target="-DARCHOS_GMINI120"
memory=16 # fixed size (16 is a guess, remove comment when checked)
calmrisccc
tool="cp" # might work for now!
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="rockbox.gmini"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="" # disabled for now, enable later on
codecs="libmad"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$toolset bmp2rb codepages"
;;
6)
archos="gminisp"
target="-DARCHOS_GMINISP"
memory=16 # fixed size (16 is a guess, remove comment when checked)
calmrisccc
tool="cp" # might work for now!
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="rockbox.gmini"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="" # disabled for now, enable later on
codecs="libmad"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$toolset bmp2rb codepages"
;;
7)
archos="ondiosp"
target="-DARCHOS_ONDIOSP"
shcc
tool="$rootdir/tools/scramble -osp"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="ajbrec.ajz"
appextra="recorder:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$archosbitmaptools
;;
8)
archos="ondiofm"
target="-DARCHOS_ONDIOFM"
shcc
tool="$rootdir/tools/scramble -ofm"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="ajbrec.ajz"
appextra="recorder:gui"
archosrom="$pwd/rombox.ucl"
flash="$pwd/rockbox.ucl"
plugins="yes"
codecs=""
toolset=$archosbitmaptools
;;
9)
archos="h120"
target="-DIRIVER_H120"
memory=32 # always
coldfirecc
tool="$rootdir/tools/scramble -add=h120"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 2"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
output="rockbox.iriver"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$iriverbitmaptools
;;
10)
archos="h300"
target="-DIRIVER_H300"
memory=32 # always
coldfirecc
tool="$rootdir/tools/scramble -add=h300"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
output="rockbox.iriver"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$iriverbitmaptools
;;
11)
archos="h100"
target="-DIRIVER_H100"
memory=16 # always
coldfirecc
tool="$rootdir/tools/scramble -add=h100"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 2"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
output="rockbox.iriver"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$iriverbitmaptools
;;
12)
archos="x5"
target="-DIAUDIO_X5"
memory=16 # always
coldfirecc
tool="$rootdir/tools/scramble -add=iax5"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 7"
output="rockbox.iaudio"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$iaudiobitmaptools"
# architecture, manufacturer and model for the target-tree build
t_cpu="coldfire"
t_manufacturer="iaudio"
t_model="x5"
;;
13)
archos="ipodcolor"
target="-DIPOD_COLOR"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=ipco"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 5"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
14)
archos="ipodnano"
target="-DIPOD_NANO"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=nano"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 5"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
15)
archos="ipodvideo"
target="-DIPOD_VIDEO"
memory=32 # 30GB models have 32MB, 60GB have 64MB
arm7tdmicc
tool="$rootdir/tools/scramble -add=ipvd"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
16)
archos="ipod3g"
target="-DIPOD_3G"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=ip3g"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 6"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
17)
archos="ipod4g"
target="-DIPOD_4G"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=ip4g"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 6"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
18)
archos="ipodmini"
target="-DIPOD_MINI"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=mini"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 6"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
19)
archos="ifp7xx"
target="-DIRIVER_IFP7XX"
memory=1
arm7tdmicc short
tool="cp"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
output="rockbox.wma"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$genericbitmaptools
;;
20)
archos="gigabeatf"
target="-DGIGABEAT_F"
memory=32 # always
arm9tdmicc
tool="cp"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
output="rockbox.gigabeat"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
toolset=$genericbitmaptools
# architecture, manufacturer and model for the target-tree build
t_cpu="arm"
t_manufacturer="gigabeat"
t_model="meg-fx"
;;
21)
archos="ipodmini2g"
target="-DIPOD_MINI2G"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -add=mn2g"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 6"
output="rockbox.ipod"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$ipodbitmaptools
;;
22)
archos="h10"
target="-DIRIVER_H10"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/mkmi4.sh h10"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 5"
output="H10_20GC.mi4"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$genericbitmaptools
# architecture, manufacturer and model for the target-tree build
t_cpu="arm"
t_manufacturer="iriver"
t_model="h10"
;;
23)
archos="e200"
target="-DSANSA_E200"
memory=32 # supposedly
arm7tdmicc
tool="$rootdir/tools/mkmi4.sh e200"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 5"
output="PP5022.mi4"
appextra="recorder:gui"
archosrom=""
flash=""
plugins="yes"
codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset=$genericbitmaptools
# architecture, manufacturer and model for the target-tree build
t_cpu="arm"
t_manufacturer="sandisk"
t_model="sansa-e200"
;;
*)
echo "Please select an actual target platform!"
exit
;;
esac
echo "Platform set to $archos"
############################################################################
# Amount of memory, for those that can differ.
#
if [ -z "$memory" ]; then
size="2"
if [ -z "$update" ]; then
echo "Enter size of your RAM (in MB): (defaults to 2)"
size=`input`;
fi
case $size in
8)
memory="8"
;;
*)
memory="2"
;;
esac
echo "Memory size selected: $memory MB"
fi
##################################################################
# Figure out build "type"
#
# the ifp7x0 is the only platform that supports building a gdb stub like
# this
case $archos in
ifp7xx)
gdbstub="(G)DB stub, "
;;
*)
;;
esac
echo ""
echo "Build (N)ormal, (D)evel, (S)imulator, (B)ootloader, $gdbstub(M)anual? (N)"
option=`input`;
case $option in
[Bb])
case $archos in
h100|h120|h300|x5|ipodcolor|ipodnano|ipodvideo|ipod3g|ipod4g|ipodmini|ipodmini2g|gigabeatf|h10|e200)
extradefines="-DBOOTLOADER" # for target makefile symbol EXTRA_DEFINES
appsdir='\$(ROOTDIR)/bootloader'
apps="bootloader"
;;
*)
extradefines="-DBOOTLOADER -ffunction-sections -fdata-sections"
appsdir='\$(ROOTDIR)/flash/bootbox'
apps="bootbox"
;;
esac
bootloader="1"
echo "Bootloader build selected"
;;
[Ss])
debug="-DDEBUG"
simulator="yes"
extradefines="-DSIMULATOR"
echo "Simulator build selected"
whichsim
;;
[Dd])
echo "Devel build selected"
whichdevel
;;
[Gg])
extradefines="-DSTUB" # for target makefile symbol EXTRA_DEFINES
appsdir='\$(ROOTDIR)/gdb'
apps="stub"
case $archos in
ifp7xx)
output="stub.wma"
;;
*)
;;
esac
echo "GDB stub build selected"
;;
[Mm])
appsdir='\$(ROOTDIR)/manual'
firmdir='\$(ROOTDIR)/manual/platform' # No Makefile here. Effectively ignores target
toolsdir=$firmdir;
toolset='';
apps="manual"
case $archos in
fmrecorder)
archos="recorderv2fm"
;;
recorderv2)
archos="recorderv2fm"
;;
h1??)
archos="h1xx"
;;
ipodmini2g)
archos="ipodmini"
;;
*)
;;
esac
echo "Manual build selected"
;;
*)
debug=""
echo "Normal build selected"
GCCOPTS="$GCCOPTS $GCCOPTIMIZE"
;;
esac
whichaddr
# this was once possible to change at build-time, but no more:
language="english"
uname=`uname`
if [ "yes" = "$simulator" ]; then
# setup compiler and things for simulator
simcc
if [ -d "archos" ]; then
echo "sub directory archos already present"
else
mkdir archos
echo "created an archos subdirectory for simulating the hard disk"
fi
fi
# Now, figure out version number of the (gcc) compiler we are about to use
gccver=`$CC -dumpversion`;
if [ -z "$gccver" ]; then
echo "WARNING: The compiler you must use ($CC) is not in your path!"
echo "WARNING: this may cause your build to fail since we cannot do the"
echo "WARNING: checks we want now."
else
# gccver should now be "3.3.5", "3.4.3", "2.95.3-6" and similar, but don't
# DEPEND on it
num1=`echo $gccver | cut -d . -f1`
num2=`echo $gccver | cut -d . -f2`
gccnum=`(expr $num1 "*" 100 + $num2) 2>/dev/null`
# This makes:
# 3.3.X => 303
# 3.4.X => 304
# 2.95.3 => 295
echo "Using $CC $gccver ($gccnum)"
if test "$gccnum" -ge "400"; then
# gcc 4.0 is just *so* much pickier on arguments that differ in signedness
# so we ignore that warnings for now
# -Wno-pointer-sign
GCCOPTS="$GCCOPTS -Wno-pointer-sign"
fi
if test "$gccnum" -ge "401"; then
# this is a lame hack to avoid "warning: dereferencing type-punned pointer
# will break strict-aliasing rules"
GCCOPTS="$GCCOPTS -fno-strict-aliasing"
fi
fi
# check the compiler for SH platforms
if test "$CC" = "sh-elf-gcc"; then
if test "$gccnum" -lt "400"; then
echo "WARNING: Consider upgrading your compiler to the 4.0.X series!"
echo "WARNING: http://www.rockbox.org/twiki/bin/view/Main/CrossCompiler"
else
# figure out patch status
gccpatch=`$CC --version`;
if { echo $gccpatch | grep "rockbox" >/dev/null 2>&1; } then
echo "gcc $gccver is rockbox patched"
# then convert -O to -Os to get smaller binaries!
GCCOPTS=`echo $GCCOPTS | sed 's/ -O / -Os /'`
else
echo "WARNING: You use an unpatched gcc compiler: $gccver"
echo "WARNING: http://www.rockbox.org/twiki/bin/view/Main/CrossCompiler"
fi
fi
fi
if test "$1" = "--ccache"; then
echo "Enable ccache for building"
ccache="ccache"
else
if test "$1" != "--no-ccache"; then
ccache=`findtool ccache`
if test -n "$ccache"; then
echo "Found and uses ccache ($ccache)"
fi
fi
fi
if test -n "$ccache"; then
CC="$ccache $CC"
fi
if test "X$endian" = "Xbig"; then
defendian="ROCKBOX_BIG_ENDIAN"
else
defendian="ROCKBOX_LITTLE_ENDIAN"
fi
sed > autoconf.h \
-e "s,@ENDIAN@,${defendian},g" \
-e "s,^#undef ROCKBOX_HAS_LOGF,$use_logf,g" \
-e "s,@SIMSOUND@,$use_simsound,g" \
<<EOF
/* This header was made by configure */
#ifndef __BUILD_AUTOCONF_H
#define __BUILD_AUTOCONF_H
/* Define endianess for the target or simulator platform */
#define @ENDIAN@ 1
/* Define this if you build rockbox to support the logf logging and display */
#undef ROCKBOX_HAS_LOGF
/* Define this if you have the linux/soundcard.h header and thus can compile
the sound-playing code in the X11 sim */
@SIMSOUND@
#endif /* __BUILD_AUTOCONF_H */
EOF
if test -n "$t_cpu"; then
TARGET_INC="-I\$(FIRMDIR)/target/$t_cpu/$t_manufacturer/$t_model"
TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/$t_cpu/$t_manufacturer"
TARGET_INC="$TARGET_INC -I\$(FIRMDIR)/target/$t_cpu"
GCCOPTS="$GCCOPTS"
fi
if test "$simulator" = "yes"; then
# add simul make stuff on the #SIMUL# line
simmagic1="s,@SIMUL1@,@\$(MAKE) -C \$(SIMDIR) OBJDIR=\$(BUILDDIR)/sim,"
simmagic2="s,@SIMUL2@,@\$(MAKE) -C \$(ROOTDIR)/uisimulator/common OBJDIR=\$(BUILDDIR)/comsim,"
else
# delete the lines that match
simmagic1='/@SIMUL1@/D'
simmagic2='/@SIMUL2@/D'
fi
sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@DEBUG@,${debug},g" \
-e "s,@MEMORY@,${memory},g" \
-e "s,@TARGET_ID@,${target_id},g" \
-e "s,@TARGET@,${target},g" \
-e "s,@ARCHOS@,${archos},g" \
-e "s,@LANGUAGE@,${language},g" \
-e "s,@PWD@,${pwd},g" \
-e "s,@CC@,${CC},g" \
-e "s,@LD@,${LD},g" \
-e "s,@AR@,${AR},g" \
-e "s,@AS@,${AS},g" \
-e "s,@OC@,${OC},g" \
-e "s,@WINDRES@,${WINDRES},g" \
-e "s,@DLLTOOL@,${DLLTOOL},g" \
-e "s,@DLLWRAP@,${DLLWRAP},g" \
-e "s,@RANLIB@,${RANLIB},g" \
-e "s,@TOOL@,${tool},g" \
-e "s,@BMP2RB_NATIVE@,${bmp2rb_native},g" \
-e "s,@BMP2RB_MONO@,${bmp2rb_mono},g" \
-e "s,@BMP2RB_REMOTENATIVE@,${bmp2rb_remotenative},g" \
-e "s,@BMP2RB_REMOTEMONO@,${bmp2rb_remotemono},g" \
-e "s,@OUTPUT@,${output},g" \
-e "s,@APPEXTRA@,${appextra},g" \
-e "s,@ARCHOSROM@,${archosrom},g" \
-e "s,@FLASHFILE@,${flash},g" \
-e "s,@PLUGINS@,${plugins},g" \
-e "s,@CODECS@,${codecs},g" \
-e "s,@PROFILE_OPTS@,${PROFILE_OPTS},g" \
-e "s,@GCCOPTS@,${GCCOPTS},g" \
-e "s,@TARGET_INC@,${TARGET_INC},g" \
-e "s!@LDOPTS@!${LDOPTS}!g" \
-e "s,@LOADADDRESS@,${loadaddress},g" \
-e "s,@EXTRADEF@,${extradefines},g" \
-e "s,@APPSDIR@,${appsdir},g" \
-e "s,@FIRMDIR@,${firmdir},g" \
-e "s,@TOOLSDIR@,${toolsdir},g" \
-e "s,@APPS@,${apps},g" \
-e "s,@SIMVER@,${simver},g" \
-e "s,@GCCVER@,${gccver},g" \
-e "s,@GCCNUM@,${gccnum},g" \
-e "s,@UNAME@,${uname},g" \
-e "s,@ENDIAN@,${defendian},g" \
-e "s,@TOOLSET@,${toolset},g" \
-e "${simmagic1}" \
-e "${simmagic2}" \
<<EOF
## Automaticly generated. http://www.rockbox.org/
ifndef V
SILENT=@
else
VERBOSEOPT=-v
endif
export ROOTDIR=@ROOTDIR@
export FIRMDIR=@FIRMDIR@
export APPSDIR=@APPSDIR@
export TOOLSDIR=@TOOLSDIR@
export DOCSDIR=\$(ROOTDIR)/docs
export MANUALDIR=\${ROOTDIR}/manual
export DEBUG=@DEBUG@
export ARCHOS=@ARCHOS@
export ARCHOSROM=@ARCHOSROM@
export FLASHFILE=@FLASHFILE@
export TARGET_ID=@TARGET_ID@
export TARGET=@TARGET@
export OBJDIR=@PWD@
export BUILDDIR=@PWD@
export LANGUAGE=@LANGUAGE@
export MEMORYSIZE=@MEMORY@
export VERSION=\$(shell date +%y%m%d-%H%M)
export BUILDDATE=\$(shell date +'-DYEAR=%Y -DMONTH=%m -DDAY=%d')
export MKFIRMWARE=@TOOL@
export BMP2RB_MONO=@BMP2RB_MONO@
export BMP2RB_NATIVE=@BMP2RB_NATIVE@
export BMP2RB_REMOTEMONO=@BMP2RB_REMOTEMONO@
export BMP2RB_REMOTENATIVE=@BMP2RB_REMOTENATIVE@
export BINARY=@OUTPUT@
export APPEXTRA=@APPEXTRA@
export ENABLEDPLUGINS=@PLUGINS@
export SOFTWARECODECS=@CODECS@
export EXTRA_DEFINES=@EXTRADEF@
export HOSTCC=gcc
export CC=@CC@
export LD=@LD@
export AR=@AR@
export AS=@AS@
export OC=@OC@
export WINDRES=@WINDRES@
export DLLTOOL=@DLLTOOL@
export DLLWRAP=@DLLWRAP@
export RANLIB=@RANLIB@
export PROFILE_OPTS=@PROFILE_OPTS@
export GCCOPTS=@GCCOPTS@
export TARGET_INC=@TARGET_INC@
export LOADADDRESS=@LOADADDRESS@
export SIMVER=@SIMVER@
export SIMDIR=\$(ROOTDIR)/uisimulator/\$(SIMVER)
export LDOPTS=@LDOPTS@
export GCCVER=@GCCVER@
export GCCNUM=@GCCNUM@
export UNAME=@UNAME@
# Do not print "Entering directory ..."
MAKEFLAGS += --no-print-directory
.PHONY: all clean tags zip tools manual
all: tools
@SIMUL1@
@SIMUL2@
\$(SILENT)\$(MAKE) -C \$(FIRMDIR) OBJDIR=\$(BUILDDIR)/firmware
\$(SILENT)\$(MAKE) -C \$(APPSDIR) OBJDIR=\$(BUILDDIR)/@APPS@
veryclean: clean toolsclean
toolsclean:
\$(SILENT)\$(MAKE) -C \$(TOOLSDIR) clean
clean:
\$(SILENT)echo Cleaning build directory
\$(SILENT)rm -rf rockbox.zip TAGS @APPS@ firmware comsim sim lang.[ch]\
manual *.pdf *.a credits.raw @OUTPUT@ bitmaps pluginbitmaps \
@ARCHOSROM@ @FLASHFILE@ UI256.bmp rockbox-full.zip
tools:
\$(SILENT)\$(MAKE) -C \$(TOOLSDIR) CC=\$(HOSTCC) @TOOLSET@
tags:
\$(SILENT)rm -f TAGS
\$(SILENT)\$(MAKE) -C \$(FIRMDIR) tags
\$(SILENT)\$(MAKE) -C \$(APPSDIR) tags
\$(SILENT)\$(MAKE) -C \$(APPSDIR)/plugins tags
\$(SILENT)\$(MAKE) -C \$(APPSDIR)/plugins/lib tags
fontzip:
\$(SILENT)\$(TOOLSDIR)/buildzip.pl \$(VERBOSEOPT) -t \"\$(ARCHOS)\" -r "\$(ROOTDIR)" -f 1 -o rockbox-fonts.zip \$(TARGET) \$(BINARY)
zip:
\$(SILENT)\$(TOOLSDIR)/buildzip.pl \$(VERBOSEOPT) -t \"\$(ARCHOS)\" -r "\$(ROOTDIR)" \$(TARGET) \$(BINARY)
fullzip:
\$(SILENT)\$(TOOLSDIR)/buildzip.pl \$(VERBOSEOPT) -t \"\$(ARCHOS)\" -r "\$(ROOTDIR)" -f 2 -o rockbox-full.zip \$(TARGET) \$(BINARY)
7zip:
\$(SILENT)\$(TOOLSDIR)/buildzip.pl \$(VERBOSEOPT) -t \"\$(ARCHOS)\" -o "rockbox.7z" -z "7za a" -r "\$(ROOTDIR)" \$(TARGET) \$(BINARY)
tar:
\$(SILENT)rm -f rockbox.tar
\$(SILENT)\$(TOOLSDIR)/buildzip.pl \$(VERBOSEOPT) -t \"\$(ARCHOS)\" -o "rockbox.tar" -z "tar --no-recursion -uf" -r "\$(ROOTDIR)" \$(TARGET) \$(BINARY)
bzip2: tar
\$(SILENT)bzip2 -f9 rockbox.tar
gzip: tar
\$(SILENT)gzip -f9 rockbox.tar
manual: manual-pdf
manual-pdf:
\$(SILENT)\$(MAKE) -C \$(MANUALDIR) OBJDIR=\$(BUILDDIR)/manual manual-pdf
manual-html:
\$(SILENT)\$(MAKE) -C \$(MANUALDIR) OBJDIR=\$(BUILDDIR)/manual manual-html
manual-zip:
\$(SILENT)\$(MAKE) -C \$(MANUALDIR) OBJDIR=\$(BUILDDIR)/manual manual-zip
help:
@echo "A few helpful make targets"
@echo ""
@echo "all - builds a full Rockbox (default), including tools"
@echo "clean - cleans a build directory (not tools)"
@echo "veryclean - cleans the build and tools directories"
@echo "manual - builds a manual"
@echo "manual-html - HTML manual"
@echo "manual-zip - HTML manual (zipped)"
@echo "fullzip - creates a rockbox.zip of your build with fonts"
@echo "zip - creates a rockbox.zip of your build (no fonts)"
@echo "gzip - creates a rockbox.tar.gz of your build (no fonts)"
@echo "bzip2 - creates a rockbox.tar.bz2 of your build (no fonts)"
@echo "7zip - creates a rockbox.7z of your build (no fonts)"
@echo "fontzip - creates rockbox-fonts.zip"
@echo "tools - builds the tools only"
@echo "install - installs your build (for simulator builds only)"
EOF
if [ "yes" = "$simulator" ]; then
cat >> Makefile <<EOF
install:
@echo "installing a full setup in your archos dir"
@(\$(MAKE) fullzip && cd archos && unzip -oq ../rockbox-full.zip)
EOF
fi
echo "Created Makefile"