Subversion Repositories tpanel

Rev

Rev 373 | Rev 375 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/bin/bash
QT_VERSION="6.6.0"
QT_VERSION_MAJOR=6
QT_PATH="$HOME/Qt"
QT_ARCHITECTURE="arm64"

QTBASE="${QT_PATH}/$QT_VERSION"
QTDIR="${QTBASE}/ios"

BUILDPATH="tpanel-ios"
OSX_SYSROOT="iphoneos"
#OSX_SYSROOT="iphonesimulator"
SIGNING_IDENTITY="<YOUR_SIGNING_IDENTITY>"

SRCDIR="`pwd`"
LOGFILE="${SRCDIR}/build.log"

###########################################################################
# DO NOT EDIT ANYTHING BELOW THIS LINE UNLESS YOU KNOW WHAT YOU'RE DOING! #
###########################################################################

GENERATOR="Xcode"
PROJECT_INCLUDE_BEFORE="${SRCDIR}/${BUILDPATH}/.qtc/package-manager/auto-setup.cmake"
QMAKE="${QTDIR}/bin/qmake"
PREFIX="${QTDIR}"
CC="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
CXX="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
TOOLCHAIN="${QTDIR}/lib/cmake/Qt6/qt.toolchain.cmake"

function usage() {
     echo "build_ios.sh [clean] [debug] [sign] [help|--help|-h]"
     echo "   clean     Delete old build, if there is one, and start a new clean build."
     echo "   debug     Create a binary with debugging enabled."
     echo "   sign      Sign the resulting app."
     echo "   id <ID>   The signing identity (team ID)"
     echo
     echo "   help | --help | -h   Displays this help screen and exit."
     echo
     echo "Without parameters the source is compiled, if there were changes, and then"
     echo "an iOS package is created."
}

function log() {
     echo "$@"
     echo "$@" >> ${LOGFILE}
}

> ${LOGFILE}

if [ "$OSX_SYSROOT" != "iphoneos" -a "$OSX_SYSROOT" != "iphonesimulator" ]
then
    log "Invalid target: $OSX_SYSROOT!"
    log "OSX_SYSROOT must be \"iphoneos\" or \"iphonesimulator\"."
    exit 1
fi

#
# The following statement determines the number of CPUs. This is used for the
# cmake command to let run the compiler in parallel.
#
CPUS=2
type nproc > /dev/null 2>&1

if [ $? -eq 0 ]
then
     CPUS=`nproc`
fi

OPT_CLEAN=0
OPT_DEBUG=0
OPT_SIGN=0
OPT_VERBOSE=0
_loop=0

for par in "$@"
do
    if [ $_loop -eq 1 ]
    then
        SIGNING_IDENTITY="$par"
        _loop=0
        continue
    fi

    if [ "$par" == "clean" ]
    then
        OPT_CLEAN=1
    elif [ "$par" == "debug" ]
    then
        OPT_DEBUG=1
    elif [ "$par" == "sign" ]
    then
        OPT_SIGN=1
    elif [ "$par" == "id" ]
    then
        _loop=1
        continue
    elif [ "$par" == "--verbose" ] || [ "$par" == "-v" ] || [ "$par" == "verbose" ]
    then
        OPT_VERBOSE=1
    elif [ "$par" == "help" ] || [ "$par" == "--help" ] || [ "$par" == "-h" ]
    then
        usage
        exit 0
    fi
done

if [ "${SIGNING_IDENTITY}" == "<YOUR_SIGNING_IDENTITY>" ]
then
    log "Missing the signing identity (team ID)! Please enter it in the head of it or set it with parameter \"id\"!"
    security find-identity -vp codesigning 2>&1 | tee -a ${LOGFILE}
    exit 1
fi

if [ $OPT_CLEAN -eq 1 ]
then
    if [ -d "${BUILDPATH}" ]
    then
        log "Deleting the build path at $BUILDPATH ..."
        rm -rf "${BUILDPATH}"
    fi
fi

if [ ! -d "${BUILDPATH}" ]
then
    log "Creating directory $BUILDPATH ..."
    mkdir -p "${BUILDPATH}"
    cp -r ios/.qtc "${BUILDPATH}"
fi

_extra=""

if [ $OPT_SIGN -eq 1 -a "$OSX_SYSROOT" == "iphoneos" ]
then
    _extra="-DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM:STRING=${SIGNING_IDENTITY}"
elif [ "${OSX_SYSROOT}" == "iphonesimulator" ]
then
    log "The build for iPhone simulator is not signable!"
fi

_config="Release"

if [ $OPT_DEBUG -eq 1 ]
then
    _extra="$_extra -DCMAKE_VERBOSE_MAKEFILE:STRING=1"
    _config="Debug"
fi

log "Creating build files in $BUILDPATH ..."

if [ $OPT_DEBUG -eq 1 ]
then
    log "cmake -S "${SRCDIR}" -B \"${BUILDPATH}\" -DAPPLE:STRING=1 -DIOS:STRING=1 -DCMAKE_GENERATOR:STRING=\"$GENERATOR\" -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH=\"${PROJECT_INCLUDE_BEFORE}\" -DQT_QMAKE_EXECUTABLE:FILEPATH=\"${QMAKE}\" -DCMAKE_PREFIX_PATH:PATH=\"${PREFIX}\" -DCMAKE_C_COMPILER:FILEPATH=\"${CC}\" -DCMAKE_CXX_COMPILER:FILEPATH=\"${CXX}\" -DCMAKE_TOOLCHAIN_FILE:FILEPATH=\"${TOOLCHAIN}\" -DCMAKE_OSX_ARCHITECTURES:STRING=\"$QT_ARCHITECTURE\" -DCMAKE_OSX_SYSROOT:STRING=\"${OSX_SYSROOT}\" ${_extra}"
fi

cmake -S "${SRCDIR}" \
      -B "${BUILDPATH}" \
      -DAPPLE:STRING=1 \
      -DIOS:STRING=1 \
      -DCMAKE_GENERATOR:STRING="$GENERATOR" \
      -DCMAKE_PROJECT_INCLUDE_BEFORE:FILEPATH="${PROJECT_INCLUDE_BEFORE}" \
      -DQT_QMAKE_EXECUTABLE:FILEPATH="${QMAKE}" \
      -DCMAKE_PREFIX_PATH:PATH="${PREFIX}" \
      -DCMAKE_C_COMPILER:FILEPATH="${CC}" \
      -DCMAKE_CXX_COMPILER:FILEPATH="${CXX}" \
      -DCMAKE_TOOLCHAIN_FILE:FILEPATH="${TOOLCHAIN}" \
      -DCMAKE_OSX_ARCHITECTURES:STRING="$QT_ARCHITECTURE" \
      -DCMAKE_OSX_SYSROOT:STRING="${OSX_SYSROOT}" \
      ${_extra} >> ${LOGFILE} 2>&1

if [ $? -ne 0 ]
then
    log "Error configuring the build pipeline!"
    log "For details look at \"${LOGFILE}\"."
    exit 1
fi

log "Compiling the code ..."

if [ $OPT_DEBUG -eq 1 ]
then
    log "cmake --build \"${BUILDPATH}\" --target ALL_BUILD --config ${_config} -j$CPUS -- -allowProvisioningUpdates"
fi

cmake --build "${BUILDPATH}" --target ALL_BUILD --config ${_config} -j$CPUS -- -allowProvisioningUpdates >> ${LOGFILE} 2>&1

if [ $? -ne 0 ]
then
    tail -100 ${LOGFILE}
    log "Error compiling!"
    log "For details look at \"${LOGFILE}\"."
    exit 1
fi

log "You can find the details at \"${LOGFILE}\""
exit 0