Use upstream build system when possible (#61)
This commit is contained in:
parent
2e69505479
commit
cb65dbcd80
|
@ -127,126 +127,146 @@ build_nim() {
|
||||||
# working directory
|
# working directory
|
||||||
pushd "$NIM_DIR"
|
pushd "$NIM_DIR"
|
||||||
|
|
||||||
# Git repos for csources and Nimble
|
if grep -q skipIntegrityCheck koch.nim; then
|
||||||
if [[ ! -d "$CSOURCES_DIR" ]]; then
|
# Run Nim buildchain
|
||||||
if git merge-base --is-ancestor $CSOURCES_V2_START_COMMIT $NIM_COMMIT_HASH; then
|
. ci/funs.sh
|
||||||
CSOURCES_REPO=$CSOURCES_V2_REPO
|
NIMCORES=1 nimBuildCsourcesIfNeeded $UCPU
|
||||||
CSOURCES_COMMIT=$CSOURCES_V2_COMMIT
|
bin/nim c --noNimblePath --skipUserCfg --skipParentCfg --warnings:off --hints:off koch
|
||||||
|
./koch --skipIntegrityCheck boot -d:release --skipUserCfg --skipParentCfg --warnings:off --hints:off
|
||||||
|
if [[ "${QUICK_AND_DIRTY_COMPILER}" == "0" ]]; then
|
||||||
|
# We want tools
|
||||||
|
./koch tools -d:release --skipUserCfg --skipParentCfg --warnings:off --hints:off
|
||||||
|
elif [[ "${QUICK_AND_DIRTY_NIMBLE}" != "0" ]]; then
|
||||||
|
# We just want nimble
|
||||||
|
./koch nimble -d:release --skipUserCfg --skipParentCfg --warnings:off --hints:off
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Custom buildchain for older versions
|
||||||
|
# TODO Remove this once the default NIM_COMMIT supports `--skipIntegrityCheck`
|
||||||
|
# We will still be able to compile older versions by removing the flag,
|
||||||
|
# which will just waste a bit of CPU
|
||||||
|
|
||||||
|
# Git repos for csources and Nimble
|
||||||
|
if [[ ! -d "$CSOURCES_DIR" ]]; then
|
||||||
|
if git merge-base --is-ancestor $CSOURCES_V2_START_COMMIT $NIM_COMMIT_HASH; then
|
||||||
|
CSOURCES_REPO=$CSOURCES_V2_REPO
|
||||||
|
CSOURCES_COMMIT=$CSOURCES_V2_COMMIT
|
||||||
|
else
|
||||||
|
CSOURCES_REPO=$CSOURCES_V1_REPO
|
||||||
|
CSOURCES_COMMIT=$CSOURCES_V1_COMMIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$CSOURCES_DIR"
|
||||||
|
pushd "$CSOURCES_DIR"
|
||||||
|
git clone $CSOURCES_REPO .
|
||||||
|
git checkout $CSOURCES_COMMIT
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
if [[ "$CSOURCES_DIR" != "csources" ]]; then
|
||||||
|
rm -rf csources
|
||||||
|
ln -s "$CSOURCES_DIR" csources
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$NIMBLE_DIR" ]]; then
|
||||||
|
mkdir -p "$NIMBLE_DIR"
|
||||||
|
pushd "$NIMBLE_DIR"
|
||||||
|
git clone https://github.com/nim-lang/nimble.git .
|
||||||
|
git checkout $NIMBLE_COMMIT
|
||||||
|
# we have to delete .git or koch.nim will checkout a branch tip, overriding our target commit
|
||||||
|
rm -rf .git
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
if [[ "$NIMBLE_DIR" != "dist/nimble" ]]; then
|
||||||
|
mkdir -p dist
|
||||||
|
rm -rf dist/nimble
|
||||||
|
ln -s ../"$NIMBLE_DIR" dist/nimble
|
||||||
|
fi
|
||||||
|
|
||||||
|
# bootstrap the Nim compiler and build the tools
|
||||||
|
rm -f bin/{nim,nim_csources}
|
||||||
|
pushd csources
|
||||||
|
if [[ "$ON_WINDOWS" == "0" ]]; then
|
||||||
|
$MAKE $UCPU clean
|
||||||
|
$MAKE $UCPU LD=$CC
|
||||||
else
|
else
|
||||||
CSOURCES_REPO=$CSOURCES_V1_REPO
|
$MAKE myos=windows $UCPU clean
|
||||||
CSOURCES_COMMIT=$CSOURCES_V1_COMMIT
|
$MAKE myos=windows $UCPU CC=gcc LD=gcc
|
||||||
|
fi
|
||||||
|
popd
|
||||||
|
if [[ -e csources/bin ]]; then
|
||||||
|
rm -f bin/nim bin/nim_csources
|
||||||
|
cp -a csources/bin/nim bin/nim
|
||||||
|
cp -a csources/bin/nim bin/nim_csources
|
||||||
|
rm -rf csources/bin
|
||||||
|
else
|
||||||
|
cp -a bin/nim bin/nim_csources
|
||||||
|
fi
|
||||||
|
if [[ "$QUICK_AND_DIRTY_COMPILER" == "0" ]]; then
|
||||||
|
sed \
|
||||||
|
-e 's/koch$/--warnings:off --hints:off koch/' \
|
||||||
|
-e 's/koch boot/koch boot --warnings:off --hints:off/' \
|
||||||
|
-e '/nimBuildCsourcesIfNeeded/d' \
|
||||||
|
build_all.sh > build_all_custom.sh
|
||||||
|
sh build_all_custom.sh
|
||||||
|
rm build_all_custom.sh
|
||||||
|
else
|
||||||
|
# Don't re-build it multiple times until we get identical
|
||||||
|
# binaries, like "build_all.sh" does. Don't build any tools
|
||||||
|
# either. This is all about build speed, not developer comfort.
|
||||||
|
bin/nim_csources \
|
||||||
|
c \
|
||||||
|
--compileOnly \
|
||||||
|
--nimcache:nimcache \
|
||||||
|
-d:release \
|
||||||
|
--skipUserCfg \
|
||||||
|
--skipParentCfg \
|
||||||
|
--warnings:off \
|
||||||
|
--hints:off \
|
||||||
|
compiler/nim.nim
|
||||||
|
bin/nim_csources \
|
||||||
|
jsonscript \
|
||||||
|
--nimcache:nimcache \
|
||||||
|
--skipUserCfg \
|
||||||
|
--skipParentCfg \
|
||||||
|
compiler/nim.nim
|
||||||
|
cp -a compiler/nim bin/nim1
|
||||||
|
# If we stop here, we risk ending up with a buggy compiler:
|
||||||
|
# https://github.com/status-im/nimbus-eth2/pull/2220
|
||||||
|
# https://github.com/status-im/nimbus-eth2/issues/2310
|
||||||
|
bin/nim1 \
|
||||||
|
c \
|
||||||
|
--compileOnly \
|
||||||
|
--nimcache:nimcache \
|
||||||
|
-d:release \
|
||||||
|
--skipUserCfg \
|
||||||
|
--skipParentCfg \
|
||||||
|
--warnings:off \
|
||||||
|
--hints:off \
|
||||||
|
compiler/nim.nim
|
||||||
|
bin/nim1 \
|
||||||
|
jsonscript \
|
||||||
|
--nimcache:nimcache \
|
||||||
|
--skipUserCfg \
|
||||||
|
--skipParentCfg \
|
||||||
|
compiler/nim.nim
|
||||||
|
rm -f bin/nim
|
||||||
|
cp -a compiler/nim bin/nim
|
||||||
|
rm bin/nim1
|
||||||
|
|
||||||
|
# Do we want Nimble in this quick build?
|
||||||
|
if [[ "${QUICK_AND_DIRTY_NIMBLE}" != "0" ]]; then
|
||||||
|
bin/nim c -d:release --noNimblePath --skipUserCfg --skipParentCfg dist/nimble/src/nimble.nim
|
||||||
|
mv dist/nimble/src/nimble bin/
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "$CSOURCES_DIR"
|
if [[ "$QUICK_AND_DIRTY_COMPILER" == "0" || "${QUICK_AND_DIRTY_NIMBLE}" != "0" ]]; then
|
||||||
pushd "$CSOURCES_DIR"
|
# Nimble needs a CA cert
|
||||||
git clone $CSOURCES_REPO .
|
rm -f bin/cacert.pem
|
||||||
git checkout $CSOURCES_COMMIT
|
curl -LsS -o bin/cacert.pem https://curl.se/ca/cacert.pem || echo "Warning: 'curl' failed to download a CA cert needed by Nimble. Ignoring it."
|
||||||
popd
|
|
||||||
fi
|
|
||||||
if [[ "$CSOURCES_DIR" != "csources" ]]; then
|
|
||||||
rm -rf csources
|
|
||||||
ln -s "$CSOURCES_DIR" csources
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d "$NIMBLE_DIR" ]]; then
|
|
||||||
mkdir -p "$NIMBLE_DIR"
|
|
||||||
pushd "$NIMBLE_DIR"
|
|
||||||
git clone https://github.com/nim-lang/nimble.git .
|
|
||||||
git checkout $NIMBLE_COMMIT
|
|
||||||
# we have to delete .git or koch.nim will checkout a branch tip, overriding our target commit
|
|
||||||
rm -rf .git
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
if [[ "$NIMBLE_DIR" != "dist/nimble" ]]; then
|
|
||||||
mkdir -p dist
|
|
||||||
rm -rf dist/nimble
|
|
||||||
ln -s ../"$NIMBLE_DIR" dist/nimble
|
|
||||||
fi
|
|
||||||
|
|
||||||
# bootstrap the Nim compiler and build the tools
|
|
||||||
rm -f bin/{nim,nim_csources}
|
|
||||||
pushd csources
|
|
||||||
if [[ "$ON_WINDOWS" == "0" ]]; then
|
|
||||||
$MAKE $UCPU clean
|
|
||||||
$MAKE $UCPU LD=$CC
|
|
||||||
else
|
|
||||||
$MAKE myos=windows $UCPU clean
|
|
||||||
$MAKE myos=windows $UCPU CC=gcc LD=gcc
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
if [[ -e csources/bin ]]; then
|
|
||||||
rm -f bin/nim bin/nim_csources
|
|
||||||
cp -a csources/bin/nim bin/nim
|
|
||||||
cp -a csources/bin/nim bin/nim_csources
|
|
||||||
rm -rf csources/bin
|
|
||||||
else
|
|
||||||
cp -a bin/nim bin/nim_csources
|
|
||||||
fi
|
|
||||||
if [[ "$QUICK_AND_DIRTY_COMPILER" == "0" ]]; then
|
|
||||||
sed \
|
|
||||||
-e 's/koch$/--warnings:off --hints:off koch/' \
|
|
||||||
-e 's/koch boot/koch boot --warnings:off --hints:off/' \
|
|
||||||
-e '/nimBuildCsourcesIfNeeded/d' \
|
|
||||||
build_all.sh > build_all_custom.sh
|
|
||||||
sh build_all_custom.sh
|
|
||||||
rm build_all_custom.sh
|
|
||||||
else
|
|
||||||
# Don't re-build it multiple times until we get identical
|
|
||||||
# binaries, like "build_all.sh" does. Don't build any tools
|
|
||||||
# either. This is all about build speed, not developer comfort.
|
|
||||||
bin/nim_csources \
|
|
||||||
c \
|
|
||||||
--compileOnly \
|
|
||||||
--nimcache:nimcache \
|
|
||||||
-d:release \
|
|
||||||
--skipUserCfg \
|
|
||||||
--skipParentCfg \
|
|
||||||
--warnings:off \
|
|
||||||
--hints:off \
|
|
||||||
compiler/nim.nim
|
|
||||||
bin/nim_csources \
|
|
||||||
jsonscript \
|
|
||||||
--nimcache:nimcache \
|
|
||||||
--skipUserCfg \
|
|
||||||
--skipParentCfg \
|
|
||||||
compiler/nim.nim
|
|
||||||
cp -a compiler/nim bin/nim1
|
|
||||||
# If we stop here, we risk ending up with a buggy compiler:
|
|
||||||
# https://github.com/status-im/nimbus-eth2/pull/2220
|
|
||||||
# https://github.com/status-im/nimbus-eth2/issues/2310
|
|
||||||
bin/nim1 \
|
|
||||||
c \
|
|
||||||
--compileOnly \
|
|
||||||
--nimcache:nimcache \
|
|
||||||
-d:release \
|
|
||||||
--skipUserCfg \
|
|
||||||
--skipParentCfg \
|
|
||||||
--warnings:off \
|
|
||||||
--hints:off \
|
|
||||||
compiler/nim.nim
|
|
||||||
bin/nim1 \
|
|
||||||
jsonscript \
|
|
||||||
--nimcache:nimcache \
|
|
||||||
--skipUserCfg \
|
|
||||||
--skipParentCfg \
|
|
||||||
compiler/nim.nim
|
|
||||||
rm -f bin/nim
|
|
||||||
cp -a compiler/nim bin/nim
|
|
||||||
rm bin/nim1
|
|
||||||
|
|
||||||
# Do we want Nimble in this quick build?
|
|
||||||
if [[ "${QUICK_AND_DIRTY_NIMBLE}" != "0" ]]; then
|
|
||||||
bin/nim c -d:release --noNimblePath --skipUserCfg --skipParentCfg dist/nimble/src/nimble.nim
|
|
||||||
mv dist/nimble/src/nimble bin/
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$QUICK_AND_DIRTY_COMPILER" == "0" || "${QUICK_AND_DIRTY_NIMBLE}" != "0" ]]; then
|
|
||||||
# Nimble needs a CA cert
|
|
||||||
rm -f bin/cacert.pem
|
|
||||||
curl -LsS -o bin/cacert.pem https://curl.se/ca/cacert.pem || echo "Warning: 'curl' failed to download a CA cert needed by Nimble. Ignoring it."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# record the built commit
|
# record the built commit
|
||||||
echo ${NIM_COMMIT_HASH} > bin/last_built_commit
|
echo ${NIM_COMMIT_HASH} > bin/last_built_commit
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue