fix build path #76
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: linux-precompile | |
on: | |
push: | |
tags: | |
- 'v*' | |
- 'precompile-test' | |
- 'precompile-test-linux' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
precompile: | |
runs-on: ubuntu-20.04 | |
env: | |
TFLITE_BEAM_PREFER_PRECOMPILED: "false" | |
name: ${{ matrix.pair.target_arch }}-${{ matrix.pair.target_os }}-${{ matrix.pair.target_abi }} - OTP ${{ matrix.pair.otp }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# remember to change the `get_precompiled_nif_version/0` function in the `tflite_beam_precompiled` file | |
# if upgrade the Erlang/OTP version to 26.x or later | |
# 2.16 for OTP 24.x and 25.x | |
# 2.17 for OTP 26.x | |
- pair: | |
otp: "25.x" | |
arch_name: x86_64 | |
cmake_toolchain_file: "" | |
c_compiler: gcc | |
cpp_compiler: g++ | |
libedgetpu_library: "x86_64" | |
target_arch: "x86_64" | |
target_os: "linux" | |
target_abi: "gnu" | |
- pair: | |
otp: "25.x" | |
arch_name: aarch64 | |
cmake_toolchain_file: cc_toolchain/aarch64-linux-gnu.cmake | |
c_compiler: gcc-aarch64-linux-gnu | |
cpp_compiler: g++-aarch64-linux-gnu | |
libedgetpu_library: "aarch64" | |
target_arch: "aarch64" | |
target_os: "linux" | |
target_abi: "gnu" | |
cc: "/usr/bin/aarch64-linux-gnu-gcc" | |
cxx: "/usr/bin/aarch64-linux-gnu-g++" | |
- pair: | |
otp: "25.x" | |
arch_name: armv7l | |
cmake_toolchain_file: cc_toolchain/armv7l-linux-gnueabihf.cmake | |
c_compiler: gcc-arm-linux-gnueabihf | |
cpp_compiler: g++-arm-linux-gnueabihf | |
libedgetpu_library: "armv7l" | |
target_arch: "armv7l" | |
target_os: "linux" | |
target_abi: "gnueabihf" | |
cc: "/usr/bin/arm-linux-gnueabihf-gcc" | |
cxx: "/usr/bin/arm-linux-gnueabihf-g++" | |
- pair: | |
otp: "25.x" | |
arch_name: armv6 | |
cmake_toolchain_file: cc_toolchain/armv6-nerves-linux-gnueabihf.cmake | |
c_compiler: armv6-nerves-linux-gnueabihf-gcc | |
cpp_compiler: armv6-nerves-linux-gnueabihf-g++ | |
libedgetpu_library: "armv6" | |
target_arch: "armv6" | |
target_os: "linux" | |
target_abi: "gnueabihf" | |
cc: "/usr/local/bin/nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0/bin/armv6-nerves-linux-gnueabihf-gcc" | |
cxx: "/usr/local/bin/nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0/bin/armv6-nerves-linux-gnueabihf-g++" | |
- pair: | |
otp: "25.x" | |
arch_name: riscv64 | |
cmake_toolchain_file: cc_toolchain/riscv64-nerves-linux-gnu.cmake | |
c_compiler: riscv64-nerves-linux-gnu-gcc | |
cpp_compiler: riscv64-nerves-linux-gnu-g++ | |
libedgetpu_library: "riscv64" | |
target_arch: "riscv64" | |
target_os: "linux" | |
target_abi: "gnu" | |
cc: "/usr/local/bin/nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0/bin/riscv64-nerves-linux-gnu-gcc" | |
cxx: "/usr/local/bin/nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0/bin/riscv64-nerves-linux-gnu-g++" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- uses: erlef/setup-beam@v1 | |
with: | |
otp-version: ${{ matrix.pair.otp }} | |
- name: Install system dependecies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential automake autoconf pkg-config bc m4 unzip zip curl git libssl-dev gzip libncurses5-dev ca-certificates | |
if [ "${{ matrix.pair.arch_name }}" = "aarch64" ]; then | |
sudo sed -i 's/focal/jammy/g' /etc/apt/sources.list | |
sudo apt-get update | |
fi | |
if [ "${{ matrix.pair.arch_name }}" = "armv6" ]; then | |
curl -fSL https://github.com/nerves-project/toolchains/releases/download/v13.2.0/nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0-363664F.tar.xz -o nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0-363664F.tar.xz | |
tar -xf nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0-363664F.tar.xz | |
sudo mv nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0 /usr/local/bin/nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0 | |
elif [ "${{ matrix.pair.arch_name }}" = "riscv64" ]; then | |
curl -fSL https://github.com/nerves-project/toolchains/releases/download/v13.2.0/nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0-DB80D1B.tar.xz -o nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0-DB80D1B.tar.xz | |
tar -xf nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0-DB80D1B.tar.xz | |
sudo mv nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0 /usr/local/bin/nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0 | |
else | |
sudo apt-get install -y ${{ matrix.pair.c_compiler }} ${{ matrix.pair.cpp_compiler }} | |
fi | |
- name: Create precompiled library | |
run: | | |
export NIF_VERSION="$(erl -noshell -eval "io:format('~ts', [erlang:system_info(nif_version)])." -s erlang halt)" | |
if [ "${{ matrix.pair.cmake_toolchain_file }}" != "" ]; then | |
export CMAKE_TOOLCHAIN_FILE="$(pwd)/${{ matrix.pair.cmake_toolchain_file }}" | |
export CC="${{ matrix.pair.cc }}" | |
export CXX="${{ matrix.pair.cxx }}" | |
export TARGET_ARCH="${{ matrix.pair.target_arch }}" | |
export TARGET_OS="${{ matrix.pair.target_os }}" | |
export TARGET_ABI="${{ matrix.pair.target_abi }}" | |
export TFLITE_BEAM_CORAL_LIBEDGETPU_LIBRARIES="${{ matrix.pair.libedgetpu_library }}" | |
fi | |
if [ "${{ matrix.pair.arch_name }}" = "armv6" ]; then | |
export TARGET_GCC_FLAGS="-mabi=aapcs-linux -mfpu=vfp -marm -fstack-protector-strong -mfloat-abi=hard -mcpu=arm1176jzf-s -fPIE -pie -Wl,-z,now -Wl,-z,relro" | |
export PATH="/usr/local/bin/nerves_toolchain_armv6_nerves_linux_gnueabihf-linux_x86_64-13.2.0/bin/:${PATH}" | |
elif [ "${{ matrix.pair.arch_name }}" = "riscv64" ]; then | |
export PATH="/usr/local/bin/nerves_toolchain_riscv64_nerves_linux_gnu-linux_x86_64-13.2.0/bin/:${PATH}" | |
fi | |
echo "CMAKE_TOOLCHAIN_FILE: ${CMAKE_TOOLCHAIN_FILE}" | |
echo "TFLITE_BEAM_CORAL_LIBEDGETPU_LIBRARIES: ${TFLITE_BEAM_CORAL_LIBEDGETPU_LIBRARIES}" | |
echo "TFLITE_BEAM_PREFER_PRECOMPILED: ${TFLITE_BEAM_PREFER_PRECOMPILED}" | |
echo "CC: ${CC}" | |
echo "CXX: ${CXX}" | |
echo "TARGET_ARCH: ${TARGET_ARCH}" | |
echo "TARGET_OS: ${TARGET_OS}" | |
echo "TARGET_ABI: ${TARGET_ABI}" | |
echo "TARGET_GCC_FLAGS: ${TARGET_GCC_FLAGS}" | |
rebar3 deps | |
rebar3 compile | |
export PKG_NAME=tflite_beam-nif-${NIF_VERSION}-${{ matrix.pair.arch_name }}-${{ matrix.pair.target_os }}-${{ matrix.pair.target_abi }}-${GITHUB_REF##*/} | |
mkdir -p "${PKG_NAME}" | |
cp -a ./priv "${PKG_NAME}" | |
tar -czf "${PKG_NAME}.tar.gz" "${PKG_NAME}" | |
rm -rf "${PKG_NAME}" | |
ls -lah "${PKG_NAME}.tar.gz" | |
mkdir -p artifacts | |
mv "${PKG_NAME}.tar.gz" artifacts | |
- uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
files: artifacts/tflite_beam-*.tar.gz |