mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Experimental wasm rebuild scripts
This commit is contained in:
parent
3d4a2219a6
commit
22466acf39
98
scripts/wasm-rebuild/docker-scripts/genbytecode.sh
Executable file
98
scripts/wasm-rebuild/docker-scripts/genbytecode.sh
Executable file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Script used for cross-platform comparison as part of the travis automation.
|
||||
# Splits all test source code into multiple files, generates bytecode and
|
||||
# uploads the bytecode into github.com/ethereum/solidity-test-bytecode where
|
||||
# another travis job is triggered to do the actual comparison.
|
||||
#
|
||||
# ------------------------------------------------------------------------------
|
||||
# This file is part of solidity.
|
||||
#
|
||||
# solidity is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# solidity is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with solidity. If not, see <http://www.gnu.org/licenses/>
|
||||
#
|
||||
# (c) 2017 solidity contributors.
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPTDIR=$(dirname "$0")
|
||||
SCRIPTDIR=$(realpath "${SCRIPTDIR}")
|
||||
|
||||
|
||||
echo "Compiling all test contracts into bytecode..."
|
||||
TMPDIR=$(mktemp -d)
|
||||
(
|
||||
cd "${TMPDIR}"
|
||||
"${SCRIPTDIR}/isolate_tests.py" /src/test/
|
||||
|
||||
cat > solc <<EOF
|
||||
#!/usr/bin/env node
|
||||
var process = require('process')
|
||||
var fs = require('fs')
|
||||
|
||||
var compiler = require('/root/solc-js/wrapper.js')(require("${1}"))
|
||||
|
||||
for (var optimize of [false, true])
|
||||
{
|
||||
for (var filename of process.argv.slice(2))
|
||||
{
|
||||
if (filename !== undefined)
|
||||
{
|
||||
var inputs = {}
|
||||
inputs[filename] = { content: fs.readFileSync(filename).toString() }
|
||||
var input = {
|
||||
language: 'Solidity',
|
||||
sources: inputs,
|
||||
settings: {
|
||||
optimizer: { enabled: optimize },
|
||||
outputSelection: { '*': { '*': ['*'] } }
|
||||
}
|
||||
}
|
||||
try {
|
||||
var result = JSON.parse(compiler.compile(JSON.stringify(input)))
|
||||
if (
|
||||
!('contracts' in result) ||
|
||||
Object.keys(result['contracts']).length === 0
|
||||
)
|
||||
{
|
||||
// NOTE: do not exit here because this may be run on source which cannot be compiled
|
||||
console.log(filename + ': ERROR')
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var outputName in result['contracts'])
|
||||
for (var contractName in result['contracts'][outputName])
|
||||
{
|
||||
var contractData = result['contracts'][outputName][contractName];
|
||||
if (contractData.evm !== undefined && contractData.evm.bytecode !== undefined)
|
||||
console.log(filename + ':' + contractName + ' ' + contractData.evm.bytecode.object)
|
||||
else
|
||||
console.log(filename + ':' + contractName + ' NO BYTECODE')
|
||||
console.log(filename + ':' + contractName + ' ' + contractData.metadata)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(filename + ': FATAL ERROR')
|
||||
console.error(filename)
|
||||
console.error(inputs)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
chmod +x solc
|
||||
./solc *.sol > /tmp/report.txt
|
||||
)
|
||||
rm -rf "$TMPDIR"
|
55
scripts/wasm-rebuild/docker-scripts/isolate_tests.py
Executable file
55
scripts/wasm-rebuild/docker-scripts/isolate_tests.py
Executable file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python2
|
||||
|
||||
import sys
|
||||
import re
|
||||
import os
|
||||
import hashlib
|
||||
from os.path import join, isfile
|
||||
|
||||
|
||||
def extract_test_cases(path):
|
||||
lines = open(path, 'rb').read().splitlines()
|
||||
|
||||
inside = False
|
||||
delimiter = ''
|
||||
tests = []
|
||||
|
||||
for l in lines:
|
||||
if inside:
|
||||
if l.strip().endswith(')' + delimiter + '";'):
|
||||
tests[-1] += l.strip()[:-(3 + len(delimiter))]
|
||||
inside = False
|
||||
else:
|
||||
tests[-1] += l + '\n'
|
||||
else:
|
||||
m = re.search(r'R"([^(]*)\((.*)$', l.strip())
|
||||
if m:
|
||||
inside = True
|
||||
delimiter = m.group(1)
|
||||
tests += [m.group(2)]
|
||||
|
||||
return tests
|
||||
|
||||
def extract_and_write(f, path):
|
||||
if f.endswith('.sol'):
|
||||
cases = [open(path, 'r').read()]
|
||||
else:
|
||||
cases = extract_test_cases(path)
|
||||
write_cases(f, cases)
|
||||
|
||||
def write_cases(f, tests):
|
||||
cleaned_filename = f.replace(".","_").replace("-","_").replace(" ","_").lower()
|
||||
for test in tests:
|
||||
remainder = re.sub(r'^ {4}', '', test, 0, re.MULTILINE)
|
||||
open('test_%s_%s.sol' % (hashlib.sha256(test).hexdigest(), cleaned_filename), 'w').write(remainder)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
path = sys.argv[1]
|
||||
|
||||
for root, subdirs, files in os.walk(path):
|
||||
if '_build' in subdirs:
|
||||
subdirs.remove('_build')
|
||||
for f in files:
|
||||
path = join(root, f)
|
||||
extract_and_write(f, path)
|
7
scripts/wasm-rebuild/docker-scripts/patch.sh
Executable file
7
scripts/wasm-rebuild/docker-scripts/patch.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
TAG="$1"
|
||||
SOLJSON_JS="$2"
|
||||
|
||||
# If we ever want to patch the binaries e.g. for compatibility with older solc-js versions,
|
||||
# we can do that here.
|
67
scripts/wasm-rebuild/docker-scripts/rebuild_current.sh
Executable file
67
scripts/wasm-rebuild/docker-scripts/rebuild_current.sh
Executable file
@ -0,0 +1,67 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# Do not call this script directly.
|
||||
|
||||
# This script is expected to be run inside the docker image trzeci/emscripten:sdk-tag-1.39.3-64bit and
|
||||
# be called by ./rebuild_tags.sh.
|
||||
|
||||
echo "========== STAGE 1: PREPARE ========== ($(date))"
|
||||
COMMIT_DATE="$(git show -s --format=%cI HEAD)"
|
||||
git rev-parse --short=8 HEAD >commit_hash.txt
|
||||
echo -e "" >prerelease.txt
|
||||
sed -i -e 's/-Wl,--gc-sections//' cmake/EthCompilerSettings.cmake
|
||||
echo "set(CMAKE_CXX_FLAGS \"\${CMAKE_CXX_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS=['cwrap','addFunction','removeFunction','UTF8ToString','lengthBytesUTF8','_malloc','stringToUTF8','setValue'] -s WASM=1 -s WASM_ASYNC_COMPILATION=0 -s SINGLE_FILE=1 -Wno-almost-asm\")" >>cmake/EthCompilerSettings.cmake
|
||||
# Needed for < 0.5.0.
|
||||
sed -i -e 's/-Werror/-Wno-error/' cmake/EthCompilerSettings.cmake
|
||||
|
||||
echo "========== STAGE 2: BUILD ========== ($(date))"
|
||||
scripts/travis-emscripten/install_deps.sh
|
||||
if [ -d cryptopp ]; then
|
||||
# Needed for < 0.4.4. Will not affect >= 0.4.5.
|
||||
# Unfortunately we need to update to the latest
|
||||
# release in the 5.6 series for it to build.
|
||||
# Hopefully we don't miss any bugs.
|
||||
rm -rf cryptopp
|
||||
git clone https://github.com/weidai11/cryptopp/
|
||||
(
|
||||
set -e
|
||||
cd cryptopp
|
||||
git checkout CRYPTOPP_5_6_5
|
||||
ln -s . src
|
||||
)
|
||||
fi
|
||||
if [ -d jsoncpp ]; then
|
||||
# Needed for < 0.4.4. Will not affect >= 0.4.5.
|
||||
(
|
||||
set -e
|
||||
cd jsoncpp
|
||||
# Checkout the latest commit at the time of our release.
|
||||
git checkout $(git rev-list -1 --before=$COMMIT_DATE master)
|
||||
)
|
||||
fi
|
||||
|
||||
set +e
|
||||
scripts/travis-emscripten/build_emscripten.sh
|
||||
set -e
|
||||
|
||||
mkdir -p upload
|
||||
|
||||
if [ ! -f upload/soljson.js ]; then
|
||||
if [ -f build/solc/soljson.js ]; then
|
||||
cp build/solc/soljson.js upload
|
||||
elif [ -f build/libsolc/soljson.js ]; then
|
||||
cp build/libsolc/soljson.js upload
|
||||
elif [ -f emscripten_build/solc/soljson.js ]; then
|
||||
cp emscripten_build/solc/soljson.js upload
|
||||
elif [ -f emscripten_build/libsolc/soljson.js ]; then
|
||||
cp emscripten_build/libsolc/soljson.js upload
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f upload/soljson.js ]; then
|
||||
echo "========== SUCCESS ========== ($(date))"
|
||||
exit 0
|
||||
else
|
||||
echo "========== FAILURE ========== ($(date))"
|
||||
exit 1
|
||||
fi
|
238
scripts/wasm-rebuild/docker-scripts/rebuild_tags.sh
Executable file
238
scripts/wasm-rebuild/docker-scripts/rebuild_tags.sh
Executable file
@ -0,0 +1,238 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# This script is expected to be run inside the docker image trzeci/emscripten:sdk-tag-1.39.3-64bit.
|
||||
# Its main purpose is to be called by ../rebuild.sh.
|
||||
|
||||
# Usage: $0 [tagFilter] [outputDirectory]
|
||||
|
||||
# The output directory must be outside the repository,
|
||||
# since the script will prune the repository directory after
|
||||
# each build.
|
||||
|
||||
TAG_FILTER="$1"
|
||||
OUTPUTDIR="$2"
|
||||
RETEST=0
|
||||
shift
|
||||
shift
|
||||
while (( "$#" )); do
|
||||
if [[ "$1" == "--retest" ]]; then
|
||||
RETEST=1
|
||||
else
|
||||
echo "Unrecognized option: $1"
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
SOLIDITY_REPO_URL="https://github.com/ethereum/solidity"
|
||||
SOLC_JS_REPO_URL="https://github.com/ethereum/solc-js"
|
||||
SOLC_JS_BRANCH=wasmRebuildTests
|
||||
RELEASE_URL="https://raw.githubusercontent.com/ethereum/solc-bin/gh-pages/bin"
|
||||
RELEASE_COMMIT_LIST_URL="$RELEASE_URL/list.txt"
|
||||
|
||||
SCRIPTDIR=$(dirname "$0")
|
||||
SCRIPTDIR=$(realpath "${SCRIPTDIR}")
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
ORANGE='\033[0;33m'
|
||||
CYAN='\033[0;36m'
|
||||
RESET='\033[0m'
|
||||
|
||||
function generate_bytecode_report() {
|
||||
rm -rf /tmp/report.txt
|
||||
|
||||
local EXIT_STATUS
|
||||
|
||||
if semver -r "<0.4.12" $3 > /dev/null; then
|
||||
set +e
|
||||
"${SCRIPTDIR}/genbytecode.sh" "$1" >/dev/null 2>&1
|
||||
EXIT_STATUS=$?
|
||||
set -e
|
||||
else
|
||||
set +e
|
||||
(
|
||||
set -e
|
||||
|
||||
git reset --hard HEAD --quiet
|
||||
git clean -f -d -x --quiet
|
||||
|
||||
for dir in build/solc build/libsolc emscripten_build/libsolc; do
|
||||
mkdir -p $dir
|
||||
rm -rf $dir/soljson.js
|
||||
ln -sf "$1" $dir/soljson.js
|
||||
done
|
||||
|
||||
/tmp/storebytecode.sh >/dev/null 2>&1
|
||||
)
|
||||
EXIT_STATUS=$?
|
||||
fi
|
||||
|
||||
if [ $EXIT_STATUS -eq 0 ] && [ -f /tmp/report.txt ] && grep -q -v -c -e "ERROR" -e "NO BYTECODE" /tmp/report.txt; then
|
||||
mv /tmp/report.txt "$2"
|
||||
echo -e "${GREEN}SUCCESS${RESET}"
|
||||
else
|
||||
echo -e "${RED}FAILURE${RESET}"
|
||||
fi
|
||||
}
|
||||
function clean_git_checkout() {
|
||||
git submodule deinit --all -q
|
||||
git reset --hard HEAD --quiet
|
||||
git clean -f -d -x --quiet
|
||||
git checkout "$1" --quiet
|
||||
git submodule init -q
|
||||
git submodule update -q
|
||||
}
|
||||
function process_tag() {
|
||||
local TAG=$1
|
||||
cd /src
|
||||
# Checkout the historic commit instead of the tag directly.
|
||||
local HISTORIC_COMMIT_HASH="$(grep "${TAG}+" /tmp/release_commit_list.txt | cut -d '+' -f 2 | cut -d '.' -f 2)"
|
||||
if [ "$(git cat-file -t ${HISTORIC_COMMIT_HASH} 2>/dev/null)" == "commit" ]; then
|
||||
clean_git_checkout "$HISTORIC_COMMIT_HASH"
|
||||
else
|
||||
clean_git_checkout "${TAG}"
|
||||
fi
|
||||
|
||||
# compatibility symlink
|
||||
ln -s . solidity
|
||||
|
||||
local VERSION
|
||||
if [ -f ./scripts/get_version.sh ]; then
|
||||
VERSION=$(./scripts/get_version.sh)
|
||||
else
|
||||
VERSION=$(echo "$TAG" | cut -d v -f 2)
|
||||
fi
|
||||
|
||||
local COMMIT_HASH=$(git rev-parse --short=8 HEAD)
|
||||
local FULL_VERSION_SUFFIX="${TAG}+commit.${COMMIT_HASH}"
|
||||
local HISTORIC_VERSION_SUFFIX="${TAG}+commit.${HISTORIC_COMMIT_HASH}"
|
||||
|
||||
if [ ! -f "${OUTPUTDIR}/bin/soljson-${FULL_VERSION_SUFFIX}.js" ]; then
|
||||
echo -ne "BUILDING ${CYAN}${TAG}${RESET}... "
|
||||
set +e
|
||||
(
|
||||
set -e
|
||||
"${SCRIPTDIR}/rebuild_current.sh" "${VERSION}" >"${OUTPUTDIR}/log/running/build-$TAG.txt" 2>&1
|
||||
"${SCRIPTDIR}/patch.sh" "$TAG" upload/soljson.js
|
||||
cp upload/soljson.js "${OUTPUTDIR}/bin/soljson-${FULL_VERSION_SUFFIX}.js"
|
||||
rm upload/soljson.js
|
||||
)
|
||||
local EXIT_STATUS=$?
|
||||
set -e
|
||||
rm -f "${OUTPUTDIR}/log/success/build-$TAG.txt"
|
||||
rm -f "${OUTPUTDIR}/log/fail/build-$TAG.txt"
|
||||
if [ $EXIT_STATUS -eq 0 ]; then
|
||||
mv "${OUTPUTDIR}/log/running/build-$TAG.txt" "${OUTPUTDIR}/log/success"
|
||||
echo -e "${GREEN}SUCCESS${RESET}"
|
||||
else
|
||||
mv "${OUTPUTDIR}/log/running/build-$TAG.txt" "${OUTPUTDIR}/log/fail"
|
||||
echo -e "${RED}FAIL${RESET}"
|
||||
fi
|
||||
else
|
||||
echo -e "${CYAN}${TAG}${RESET} ALREADY EXISTS."
|
||||
if [ $RETEST -eq 0 ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f "${OUTPUTDIR}/bin/soljson-${FULL_VERSION_SUFFIX}.js" ]; then
|
||||
|
||||
echo -ne "GENERATE BYTECODE REPORT FOR ${CYAN}${TAG}${RESET}... "
|
||||
generate_bytecode_report "${OUTPUTDIR}/bin/soljson-${FULL_VERSION_SUFFIX}.js" "${OUTPUTDIR}"/log/reports/report-${TAG}.txt "${TAG}"
|
||||
echo -ne "GENERATE BYTECODE REPORT FOR HISTORIC ${CYAN}${TAG}${RESET}... "
|
||||
rm -rf /tmp/soljson.js
|
||||
if wget -q "$RELEASE_URL/soljson-${HISTORIC_VERSION_SUFFIX}.js" -O /tmp/soljson.js; then
|
||||
generate_bytecode_report /tmp/soljson.js "${OUTPUTDIR}"/log/reports/report-historic-${TAG}.txt "${TAG}"
|
||||
else
|
||||
echo -e "${ORANGE}CANNOT FETCH RELEASE${RESET}"
|
||||
fi
|
||||
rm -rf /tmp/soljson.js
|
||||
|
||||
if [ -f "${OUTPUTDIR}/log/reports/report-${TAG}.txt" ] && [ -f "${OUTPUTDIR}/log/reports/report-historic-${TAG}.txt" ]; then
|
||||
rm -rf "${OUTPUTDIR}/log/success/bytecode-${TAG}.txt"
|
||||
rm -rf "${OUTPUTDIR}/log/fail/bytecode-${TAG}.txt"
|
||||
if diff -q "${OUTPUTDIR}/log/reports/report-${TAG}.txt" "${OUTPUTDIR}/log/reports/report-historic-${TAG}.txt" >/dev/null 2>&1; then
|
||||
echo -e "${GREEN}BYTECODE MATCHES FOR ${CYAN}${TAG}${RESET}"
|
||||
grep -v -c -e "ERROR" -e "NO BYTECODE" "${OUTPUTDIR}/log/reports/report-${TAG}.txt" >"${OUTPUTDIR}/log/success/bytecode-${TAG}.txt"
|
||||
else
|
||||
echo -e "${RED}BYTECODE DOES NOT MATCH FOR ${CYAN}${TAG}${RESET}"
|
||||
echo "MISMATCH" >"${OUTPUTDIR}/log/fail/bytecode-${TAG}.txt"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -ne "TESTING ${CYAN}${TAG}${RESET}... "
|
||||
cd /root/solc-js
|
||||
npm version --allow-same-version --no-git-tag-version "${VERSION}" >/dev/null
|
||||
sed -i -e "s/runTests(solc, .*)/runTests(solc, '${FULL_VERSION_SUFFIX}')/" test/compiler.js
|
||||
ln -sf "${OUTPUTDIR}/bin/soljson-${FULL_VERSION_SUFFIX}.js" soljson.js
|
||||
rm -f "${OUTPUTDIR}/log/success/test-$TAG.txt"
|
||||
rm -f "${OUTPUTDIR}/log/fail/test-$TAG.txt"
|
||||
if npm test >"${OUTPUTDIR}/log/running/test-$TAG.txt" 2>&1; then
|
||||
mv "${OUTPUTDIR}/log/running/test-$TAG.txt" "${OUTPUTDIR}/log/success"
|
||||
echo -e "${GREEN}SUCCESS${RESET}"
|
||||
else
|
||||
mv "${OUTPUTDIR}/log/running/test-$TAG.txt" "${OUTPUTDIR}/log/fail"
|
||||
echo -e "${RED}FAIL${RESET}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
cd /tmp
|
||||
|
||||
echo "Check out solidity repository..."
|
||||
if [ -d /root/project ]; then
|
||||
echo "Solidity repo checkout already exists."
|
||||
else
|
||||
git clone "${SOLIDITY_REPO_URL}" /root/project --quiet
|
||||
fi
|
||||
|
||||
echo "Extract bytecode comparison scripts from v0.6.1..."
|
||||
cd /root/project
|
||||
git checkout v0.6.1 --quiet
|
||||
cp scripts/bytecodecompare/storebytecode.sh /tmp
|
||||
sed -i -e 's/rm -rf "\$TMPDIR"/cp "\$TMPDIR"\/report.txt \/tmp\/report.txt ; rm -rf "\$TMPDIR"/' /tmp/storebytecode.sh
|
||||
sed -i -e 's/REPO_ROOT=.*/REPO_ROOT=\/src/' /tmp/storebytecode.sh
|
||||
export SOLC_EMSCRIPTEN="On"
|
||||
|
||||
echo "Check out solc-js repository..."
|
||||
if [ -d /root/solc-js ]; then
|
||||
echo "solc-js repo checkout already exists."
|
||||
else
|
||||
git clone --branch "${SOLC_JS_BRANCH}" "${SOLC_JS_REPO_URL}" /root/solc-js --quiet
|
||||
fi
|
||||
|
||||
echo "Create symbolic links for backwards compatibility with older emscripten docker images."
|
||||
ln -sf /emsdk_portable/node/current/* /emsdk_portable/node/
|
||||
ln -sf /emsdk_portable/emscripten/sdk/ /emsdk_portable/
|
||||
ln -sf sdk /emsdk_portable/emscripten/bin
|
||||
ln -sf /emsdk_portable/emscripten/bin/* /usr/local/bin
|
||||
rm -rf /src
|
||||
ln -sf /root/project /src
|
||||
|
||||
apt-get -qq update >/dev/null 2>&1
|
||||
apt-get -qq install cmake >/dev/null 2>&1
|
||||
|
||||
echo "Create output directories."
|
||||
mkdir -p "${OUTPUTDIR}"
|
||||
mkdir -p "${OUTPUTDIR}"/log
|
||||
mkdir -p "${OUTPUTDIR}"/log/success
|
||||
mkdir -p "${OUTPUTDIR}"/log/fail
|
||||
mkdir -p "${OUTPUTDIR}"/log/running
|
||||
mkdir -p "${OUTPUTDIR}"/log/reports
|
||||
mkdir -p "${OUTPUTDIR}"/bin
|
||||
|
||||
echo "Prepare solc-js."
|
||||
cd /root/solc-js
|
||||
npm install >/dev/null 2>&1
|
||||
|
||||
echo "Install semver helper."
|
||||
npm install -g semver >/dev/null 2>&1
|
||||
|
||||
echo "Fetching release commit list."
|
||||
wget -q "${RELEASE_COMMIT_LIST_URL}" -O /tmp/release_commit_list.txt
|
||||
|
||||
cd /src
|
||||
TAGS=$(git tag --list "${TAG_FILTER}" | tac)
|
||||
for TAG in ${TAGS}; do
|
||||
process_tag "${TAG}"
|
||||
done
|
28
scripts/wasm-rebuild/rebuild.sh
Executable file
28
scripts/wasm-rebuild/rebuild.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script is expected to produce working builds for all compiler versions >= 0.3.6 and
|
||||
# succeeding solc-js test runs for all compiler versions >= 0.5.0.
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "Usage: $0 [tagFilter] [outputDirectory] [options...]"
|
||||
echo
|
||||
echo " [tagFilter] will be passed to "git tag --list" to filter the tags to be built."
|
||||
echo " [outputDirectory] will contain log files and the resulting soljson.js builds."
|
||||
echo " --retest will re-run tests and bytecode comparisons, even if soljson.js is already built."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TAGS="$1"
|
||||
OUTPUTDIR="$2"
|
||||
shift
|
||||
shift
|
||||
SCRIPTDIR=$(dirname "$0")
|
||||
SCRIPTDIR=$(realpath "${SCRIPTDIR}")
|
||||
|
||||
if [ ! -d "${OUTPUTDIR}" ]; then
|
||||
echo "Output directory ${OUTPUTDIR} does not exist!."
|
||||
exit 1
|
||||
fi
|
||||
OUTPUTDIR=$(realpath "${OUTPUTDIR}")
|
||||
|
||||
docker run --rm -v "${OUTPUTDIR}":/tmp/output -v "${SCRIPTDIR}":/tmp/scripts:ro -it trzeci/emscripten:sdk-tag-1.39.3-64bit /tmp/scripts/docker-scripts/rebuild_tags.sh "${TAGS}" /tmp/output $@
|
Loading…
Reference in New Issue
Block a user