mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-25 11:55:28 +01:00
ad44b1a68f
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
217 lines
6.1 KiB
Bash
Executable File
217 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script for building NASM
|
|
#
|
|
# Original Created by JrCs on 8/30/14.
|
|
# Enhanced by STLVNB on 13/04/2016.
|
|
#
|
|
|
|
#sometimes we have to update curl and certificates
|
|
# sudo port install curl +ssl +universal
|
|
# sudo curl https://curl.se/ca/cacert.pem -o /etc/ssl/cert.pem
|
|
# openssl x509 -text < /etc/ssl/cert.pem | grep -A2 Valid
|
|
|
|
|
|
# Change PREFIX if you want nasm installed on different place
|
|
#
|
|
TOOLCHAIN_DIR=${TOOLCHAIN_DIR:-~/src/opt/local}
|
|
export PREFIX=${PREFIX:-$TOOLCHAIN_DIR}
|
|
|
|
if [[ "$(uname)" == Darwin ]] && [[ ! -x "$TOOLCHAIN_DIR"/cross/bin/x86_64-clover-linux-gnu-gcc ]]; then
|
|
echo "No clover toolchain found !" >&2
|
|
if [ -z $CLEAN_BUILD ]; then
|
|
echo "Press b to BUILD it OR else define the TOOLCHAIN_DIR variable." >&2
|
|
read -n 1 result
|
|
[ "$result" != "b" ] && exit 1
|
|
else
|
|
echo -n b
|
|
fi
|
|
echo "uilding it"
|
|
./build_gcc9.sh
|
|
echo "Continuing..."
|
|
fi
|
|
|
|
#
|
|
# Nasm source version
|
|
# here we can change source versions of tools
|
|
# Always use current Version when building, will auto compile newest STABLE version.
|
|
#
|
|
nasmcheck=$(curl -Is https://downuptime.net/nasm.us.html | grep HTTP | cut -d ' ' -f2)
|
|
if [ "$nasmcheck" == 200 ]; then
|
|
nasmVersInfo=$(curl -s -f https://www.nasm.us | grep "/releasebuilds/")
|
|
if [ "${nasmVersInfo:158:1}" == "." ]; then
|
|
verLen=7
|
|
else
|
|
verLen=4
|
|
fi
|
|
export NASM_VERSION="${nasmVersInfo:154:$verLen}"
|
|
else
|
|
export NASM_VERSION=2.15.05
|
|
fi
|
|
|
|
#
|
|
# iasl source version
|
|
# here we can change source versions of tools
|
|
# Always use current Version when building, will auto compile newest STABLE version.
|
|
#
|
|
acpicacheck=$(curl -Is https://downuptime.net/acpica.us.html | grep HTTP | cut -d ' ' -f2)
|
|
if [ $acpicacheck == 200 ]; then
|
|
acpicaVersInfo=$(curl -s -f https://acpica.org/downloads/ | grep 'The current release of ACPICA is version <strong>')
|
|
export acpicaVers="${acpicaVersInfo:191:8}"
|
|
else
|
|
export acpicaVers=20160108
|
|
fi
|
|
|
|
|
|
|
|
# ./configure arguments for Nasm
|
|
#
|
|
export NASM_CONFIG="--prefix=$PREFIX"
|
|
|
|
# You can change DIR_MAIN if u wan't nasm source downloaded
|
|
# in different folder.
|
|
#
|
|
export RAMDISK_MNT_PT=/tmp/buildnasm-ramdisk
|
|
export DIR_MAIN=${DIR_MAIN:-~/src}
|
|
export DIR_TOOLS=${DIR_TOOLS:-$DIR_MAIN/tools}
|
|
export DIR_BUILD=${DIR_BUILD:-$RAMDISK_MNT_PT}
|
|
export DIR_DOWNLOADS=${DIR_DOWNLOADS:-$DIR_TOOLS/download}
|
|
export DIR_LOGS=${DIR_LOGS:-$DIR_TOOLS/logs}
|
|
|
|
# Here we set MAKEFLAGS for GCC so it knows how many cores can use
|
|
# faster compile!
|
|
#
|
|
export MAKEFLAGS="-j `sysctl -n hw.logicalcpu`"
|
|
|
|
### Check Functions ###
|
|
|
|
# Function: checking installation of Xcode Tools
|
|
fnCheckXcode () {
|
|
[ ! -f /usr/bin/xcodebuild ] && \
|
|
echo "ERROR: Install Xcode Tools from Apple before using this script." && \
|
|
exit
|
|
}
|
|
#
|
|
# colorize output
|
|
#
|
|
function echoc(){
|
|
local exp=$1;
|
|
local color=$2;
|
|
local newline="$3";
|
|
if ! [[ $color =~ '^[0-9]$' ]] ; then
|
|
case $(echo $color | tr '[:upper:]' '[:lower:]') in
|
|
black) color=0 ;;
|
|
red) color=1 ;;
|
|
green) color=2 ;;
|
|
yellow) color=3 ;;
|
|
blue) color=4 ;;
|
|
magenta) color=5 ;;
|
|
cyan) color=6 ;;
|
|
white|*) color=7 ;; # white or invalid color
|
|
esac
|
|
fi
|
|
tput setaf $color;
|
|
tput bold;
|
|
echo $newline "$exp";
|
|
tput sgr0;
|
|
}
|
|
|
|
### Main Function START ###
|
|
|
|
# Function: Creating directory structure for EDK
|
|
|
|
[ ! -d ${DIR_MAIN} ] && mkdir ${DIR_MAIN}
|
|
[ ! -d ${DIR_TOOLS} ] && mkdir ${DIR_TOOLS}
|
|
[ ! -d ${DIR_DOWNLOADS} ] && mkdir ${DIR_DOWNLOADS}
|
|
[ ! -d ${DIR_LOGS} ] && mkdir ${DIR_LOGS}
|
|
[ ! -d ${PREFIX}/bin ] && mkdir -p ${PREFIX}/bin
|
|
echo
|
|
|
|
# Function: to manage PATH
|
|
pathmunge () {
|
|
if [[ ! $PATH =~ (^|:)$1(:|$) ]]; then
|
|
if [[ "${2:-}" = "after" ]]; then
|
|
export PATH=$PATH:$1
|
|
else
|
|
export PATH=$1:$PATH
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
# Add XCode bin directory for the command line tools to the PATH
|
|
pathmunge "$(xcode-select --print-path)"/usr/bin
|
|
|
|
# Add toolchain bin directory to the PATH
|
|
pathmunge "$TOOLCHAIN_DIR"/bin
|
|
|
|
cd ${DIR_DOWNLOADS}
|
|
iaslLocalVers=
|
|
if [[ -f ${PREFIX}/bin/iasl ]]; then
|
|
iaslLocalInfo=$(${PREFIX}/bin/iasl -v)
|
|
iaslLocalVers=${iaslLocalInfo:68:8}
|
|
fi
|
|
nasmLocalVers=
|
|
if [[ -f ${PREFIX}/bin/nasm ]]; then
|
|
nasmLocalVers=$(${PREFIX}/bin/nasm -v)
|
|
nasmLocalVers=${nasmLocalVers:13:$verLen}
|
|
fi
|
|
|
|
if [ "$iaslLocalVers" != "$acpicaVers" ]; then
|
|
echoc "Detected updated SVN iasl " red -n; echoc ":-$acpicaVers-:" green
|
|
iaslUpdate=Yes
|
|
else
|
|
echoc "Detected local iasl " red -n; echoc ":-$iaslLocalVers-:" green
|
|
iaslUpdate=No
|
|
fi
|
|
export TARBALL_ACPICA=acpica-unix-$acpicaVers
|
|
|
|
if [ "$nasmLocalVers" != "$NASM_VERSION" ]; then
|
|
echoc "Detected updated SVN nasm " red -n; echoc ":-$NASM_VERSION-:" green
|
|
nasmUpdate=Yes
|
|
else
|
|
echoc "Detected local nasm " red -n; echoc ":-$nasmLocalVers-:" green
|
|
nasmUpdate=No
|
|
fi
|
|
if [[ ! -f ${DIR_DOWNLOADS}/${TARBALL_ACPICA}.tar.gz ]]; then
|
|
echoc "Downloading https://acpica.org/sites/acpica/files/${TARBALL_ACPICA}.tar.gz" green
|
|
echo
|
|
curl -f -o download.tmp --remote-name https://acpica.org/sites/acpica/files/${TARBALL_ACPICA}.tar.gz || exit 1
|
|
mv download.tmp ${TARBALL_ACPICA}.tar.gz
|
|
echo
|
|
fi
|
|
if [[ "$iaslUpdate" == "Yes" ]]; then
|
|
if [ -f ${PREFIX}/bin/iasl ]; then
|
|
rm -rf ${PREFIX}/bin/iasl
|
|
fi
|
|
fi
|
|
if [ ! -f ${PREFIX}/bin/iasl ]; then
|
|
echoc "Building ACPICA $acpicaVers" green
|
|
tar -zxf ${TARBALL_ACPICA}.tar.gz
|
|
cd ${TARBALL_ACPICA}
|
|
make iasl CC=gcc 1> /dev/null 2> $DIR_LOGS/${TARBALL_ACPICA}.make.log.txt
|
|
make install 1> $DIR_LOGS/${TARBALL_ACPICA}.install.log.txt 2> /dev/null
|
|
rm -Rf ${DIR_DOWNLOADS}/${TARBALL_ACPICA}
|
|
echo
|
|
fi
|
|
cd ${DIR_DOWNLOADS}
|
|
tarball="nasm-${NASM_VERSION}.tar.xz"
|
|
if [[ ! -f "$tarball" ]]; then
|
|
echoc "Status: $tarball not found." red
|
|
curl -f -o download.tmp --remote-name https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VERSION}/$tarball || exit 1
|
|
mv download.tmp $tarball
|
|
fi
|
|
|
|
|
|
if [[ "$nasmUpdate" == "Yes" ]]; then
|
|
echoc "Building nasm V${NASM_VERSION}" green
|
|
tar -zxf $tarball
|
|
cd nasm-${NASM_VERSION}
|
|
LDFLAGS="-dead_strip" ./configure --prefix=${PREFIX} 1> /dev/null 2> $DIR_LOGS/$tarball.config.log.txt
|
|
make CC=clang 1> /dev/null 2> $DIR_LOGS/$tarball.make.log.txt
|
|
strip nasm && cp nasm ${PREFIX}/bin/
|
|
rm -Rf ${DIR_DOWNLOADS}/nasm-${NASM_VERSION}
|
|
echo
|
|
fi
|