Cross Compilation #300
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: Cross Compilation | |
on: | |
workflow_dispatch: | |
pull_request: | |
branches: | |
- develop | |
push: | |
branches: | |
- develop | |
jobs: | |
pkvisor: | |
name: pktvisor | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- arch: x86_64 | |
conan_arch: x86_64 | |
toolchain: http://musl.cc/x86_64-linux-musl-cross.tgz | |
cc: x86_64-linux-musl-gcc | |
cxx: x86_64-linux-musl-g++ | |
ldflags: "-static" | |
# - arch: armv7lh # ARMv7 little-endian hard-float | |
# conan_arch: armv7hf | |
# toolchain: http://musl.cc/armv7l-linux-musleabihf-cross.tgz | |
# cc: armv7l-linux-musleabihf-gcc | |
# cxx: armv7l-linux-musleabihf-g++ | |
- arch: aarch64 | |
conan_arch: armv8 | |
toolchain: http://musl.cc/aarch64-linux-musl-cross.tgz | |
cc: aarch64-linux-musl-gcc | |
cxx: aarch64-linux-musl-g++ | |
env: | |
CC: gcc-10 | |
CXX: g++-10 | |
CONAN_USER_HOME: "${{github.workspace}}" | |
steps: | |
- name: Install sccache from cache | |
id: cache-sccache | |
uses: actions/cache@v4 | |
with: | |
path: bin/sccache | |
key: sccache-v0.2.15 | |
- name: Install sccache | |
if: steps.cache-sccache.outputs.cache-hit != 'true' | |
run: | | |
mkdir -p bin | |
curl -L https://github.com/mozilla/sccache/releases/download/v0.2.15/sccache-v0.2.15-x86_64-unknown-linux-musl.tar.gz | \ | |
tar -C bin -xz --strip-components=1 sccache-v0.2.15-x86_64-unknown-linux-musl/sccache | |
chmod +x bin/sccache | |
- name: Install compiler toolchain from cache | |
id: cache-toolchain | |
uses: actions/cache@v4 | |
with: | |
path: toolchain | |
key: toolchain-test-${{matrix.toolchain}} | |
- name: Install compiler toolchain | |
if: steps.cache-toolchain.outputs.cache-hit != 'true' | |
run: | | |
mkdir -p toolchain | |
curl -L "${{matrix.toolchain}}" | tar -C toolchain -xz --strip-components=1 | |
- name: Install Conan | |
run: pip install --no-cache-dir 'conan==1.64.1' --force-reinstall | |
- name: Create Conan configuration | |
run: | | |
# init config | |
CONAN_V2_MODE=1 conan config init | |
conan config set general.revisions_enabled=1 | |
# add custom compiler settings for libc | |
python3 -c 'import yaml; p = "${{env.CONAN_USER_HOME}}/.conan/settings.yml"; d = yaml.safe_load(open(p)); d["compiler"]["gcc"]["libc"] = ["None", "glibc", "musl"]; yaml.safe_dump(d, open(p, "w"))' | |
- name: Create Conan host profile | |
run: | | |
cat > "${{env.CONAN_USER_HOME}}/.conan/profiles/host" << "EOF" | |
[settings] | |
os=Linux | |
os_build=Linux | |
arch=${{matrix.conan_arch}} | |
arch_build=x86_64 | |
compiler=gcc | |
compiler.version=11 | |
compiler.libcxx=libstdc++11 | |
compiler.libc=musl | |
build_type=Release | |
[build_requires] | |
[env] | |
CC=${{github.workspace}}/toolchain/bin/${{matrix.cc}} | |
CXX=${{github.workspace}}/toolchain/bin/${{matrix.cxx}} | |
LDFLAGS=${{matrix.ldflags}} | |
EOF | |
- name: Restore sccache | |
uses: actions/cache@v4 | |
with: | |
path: ~/.cache/sccache | |
key: sccache-${{matrix.arch}}-${{github.head_ref||github.event.ref}}-${{github.run_id}} | |
restore-keys: | | |
sccache-${{matrix.arch}}-${{github.head_ref||github.event.ref}}- | |
sccache-${{matrix.arch}}-${{github.base_ref||github.event.repository.default_branch}}- | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
path: src | |
- name: Remove crashpad from conanfile | |
run: sed -i "/crashpad/d" ${{github.workspace}}/src/conanfile.py | |
- name: Install dependencies | |
run: | | |
mkdir build | |
cd build | |
conan install -pr:b default -pr:h host -g virtualenv --build=missing "${{github.workspace}}/src" | |
- name: Configure | |
run: | | |
cd build | |
source environment.sh.env | |
export CC CXX | |
export LDFLAGS=-static | |
cmake "${{github.workspace}}/src" \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DCRASHPAD_NOT_SUPPORTED=true \ | |
-DCMAKE_C_COMPILER_LAUNCHER="${{github.workspace}}/bin/sccache" -DCMAKE_CXX_COMPILER_LAUNCHER="${{github.workspace}}/bin/sccache" \ | |
-DPKTVISOR_CONAN_INIT=OFF -DPKTVISOR_CONAN_BUILD="never" -DPKTVISOR_CONAN_BUILD_PROFILE="default" -DPKTVISOR_CONAN_HOST_PROFILE="host" \ | |
-DCORRADE_RC_PROGRAM=$(command -v corrade-rc) \ | |
-DCMAKE_CXX_STANDARD_LIBRARIES=-latomic | |
- name: Build | |
run: | | |
cd build | |
make -j4 VERBOSE=1 | |
- name: Print sccache stats | |
run: | | |
"${{github.workspace}}/bin/sccache" -s | |
- name: Upload pktvisord | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pktvisord-linux-${{matrix.arch}}-static | |
path: build/bin/pktvisord | |
retention-days: 7 | |
- name: Upload pktvisor-reader | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pktvisor-reader-linux-${{matrix.arch}}-static | |
path: build/bin/pktvisor-reader | |
retention-days: 7 | |
pkvisor-cli: | |
name: pktvisor-cli | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
os: [ linux, macos ] | |
arch: [ x86_64, armv7lh, aarch64 ] | |
exclude: | |
- os: macos | |
arch: armv7lh | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Configure CMake to generate VERSION | |
shell: bash | |
run: VERSION_ONLY=1 cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=Release | |
- name: Rename folder and copy version | |
shell: bash | |
run: | | |
mv src pktvisor-src | |
cp -rpf golang/pkg/client/version.go . | |
- name: Build pktvisor-cli macos | |
if: ${{matrix.os}} == macos | |
uses: ./.github/actions/build-go | |
with: | |
context: "." | |
file: "./Dockerfile" | |
goos: "darwin" | |
- name: Build pktvisor-cli linux armv7lh | |
if: ${{matrix.arch}} == armv7lh | |
uses: ./.github/actions/build-go | |
with: | |
context: "." | |
file: "./Dockerfile" | |
goos: "linux" | |
goarch: "arm" | |
- name: Build pktvisor-cli linux aarch64 | |
if: ${{matrix.arch}} == aarch64 | |
uses: ./.github/actions/build-go | |
with: | |
context: "." | |
file: "./Dockerfile" | |
goos: "linux" | |
goarch: "arm64" | |
- name: Upload pktvisor-cli | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pktvisor-cli-${{matrix.os}}-${{matrix.arch}} | |
path: pktvisor-cli | |
retention-days: 7 |