rockbox/tools/configure

484 lines
9.6 KiB
Text
Raw Normal View History

#!/bin/sh
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# global CC options for all platforms
CCOPTS="-W -Wall -O -nostdlib -ffreestanding -Wstrict-prototypes"
#
# Begin Function Definitions
#
input() {
read response
echo $response
}
shcc () {
CC=sh-elf-gcc
LD=sh-elf-ld
AR=sh-elf-ar
AS=sh-elf-as
OC=sh-elf-objcopy
GCCOPTS="$CCOPTS -m1"
}
coldfirecc () {
CC=m68k-elf-gcc
LD=m68k-elf-ld
AR=m68k-elf-ar
AS=m68k-elf-as
OC=m68k-elf-objcopy
GCCOPTS="$CCOPTS -m5200"
}
whichsim () {
if [ -z "$simver" ]; then
##################################################################
# Figure out win32/x11 GUI
#
echo ""
echo "Build (W)in32 or (X)11 GUI version? (X)"
option=`input`;
case $option in
[Ww])
simver="win32"
;;
*)
simver="x11"
;;
esac
echo "Selected $simver simulator"
fi
}
simul () {
sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@ARCHOS@,${archos},g" \
-e "s,@DEBUG@,${debug},g" \
-e "s,@KEYPAD@,${keypad},g" \
-e "s,@PWD@,${pwd},g" \
-e "s,@LANGUAGE@,${language},g" \
-e "s,@TARGET@,${target},g" \
-e "s,@SIMVER@,${simver},g" \
<<EOF
## Automaticly generated. http://rockbox.haxx.se
export ARCHOS=@ARCHOS@
export ROOTDIR=@ROOTDIR@
export FIRMDIR=\$(ROOTDIR)/firmware
export APPSDIR=\$(ROOTDIR)/apps
export TOOLSDIR=\$(ROOTDIR)/tools
export DOCSDIR=\$(ROOTDIR)/docs
export APPSDIR=@ROOTDIR@/apps
export SIMDIR=\$(ROOTDIR)/uisimulator/@SIMVER@
export DEBUG=@DEBUG@
export KEYPAD=@KEYPAD@
export OBJDIR=@PWD@
export SIMVER=@SIMVER@
export TARGET=@TARGET@
export LANGUAGE=@LANGUAGE@
export VERSION=\$(shell date +%y%m%d-%H%M)
.PHONY:
all: sim
sim:
\$(MAKE) -C \$(SIMDIR)
clean:
\$(MAKE) -C \$(SIMDIR) clean
rm -rf rockbox.zip
tags:
@rm -f TAGS
make -C \$(SIMDIR) tags
zip:
\$(TOOLSDIR)/buildzip.pl -r "\$(ROOTDIR)" sim\$(TARGET)
install:
@echo "installing a full setup in your archos dir"
@(make zip && cd archos && unzip -oq ../rockbox.zip)
EOF
echo "Created Makefile"
if [ -d "archos" ]; then
echo "sub directory archos already present"
else
mkdir archos
echo "created an archos subdirectory for simulating the hard disk"
fi
}
picklang() {
# figure out which languages that are around
for file in $rootdir/apps/lang/*.lang; do
clean=`echo $file | sed -e 's:.*/::g' | cut "-d." -f1`
langs="$langs $clean"
done
num=1
for one in $langs; do
echo "$num. $one"
num=`expr $num + 1`
done
read pick
return $pick;
}
whichlang() {
num=1
for one in $langs; do
if [ "$num" = "$pick" ]; then
echo $one
return
fi
num=`expr $num + 1`
done
}
target=$1
debug=$2
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!"
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`;
if [ "$target" = "update" ]; then
echo "configure update is unfortunately no longer supported"
exit
else
echo "This script will setup your Rockbox build environment."
echo "Further docs here: http://rockbox.haxx.se/docs/"
echo ""
fi
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
if [ -z "$archos" ]; then
##################################################################
# Figure out target platform
#
echo "Enter target platform: (default is Archos Recorder)"
echo "1 - Archos Player/Studio"
echo "2 - Archos Recorder"
echo "3 - Archos FM Recorder"
echo "4 - Archos Recorder v2"
echo "7 - Archos Ondio SP"
echo "8 - Archos Ondio FM"
echo "9 - Iriver H100"
getit=`input`;
case $getit in
1)
archos="player"
target="-DARCHOS_PLAYER"
shcc
tool="scramble"
output="archos.mod"
appextra="player"
archosrom=""
plugins="yes"
;;
3)
archos="fmrecorder"
target="-DARCHOS_FMRECORDER"
shcc
tool="scramble -fm"
output="ajbrec.ajz"
appextra="recorder"
archosrom="$pwd/rombox.ucl"
plugins="yes"
;;
4)
archos="recorderv2"
target="-DARCHOS_RECORDERV2"
shcc
tool="scramble -v2"
output="ajbrec.ajz"
appextra="recorder"
archosrom="$pwd/rombox.ucl"
plugins="yes"
;;
7)
archos="ondiosp"
target="-DARCHOS_ONDIOSP"
shcc
tool="scramble -osp"
output="ajbrec.ajz"
appextra="recorder"
archosrom=""
plugins=""
;;
8)
archos="ondiofm"
target="-DARCHOS_ONDIOFM"
shcc
tool="scramble -ofm"
output="ajbrec.ajz"
appextra="recorder"
archosrom=""
plugins=""
;;
9)
archos="h100"
target="-DIRIVER_H100"
memory=32 # always
coldfirecc
tool="not-written-yet"
output="rockbox.iriver"
appextra=""
archosrom=""
plugins="yes"
;;
*)
archos="recorder"
target="-DARCHOS_RECORDER"
shcc
tool="scramble"
output="ajbrec.ajz"
appextra="recorder"
archosrom="$pwd/rombox.ucl"
plugins="yes"
;;
esac
echo "Platform set to $archos"
fi
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
if [ -z "$debug" ]; then
##################################################################
# Figure out debug on/off
#
echo "Build (N)ormal, (D)ebug or (S)imulated version? (N)"
option=`input`;
case $option in
[Ss])
debug="1"
simulator="yes"
echo "Simulator build selected"
whichsim
;;
[Dd])
debug="1"
echo "Debug build selected"
GCCOPTS="$GCCOPTS -g -DDEBUG"
;;
*)
debug=""
echo "Normal build selected"
GCCOPTS="$GCCOPTS -fomit-frame-pointer -fschedule-insns"
;;
esac
fi
if [ -z "$language" ]; then
echo "Select a number for the language to use (default is english)"
picklang
language=`whichlang`
if [ -z "$language" ]; then
# pick a default
language="english"
fi
echo "Language set to $language"
fi
if [ "yes" = "$simulator" ]; then
# we have already dealt with the simulator Makefile separately
simul
exit
fi
sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@DEBUG@,${debug},g" \
-e "s,@MEMORY@,${memory},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,@TOOL@,${tool},g" \
-e "s,@OUTPUT@,${output},g" \
-e "s,@APPEXTRA@,${appextra},g" \
-e "s,@ARCHOSROM@,${archosrom},g" \
-e "s,@PLUGINS@,${plugins},g" \
-e "s,@GCCOPTS@,${GCCOPTS},g" \
<<EOF
## Automaticly generated. http://rockbox.haxx.se
export ROOTDIR=@ROOTDIR@
export FIRMDIR=\$(ROOTDIR)/firmware
export APPSDIR=\$(ROOTDIR)/apps
export TOOLSDIR=\$(ROOTDIR)/tools
export DOCSDIR=\$(ROOTDIR)/docs
export DEBUG=@DEBUG@
export ARCHOS=@ARCHOS@
export ARCHOSROM=@ARCHOSROM@
export TARGET=@TARGET@
export OBJDIR=@PWD@
export LANGUAGE=@LANGUAGE@
export MEMORYSIZE=@MEMORY@
export VERSION=\$(shell date +%y%m%d-%H%M)
export MKFIRMWARE=\$(TOOLSDIR)/@TOOL@
export BINARY=@OUTPUT@
export APPEXTRA=@APPEXTRA@
export ENABLEDPLUGINS=@PLUGINS@
export CC=@CC@
export LD=@LD@
export AR=@AR@
export AS=@AS@
export OC=@OC@
export GCCOPTS=@GCCOPTS@
.PHONY: all clean tags zip
all:
@\$(MAKE) -C \$(FIRMDIR)
@\$(MAKE) -C \$(APPSDIR)
clean:
@\$(MAKE) -C \$(FIRMDIR) clean
@\$(MAKE) -C \$(APPSDIR) clean
@rm -f rockbox.zip TAGS
tags:
@rm -f TAGS
\$(MAKE) -C \$(FIRMDIR) tags
\$(MAKE) -C \$(APPSDIR) tags
\$(MAKE) -C \$(APPSDIR)/plugins tags
\$(MAKE) -C \$(APPSDIR)/plugins/lib tags
zip:
\$(TOOLSDIR)/buildzip.pl -r "\$(ROOTDIR)" \$(TARGET)
EOF
echo "Created Makefile"