1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#!/bin/bash
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
set -x -e -v
# This script is for building the onnx runtime using upstream build system.
target_platform="$1"
target_arch="$2"
###
# Gather build dependencies from fetches
if test -d "$MOZ_FETCHES_DIR/cmake"; then
export PATH="$(cd $MOZ_FETCHES_DIR/cmake && pwd)/bin:${PATH}"
fi
onnxruntime_depdir="$MOZ_FETCHES_DIR/onnxruntime-deps"
export PATH="$(cd $MOZ_FETCHES_DIR/ninja && pwd)/bin:${PATH}"
export PATH="$(cd $MOZ_FETCHES_DIR/clang && pwd)/bin:${PATH}"
export CC=clang
export CXX=clang++
###
# Extra setup per platform
case ${target_platform} in
Darwin)
# Use taskcluster clang instead of host compiler on OSX
osx_sysroot=`cd ${MOZ_FETCHES_DIR}/MacOSX*.sdk; pwd`
extra_args="--cmake_extra_defines CMAKE_OSX_SYSROOT=${osx_sysroot} --osx_arch $target_arch"
prefix=lib
extension=dylib
;;
Linux)
prefix=lib
extension=so
;;
Android)
extra_args="--android --android_ndk_path=$MOZ_FETCHES_DIR/android-ndk --android_sdk_path=$MOZ_FETCHES_DIR/android-sdk-linux --android_abi=$target_arch"
prefix=lib
extension=so
;;
Windows)
# Still use visual studio there, compilation through clang-cl is not
# supported upstream.
case $target_arch in
x86)
extra_args="--x86"
;;
esac
extra_args="$extra_args --cmake_extra_defines CMAKE_SHARED_LINKER_FLAGS=/MANIFEST:NO"
. $GECKO_PATH/taskcluster/scripts/misc/vs-setup.sh
sed -i -e 's/ProgramDatabase//' "$MOZ_FETCHES_DIR/onnxruntime/tools/ci_build/build.py"
export CC=cl.exe
export CXX=cl.exe
prefix=
extension=dll
;;
esac
artifact=$(basename "$TOOLCHAIN_ARTIFACT")
onnx_folder=${artifact%.tar.*}
cd "$MOZ_FETCHES_DIR/onnxruntime"
###
# Various patches
# Update checksum for eigen3, see https://github.com/microsoft/onnxruntime/pull/24884
patch -p1 << EOF
diff --git a/cmake/deps.txt b/cmake/deps.txt
index 728241840f723..6e045f6dcdc9d 100644
--- a/cmake/deps.txt
+++ b/cmake/deps.txt
@@ -22,7 +22,9 @@ dlpack;https://github.com/dmlc/dlpack/archive/5c210da409e7f1e51ddf445134a4376fdb
# it contains changes on top of 3.4.0 which are required to fix build issues.
# Until the 3.4.1 release this is the best option we have.
# Issue link: https://gitlab.com/libeigen/eigen/-/issues/2744
-eigen;https://gitlab.com/libeigen/eigen/-/archive/1d8b82b0740839c0de7f1242a3585e3390ff5f33/eigen-1d8b82b0740839c0de7f1242a3585e3390ff5f33.zip;5ea4d05e62d7f954a46b3213f9b2535bdd866803
+# Moved to github mirror to avoid gitlab issues.
+# Issue link: https://github.com/bazelbuild/bazel-central-registry/issues/4355
+eigen;https://github.com/eigen-mirror/eigen/archive/1d8b82b0740839c0de7f1242a3585e3390ff5f33/eigen-1d8b82b0740839c0de7f1242a3585e3390ff5f33.zip;05b19b49e6fbb91246be711d801160528c135e34
flatbuffers;https://github.com/google/flatbuffers/archive/refs/tags/v23.5.26.zip;59422c3b5e573dd192fead2834d25951f1c1670c
fp16;https://github.com/Maratyszcza/FP16/archive/0a92994d729ff76a58f692d3028ca1b64b145d91.zip;b985f6985a05a1c03ff1bb71190f66d8f98a1494
EOF
# Make sure we use dependencies from onnxruntime-deps and avoid re-downloading
# them.
sed -i -e "s,;.*/,;$onnxruntime_depdir/,g" cmake/deps.txt
# Apply local patches
find $GECKO_PATH/taskcluster/scripts/misc/onnxruntime.patches -type f -name '*.patch' -print0 | sort -z | while read -d '' patch ; do patch -p1 < $patch ; done
###
# Configure and build
onnx_builddir=_build
mkdir $onnx_builddir
build_type=MinSizeRel
python3 tools/ci_build/build.py \
--update \
--parallel \
--enable_lto \
--disable_rtti \
--cmake_generator Ninja \
--build_dir $onnx_builddir \
--build --build_shared_lib \
--skip_submodule_sync --use_lock_free_queue --skip_tests --config $build_type --compile_no_warning_as_error \
--cmake_extra_defines onnxruntime_BUILD_UNIT_TESTS=OFF\
--cmake_extra_defines PYTHON_EXECUTABLE=$(which python3)\
--cmake_extra_defines ONNX_USE_LITE_PROTO=ON\
--disable_exceptions \
--cmake_extra_defines CMAKE_CXX_FLAGS=-fno-exceptions\ -DORT_NO_EXCEPTIONS\ -DONNX_NO_EXCEPTIONS\ -DMLAS_NO_EXCEPTION\
${extra_args}
###
# Pack the result and upload.
mkdir $onnx_folder
cp $onnx_builddir/$build_type/${prefix}onnxruntime.${extension} $onnx_folder/
ls -la "$onnx_folder"
find "$onnx_folder" -type f -exec llvm-strip -x {} \; || true
ls -la "$onnx_folder"
mkdir -p $UPLOAD_DIR
export ZSTD_CLEVEL=19
case ${target_platform} in
Windows)
tar -a -c -f "$UPLOAD_DIR/$artifact" --force-local "$onnx_folder"
;;
*)
tar acf "$UPLOAD_DIR/$artifact" "$onnx_folder"
;;
esac
ls -la "$UPLOAD_DIR/$artifact"
|