diff options
Diffstat (limited to 'js/src/zydis/update.sh')
-rwxr-xr-x | js/src/zydis/update.sh | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/js/src/zydis/update.sh b/js/src/zydis/update.sh new file mode 100755 index 0000000000..f99552373d --- /dev/null +++ b/js/src/zydis/update.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env bash + +# Copyright 2019 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Usage: update.sh [-v version] +# +# The version is the github rev we want; the default is HEAD +# +# Script to pull a new version of zydis, assuming it looks like an +# older version of zydis. (This is by no means assured.) + +if [ ! -d zydis -o ! -f zydis/moz.build ]; then + echo "Run this script from the mozilla-central/js/src directory" + exit 1 +fi + +REV="HEAD" +if [ "$1" = "-v" ]; then + REV=$2 +fi + +ZYDISTMP=$(pwd)/zydis_tmp +ZYDISNEW=$(pwd)/zydis_new +ZYDISOLD=$(pwd)/zydis_old +rm -rf $ZYDISTMP $ZYDISNEW $ZYDISOLD + +# Get zydis + +echo "CLONING..." +mkdir $ZYDISTMP +( +cd $ZYDISTMP +git clone --recursive https://github.com/zyantific/zydis.git +cd zydis +git checkout $REV +) + +# Copy Mozilla-created files + +echo "COPYING..." +mkdir $ZYDISNEW +cp zydis/{README.md,ZydisAPI.{cpp,h},Zy*ExportConfig.h,update.sh} $ZYDISNEW + +# Copy selected zydis files, and rename some + +echo "COPYING ZYDIS..." +( +cd $ZYDISNEW +cp -R $ZYDISTMP/zydis/src Zydis +cp -R $ZYDISTMP/zydis/include/Zydis/* Zydis +cp $ZYDISTMP/zydis/LICENSE Zydis +cp -R $ZYDISTMP/zydis/dependencies/zycore/src/ Zycore +cp -R $ZYDISTMP/zydis/dependencies/zycore/include/Zycore/* Zycore +cp $ZYDISTMP/zydis/dependencies/zycore/LICENSE Zycore +rm -f Zycore/API/{Synchronization*,Terminal*,Thread*} +mv Zydis/String.c Zydis/ZydisString.c +mv Zycore/String.c Zycore/ZycoreString.c +( cd $ZYDISTMP/zydis ; git log -n 1 | grep '^commit' | awk '{ print $2 }' ) > imported-revision.txt +) + +# Rewrite include paths to be Firefox-canonical and reflect new +# locations of files. + +echo "REWRITING..." +( +cd $ZYDISNEW +for fn in $(find . -name '*.h' -o -name '*.c'); do + cat $fn | gawk ' +{ if (match($0, /( *# *include +)<(Zy.*ExportConfig.h|Zy(dis|core).*\.h)>/, res)) { + print res[1] "\"zydis/" res[2] "\"" + next + } else if (match($0, /( *# *include +)<(Generated\/.*\.inc)>/, res)) { + print res[1] "\"zydis/Zydis/" res[2] "\"" + next + } + print $0 }' > $fn.bak + mv $fn.bak $fn +done +) + +# Generate moz.build from the sources + +echo "GENERATING MOZ.BUILD..." +( +cd $ZYDISNEW +( +cat <<EOF +# This file was generated by update.sh + +FINAL_LIBRARY = 'js' + +# Includes should be relative to parent path +LOCAL_INCLUDES += [ + '!..', + '..' +] + +include('../js-config.mozbuild') +include('../js-cxxflags.mozbuild') + +if CONFIG['JS_CODEGEN_X64'] or CONFIG['JS_CODEGEN_X86']: + SOURCES += [ +EOF +for fn in $(find . -name '*.c' -o -name '*.cpp' | ( LC_ALL=C sort --ignore-case ) | sed 's/\.\///'); do + echo " '$fn'," +done +cat <<EOF + ] +EOF +) > moz.build +) + +echo "CLEANING UP..." +mv zydis $ZYDISOLD +mv $ZYDISNEW zydis +rm -rf $ZYDISTMP |