libretro-super/libretro-fetch-and-build.sh

217 lines
4.9 KiB
Bash

#!/bin/bash
####usage:
# ./libretro-fetch-and-build.sh configfile
# if you want to force all enabled cores to rebuild prepend FORCE=YES
# you may need to specify your make command by prepending it to the commandline, for instance MAKE=mingw32-make
#
# eg: FORCE=YES MAKE=mingw32-make ./libretro-fetch-and-build.sh buildbot.conf
####environment configuration:
echo configuring build environment
. ./libretro-config.sh
# BSDs don't have readlink -f
read_link()
{
TARGET_FILE="$1"
cd $(dirname "$TARGET_FILE")
TARGET_FILE=$(basename "$TARGET_FILE")
while [ -L "$TARGET_FILE" ]
do
TARGET_FILE=$(readlink "$TARGET_FILE")
cd $(dirname "$TARGET_FILE")
TARGET_FILE=$(basename "$TARGET_FILE")
done
PHYS_DIR=$(pwd -P)
RESULT="$PHYS_DIR/$TARGET_FILE"
echo $RESULT
}
SCRIPT=$(read_link "$0")
echo "SCRIPT: $SCRIPT"
BASE_DIR=$(dirname "$SCRIPT")
if [ -z "$RARCH_DIST_DIR" ]; then
RARCH_DIR="$BASE_DIR/dist"
RARCH_DIST_DIR="$RARCH_DIR/$DIST_DIR"
fi
mkdir -p "$RARCH_DIST_DIR"
if [ "$HOST_CC" ]; then
CC="${HOST_CC}-gcc"
CXX="${HOST_CC}-g++"
CXX11="${HOST_CC}-g++"
STRIP="${HOST_CC}-strip"
fi
if [ -z "$MAKE" ]; then
if uname -s | grep -i MINGW32 > /dev/null 2>&1; then
MAKE=mingw32-make
else
if type gmake > /dev/null 2>&1; then
MAKE=gmake
else
MAKE=make
fi
fi
fi
if [ -z "$CC" ]; then
if [ $FORMAT_COMPILER_TARGET = "osx" ]; then
CC=cc
elif uname -s | grep -i MINGW32 > /dev/null 2>&1; then
CC=mingw32-gcc
else
CC=gcc
fi
fi
if [ -z "$CXX" ]; then
if [ $FORMAT_COMPILER_TARGET = "osx" ]; then
CXX=c++
CXX11="clang++ -std=c++11 -stdlib=libc++"
elif uname -s | grep -i MINGW32 > /dev/null 2>&1; then
CXX=mingw32-g++
CXX11=mingw32-g++
else
CXX=g++
CXX11=g++
fi
fi
echo
echo "CC = $CC"
echo "CXX = $CXX"
echo "STRIP = $STRIP"
echo
cd "${BASE_DIR}"
####build commands
build_libretro_generic_makefile() {
NAME=$1
DIR=$2
SUBDIR=$3
MAKEFILE=$4
PLATFORM=$5
SILENT=$5
cd $DIR
cd $SUBDIR
if [ -z "${NOCLEAN}" ];
then
echo "cleaning up..."
echo "cleanup command: ${MAKE} -f ${MAKEFILE} platform=${PLATFORM} ${COMPILER} -j${JOBS} clean"
${MAKE} -f ${MAKEFILE} platform=${PLATFORM} ${COMPILER} -j${JOBS} clean
if [ $? -eq 0 ];
then
echo success!
else
echo error while cleaning up
fi
fi
echo "compiling..."
echo "buid command: ${MAKE} -f ${MAKEFILE} platform=${PLATFORM} ${COMPILER} -j${JOBS}"
${MAKE} -f ${MAKEFILE} platform=${PLATFORM} ${COMPILER} -j${JOBS}
if [ $? -eq 0 ];
then
echo success!
cp ${NAME}_libretro$FORMAT.${FORMAT_EXT} $RARCH_DIST_DIR/${NAME}_libretro$FORMAT.${FORMAT_EXT}
else
echo error while compiling $1
fi
}
#fetch a project and mark it for building if there have been any changes
while read line; do
NAME=`echo $line | cut --fields=1 --delimiter=" "`
DIR=`echo $line | cut --fields=2 --delimiter=" "`
URL=`echo $line | cut --fields=3 --delimiter=" "`
TYPE=`echo $line | cut --fields=4 --delimiter=" "`
ENABLED=`echo $line | cut --fields=5 --delimiter=" "`
COMMAND=`echo $line | cut --fields=6 --delimiter=" "`
MAKEFILE=`echo $line | cut --fields=7 --delimiter=" "`
SUBDIR=`echo $line | cut --fields=8 --delimiter=" "`
if [ "${ENABLED}" == "YES" ];
then
echo "Processing $NAME"
echo ============================================
echo URL: $URL
echo REPO TYPE: $TYPE
echo ENABLED: $ENABLED
echo COMMAND: $COMMAND
echo MAKEFILE: $MAKEFILE
echo
echo
ARGS=""
TEMP=`echo $line | cut --fields=9 --delimiter=" "`
if [ -n ${TEMP} ];
then
ARGS="${TEMP}"
fi
TEMP=""
TEMP=`echo $line | cut --fields=10 --delimiter=" "`
if [ -n ${TEMP} ];
then
ARGS="${ARGS} ${TEMP}"
fi
TEMP=""
TEMP=`echo $line | cut --fields=11 --delimiter=" "`
if [ -n ${TEMP} ];
then
ARGS="${ARGS} ${TEMP}"
fi
echo ARGS: $ARGS
if [ -d "${DIR}/.git" ];
then
cd $DIR
echo "pulling from repo... "
OUT=`git pull`
if [[ $OUT == *"Already up-to-date"* ]]
then
BUILD="NO"
else
BUILD="YES"
fi
cd ..
else
echo "cloning repo..."
git clone --depth=1 "$URL" "$DIR"
BUILD="YES"
fi
if [ "${BUILD}" == "YES" -o "${FORCE}" == "YES" ];
then
echo building core...
if [ "${COMMAND}" == "GENERIC" ]; then
build_libretro_generic_makefile $NAME $DIR $SUBDIR $MAKEFILE ${FORMAT_COMPILER_TARGET}
fi
else
echo core already up-to-date...
fi
fi
cd "${BASE_DIR}"
done < $1