forked from xt-sys/xtchain
Add easy way to apply patch on top of any package used.
This commit is contained in:
parent
a04ae78d23
commit
b3c8f93cb1
@ -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} .
|
||||||
|
Loading…
Reference in New Issue
Block a user