forked from xt-sys/xtchain
		
	Add easy way to apply patch on top of any package used.
This commit is contained in:
		@@ -2,8 +2,9 @@
 | 
				
			|||||||
set -e
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Working Directories
 | 
					# Working Directories
 | 
				
			||||||
SRCDIR="$(pwd)/sources"
 | 
					 | 
				
			||||||
BINDIR="$(pwd)/binaries"
 | 
					BINDIR="$(pwd)/binaries"
 | 
				
			||||||
 | 
					PCHDIR="$(pwd)/patches"
 | 
				
			||||||
 | 
					SRCDIR="$(pwd)/sources"
 | 
				
			||||||
WRKDIR="$(pwd)"
 | 
					WRKDIR="$(pwd)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Binutils Settings
 | 
					# Binutils Settings
 | 
				
			||||||
@@ -36,9 +37,34 @@ ARCHS="i686 x86_64"
 | 
				
			|||||||
GENERIC="generic-w64-mingw32"
 | 
					GENERIC="generic-w64-mingw32"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					apply_patches()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local PACKAGE="${1}"
 | 
				
			||||||
 | 
					    local VERSION="${2}"
 | 
				
			||||||
 | 
					    if [ -d "${PCHDIR}/${PACKAGE}/${VERSION}" ]; then
 | 
				
			||||||
 | 
					        PATCHES="$(find ${PCHDIR}/${PACKAGE}/${VERSION} -name '*.diff' -o -name '*.patch' | sort -n)"
 | 
				
			||||||
 | 
					        echo ">>> Applying custom patches ..."
 | 
				
			||||||
 | 
					        for PATCH in ${PATCHES}; do
 | 
				
			||||||
 | 
					            if [ -f "${PATCH}" ] && [ -r "${PATCH}" ]; then
 | 
				
			||||||
 | 
					                for PREFIX in {0..5}; do
 | 
				
			||||||
 | 
					                    if patch -i${PATCH} -p${PREFIX} --silent --dry-run >/dev/null; then
 | 
				
			||||||
 | 
					                        patch -i${PATCH} -p${PREFIX} --silent
 | 
				
			||||||
 | 
					                        echo ">>> Patch ${PATCH} applied ..."
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    elif [ ${PREFIX} -ge 5 ]; then
 | 
				
			||||||
 | 
					                        echo "Patch ${PATCH} does not fit. Failed applying patch ..."
 | 
				
			||||||
 | 
					                        return 1
 | 
				
			||||||
 | 
					                    fi
 | 
				
			||||||
 | 
					                done
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
binutils_build()
 | 
					binutils_build()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for ARCH in ${ARCHS}; do
 | 
					    for ARCH in ${ARCHS}; do
 | 
				
			||||||
 | 
					        echo ">>> Building BINUTILS for ${ARCH} ..."
 | 
				
			||||||
        [ -z ${CLEAN} ] || rm -rf ${BINUTILSDIR}/build-${ARCH}
 | 
					        [ -z ${CLEAN} ] || rm -rf ${BINUTILSDIR}/build-${ARCH}
 | 
				
			||||||
        mkdir -p ${BINUTILSDIR}/build-${ARCH}
 | 
					        mkdir -p ${BINUTILSDIR}/build-${ARCH}
 | 
				
			||||||
        cd ${BINUTILSDIR}/build-${ARCH}
 | 
					        cd ${BINUTILSDIR}/build-${ARCH}
 | 
				
			||||||
@@ -61,15 +87,18 @@ binutils_build()
 | 
				
			|||||||
binutils_fetch()
 | 
					binutils_fetch()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if [ ! -d ${BINUTILSDIR} ]; then
 | 
					    if [ ! -d ${BINUTILSDIR} ]; then
 | 
				
			||||||
 | 
					        echo ">>> Downloading BINUTILS ..."
 | 
				
			||||||
        git clone ${BINUTILSVCS} ${BINUTILSDIR}
 | 
					        git clone ${BINUTILSVCS} ${BINUTILSDIR}
 | 
				
			||||||
        cd ${BINUTILSDIR}
 | 
					        cd ${BINUTILSDIR}
 | 
				
			||||||
        git checkout tags/${BINUTILSTAG}
 | 
					        git checkout tags/${BINUTILSTAG}
 | 
				
			||||||
 | 
					        apply_patches ${BINUTILSDIR##*/} ${BINUTILSTAG}
 | 
				
			||||||
        cd ${WRKDIR}
 | 
					        cd ${WRKDIR}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmake_build()
 | 
					cmake_build()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    echo ">>> Building CMAKE ..."
 | 
				
			||||||
    [ -z ${CLEAN} ] || rm -rf ${CMAKEDIR}/build-${GENERIC}
 | 
					    [ -z ${CLEAN} ] || rm -rf ${CMAKEDIR}/build-${GENERIC}
 | 
				
			||||||
    mkdir -p ${CMAKEDIR}/build-${GENERIC}
 | 
					    mkdir -p ${CMAKEDIR}/build-${GENERIC}
 | 
				
			||||||
    cd ${CMAKEDIR}/build-${GENERIC}
 | 
					    cd ${CMAKEDIR}/build-${GENERIC}
 | 
				
			||||||
@@ -85,9 +114,11 @@ cmake_build()
 | 
				
			|||||||
cmake_fetch()
 | 
					cmake_fetch()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if [ ! -d ${CMAKEDIR} ]; then
 | 
					    if [ ! -d ${CMAKEDIR} ]; then
 | 
				
			||||||
 | 
					        echo ">>> Downloading CMAKE ..."
 | 
				
			||||||
        git clone ${CMAKEVCS} ${CMAKEDIR}
 | 
					        git clone ${CMAKEVCS} ${CMAKEDIR}
 | 
				
			||||||
        cd ${CMAKEDIR}
 | 
					        cd ${CMAKEDIR}
 | 
				
			||||||
        git checkout tags/${CMAKETAG}
 | 
					        git checkout tags/${CMAKETAG}
 | 
				
			||||||
 | 
					        apply_patches ${CMAKEDIR##*/} ${CMAKETAG}
 | 
				
			||||||
        cd ${WRKDIR}
 | 
					        cd ${WRKDIR}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -95,6 +126,7 @@ cmake_fetch()
 | 
				
			|||||||
gcc_build_phase1()
 | 
					gcc_build_phase1()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for ARCH in ${ARCHS}; do
 | 
					    for ARCH in ${ARCHS}; do
 | 
				
			||||||
 | 
					        echo ">>> Building GCC (phase1) for ${ARCH} ..."
 | 
				
			||||||
        [ -z ${CLEAN} ] || rm -rf ${GCCDIR}/build-${ARCH}
 | 
					        [ -z ${CLEAN} ] || rm -rf ${GCCDIR}/build-${ARCH}
 | 
				
			||||||
        mkdir -p ${GCCDIR}/build-${ARCH}
 | 
					        mkdir -p ${GCCDIR}/build-${ARCH}
 | 
				
			||||||
        cd ${GCCDIR}/build-${ARCH}
 | 
					        cd ${GCCDIR}/build-${ARCH}
 | 
				
			||||||
@@ -125,6 +157,7 @@ gcc_build_phase1()
 | 
				
			|||||||
gcc_build_phase2()
 | 
					gcc_build_phase2()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for ARCH in ${ARCHS}; do
 | 
					    for ARCH in ${ARCHS}; do
 | 
				
			||||||
 | 
					        echo ">>> Building GCC (phase2) for ${ARCH} ..."
 | 
				
			||||||
        cd ${GCCDIR}/build-${ARCH}
 | 
					        cd ${GCCDIR}/build-${ARCH}
 | 
				
			||||||
        make -j${CORES}
 | 
					        make -j${CORES}
 | 
				
			||||||
        make install
 | 
					        make install
 | 
				
			||||||
@@ -135,9 +168,11 @@ gcc_build_phase2()
 | 
				
			|||||||
gcc_fetch()
 | 
					gcc_fetch()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if [ ! -d ${GCCDIR} ]; then
 | 
					    if [ ! -d ${GCCDIR} ]; then
 | 
				
			||||||
 | 
					        echo ">>> Downloading GCC ..."
 | 
				
			||||||
        git clone ${GCCVCS} ${GCCDIR}
 | 
					        git clone ${GCCVCS} ${GCCDIR}
 | 
				
			||||||
        cd ${GCCDIR}
 | 
					        cd ${GCCDIR}
 | 
				
			||||||
        git checkout tags/${GCCTAG}
 | 
					        git checkout tags/${GCCTAG}
 | 
				
			||||||
 | 
					        apply_patches ${GCCDIR##*/} ${GCCTAG##*/}
 | 
				
			||||||
        ./contrib/download_prerequisites
 | 
					        ./contrib/download_prerequisites
 | 
				
			||||||
        cd ${WRKDIR}
 | 
					        cd ${WRKDIR}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -146,6 +181,7 @@ gcc_fetch()
 | 
				
			|||||||
mingw_build_crt()
 | 
					mingw_build_crt()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for ARCH in ${ARCHS}; do
 | 
					    for ARCH in ${ARCHS}; do
 | 
				
			||||||
 | 
					        echo ">>> Building Mingw-w64 (CRT) for ${ARCH} ..."
 | 
				
			||||||
        [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
					        [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
				
			||||||
        mkdir -p ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
					        mkdir -p ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
				
			||||||
        cd ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
					        cd ${MINGWDIR}/mingw-w64-crt/build-${ARCH}
 | 
				
			||||||
@@ -174,6 +210,7 @@ mingw_build_crt()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mingw_build_headers()
 | 
					mingw_build_headers()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    echo ">>> Building Mingw-w64 (headers) ..."
 | 
				
			||||||
    [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
					    [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
				
			||||||
    mkdir -p ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
					    mkdir -p ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
				
			||||||
    cd ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
					    cd ${MINGWDIR}/mingw-w64-headers/build-${GENERIC}
 | 
				
			||||||
@@ -200,6 +237,7 @@ mingw_build_headers()
 | 
				
			|||||||
mingw_build_libs()
 | 
					mingw_build_libs()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for LIB in libmangle winstorecompat; do
 | 
					    for LIB in libmangle winstorecompat; do
 | 
				
			||||||
 | 
					        echo ">>> Building Mingw-w64 (libs) for ${ARCH} ..."
 | 
				
			||||||
        for ARCH in ${ARCHS}; do
 | 
					        for ARCH in ${ARCHS}; do
 | 
				
			||||||
            [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-libraries/${LIB}/build-${ARCH}
 | 
					            [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-libraries/${LIB}/build-${ARCH}
 | 
				
			||||||
            mkdir -p ${MINGWDIR}/mingw-w64-libraries/${LIB}/build-${ARCH}
 | 
					            mkdir -p ${MINGWDIR}/mingw-w64-libraries/${LIB}/build-${ARCH}
 | 
				
			||||||
@@ -222,6 +260,7 @@ mingw_build_tools()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    for TOOL in gendef genidl genlib genpeimg widl; do
 | 
					    for TOOL in gendef genidl genlib genpeimg widl; do
 | 
				
			||||||
        for ARCH in ${ARCHS}; do
 | 
					        for ARCH in ${ARCHS}; do
 | 
				
			||||||
 | 
					            echo ">>> Building Mingw-w64 (tools) for ${ARCH} ..."
 | 
				
			||||||
            [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
					            [ -z ${CLEAN} ] || rm -rf ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
				
			||||||
            mkdir -p ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
					            mkdir -p ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
				
			||||||
            cd ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
					            cd ${MINGWDIR}/mingw-w64-tools/${TOOL}/build-${ARCH}
 | 
				
			||||||
@@ -241,15 +280,18 @@ mingw_build_tools()
 | 
				
			|||||||
mingw_fetch()
 | 
					mingw_fetch()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if [ ! -d ${MINGWDIR} ]; then
 | 
					    if [ ! -d ${MINGWDIR} ]; then
 | 
				
			||||||
 | 
					        echo ">>> Downloading Mingw-w64 ..."
 | 
				
			||||||
        git clone ${MINGWVCS} ${MINGWDIR}
 | 
					        git clone ${MINGWVCS} ${MINGWDIR}
 | 
				
			||||||
        cd ${MINGWDIR}
 | 
					        cd ${MINGWDIR}
 | 
				
			||||||
        git checkout tags/${MINGWTAG}
 | 
					        git checkout tags/${MINGWTAG}
 | 
				
			||||||
 | 
					        apply_patches ${MINGWDIR##*/} ${MINGWTAG}
 | 
				
			||||||
        cd ${WRKDIR}
 | 
					        cd ${WRKDIR}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ninja_build()
 | 
					ninja_build()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    echo ">>> Building NINJA ..."
 | 
				
			||||||
    [ -z ${CLEAN} ] || rm -rf ${NINJADIR}/build-${GENERIC}
 | 
					    [ -z ${CLEAN} ] || rm -rf ${NINJADIR}/build-${GENERIC}
 | 
				
			||||||
    mkdir -p ${NINJADIR}/build-${GENERIC}
 | 
					    mkdir -p ${NINJADIR}/build-${GENERIC}
 | 
				
			||||||
    cd ${NINJADIR}/build-${GENERIC}
 | 
					    cd ${NINJADIR}/build-${GENERIC}
 | 
				
			||||||
@@ -261,9 +303,11 @@ ninja_build()
 | 
				
			|||||||
ninja_fetch()
 | 
					ninja_fetch()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if [ ! -d ${NINJADIR} ]; then
 | 
					    if [ ! -d ${NINJADIR} ]; then
 | 
				
			||||||
 | 
					        echo ">>> Downloading NINJA ..."
 | 
				
			||||||
        git clone ${NINJAVCS} ${NINJADIR}
 | 
					        git clone ${NINJAVCS} ${NINJADIR}
 | 
				
			||||||
        cd ${NINJADIR}
 | 
					        cd ${NINJADIR}
 | 
				
			||||||
        git checkout tags/${NINJATAG}
 | 
					        git checkout tags/${NINJATAG}
 | 
				
			||||||
 | 
					        apply_patches ${NINJADIR##*/} ${NINJATAG}
 | 
				
			||||||
        cd ${WRKDIR}
 | 
					        cd ${WRKDIR}
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -326,11 +370,11 @@ ninja_fetch
 | 
				
			|||||||
ninja_build
 | 
					ninja_build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Remove unneeded files to save disk space
 | 
					# Remove unneeded files to save disk space
 | 
				
			||||||
echo "Removing unneeded files to save disk space..."
 | 
					echo ">>> Removing unneeded files to save disk space ..."
 | 
				
			||||||
rm -rf ${BINDIR}/{doc,include,mingw,share/{bash-completion,emacs,gcc*,info,man,vim}}
 | 
					rm -rf ${BINDIR}/{doc,include,mingw,share/{bash-completion,emacs,gcc*,info,man,vim}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copy all scripts
 | 
					# Copy all scripts
 | 
				
			||||||
echo "Copying scripts..."
 | 
					echo ">>> Copying scripts ..."
 | 
				
			||||||
cp -apf ${WRKDIR}/scripts/* ${BINDIR}/
 | 
					cp -apf ${WRKDIR}/scripts/* ${BINDIR}/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Save FBE version
 | 
					# Save FBE version
 | 
				
			||||||
@@ -340,5 +384,5 @@ cd ${WRKDIR}
 | 
				
			|||||||
echo "${FBEVER}" > ${BINDIR}/Version
 | 
					echo "${FBEVER}" > ${BINDIR}/Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Prepare archive
 | 
					# Prepare archive
 | 
				
			||||||
echo "Creating toolchain archive..."
 | 
					echo ">>> Creating toolchain archive ..."
 | 
				
			||||||
tar -I 'zstd -19' -cpf fbe-${FBEVER}-linux.tar.zst -C ${BINDIR} .
 | 
					tar -I 'zstd -19' -cpf fbe-${FBEVER}-linux.tar.zst -C ${BINDIR} .
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user