Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add building for ARM linux #464

Merged
merged 1 commit into from
Mar 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 49 additions & 1 deletion .github/workflows/package_for_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,54 @@ jobs:
name: video_compositor_with_web_renderer_linux_x86_64.tar.gz
path: video_compositor_with_web_renderer_linux_x86_64.tar.gz

linux-aarch64:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
path: "repo"
- uses: uraimo/run-on-arch-action@v2
name: Build artifact
id: build
with:
arch: aarch64
distro: ubuntu_latest

# Not required, but speeds up builds
githubToken: ${{ github.token }}

# Create an artifacts directory
setup: |
mkdir -p "${PWD}/artifacts"

# Mount the artifacts directory as /artifacts in the container
dockerRunArgs: |
--volume "${PWD}/artifacts:/artifacts"
--volume "${PWD}/repo:/repo"

# The shell to run commands with in the container
shell: /bin/sh

install: |
apt update -y -qq
apt install software-properties-common -y
add-apt-repository ppa:ubuntuhandbook1/ffmpeg6
apt-get update -y -qq
apt-get install -y libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev ffmpeg libavcodec-dev libavformat-dev libavfilter-dev libavdevice-dev libopus-dev curl git build-essential libssl-dev pkg-config libclang-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
rm -rf /var/lib/apt/lists/*

# Produce a binary artifact and place it in the mounted volume
run: |
. "$HOME/.cargo/env"
cd "/repo"
cargo run --bin package_for_release
cp *.tar.gz /artifacts
- uses: actions/upload-artifact@v3
with:
name: video_compositor_linux_aarch64.tar.gz
path: artifacts/video_compositor_linux_aarch64.tar.gz

macos_x86_64:
runs-on: macos-latest
steps:
Expand All @@ -49,7 +97,7 @@ jobs:
with:
name: video_compositor_darwin_x86_64.tar.gz
path: video_compositor_darwin_x86_64.tar.gz

- uses: actions/upload-artifact@v3
with:
name: video_compositor_with_web_renderer_darwin_x86_64.tar.gz
Expand Down
2 changes: 2 additions & 0 deletions scripts/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ mkdir -p "$ROOT_DIR/release_tmp"
cd "$ROOT_DIR/release_tmp"

gh run download "$WORKFLOW_RUN_ID" -n video_compositor_linux_x86_64.tar.gz
gh run download "$WORKFLOW_RUN_ID" -n video_compositor_linux_aarch64.tar.gz
gh run download "$WORKFLOW_RUN_ID" -n video_compositor_darwin_x86_64.tar.gz
gh run download "$WORKFLOW_RUN_ID" -n video_compositor_darwin_aarch64.tar.gz
gh run download "$WORKFLOW_RUN_ID" -n video_compositor_with_web_renderer_linux_x86_64.tar.gz
Expand All @@ -31,6 +32,7 @@ gh run download "$WORKFLOW_RUN_ID" -n video_compositor_with_web_renderer_darwin_

gh release create "$RELEASE_TAG"
gh release upload "$RELEASE_TAG" video_compositor_linux_x86_64.tar.gz
gh release upload "$RELEASE_TAG" video_compositor_linux_aarch64.tar.gz
gh release upload "$RELEASE_TAG" video_compositor_darwin_x86_64.tar.gz
gh release upload "$RELEASE_TAG" video_compositor_darwin_aarch64.tar.gz
gh release upload "$RELEASE_TAG" video_compositor_with_web_renderer_linux_x86_64.tar.gz
Expand Down
45 changes: 24 additions & 21 deletions src/bin/package_for_release/bundle_linux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,44 @@ const X86_OUTPUT_FILE: &str = "video_compositor_linux_x86_64.tar.gz";
const X86_WITH_WEB_RENDERER_OUTPUT_FILE: &str =
"video_compositor_with_web_renderer_linux_x86_64.tar.gz";

const ARM_TARGET: &str = "aarch64-unknown-linux-gnu";
const ARM_OUTPUT_FILE: &str = "video_compositor_linux_aarch64.tar.gz";

pub fn bundle_linux_app() -> Result<()> {
tracing_subscriber::fmt().init();

info!("Bundling compositor without web rendering");
bundle_app(false)?;

info!("Bundling compositor with web rendering");
bundle_app(true)?;

if cfg!(target_arch = "x86_64") {
bundle_app(X86_TARGET, X86_OUTPUT_FILE, false)?;
bundle_app(X86_TARGET, X86_WITH_WEB_RENDERER_OUTPUT_FILE, true)?;
} else if cfg!(target_arch = "aarch64") {
bundle_app(ARM_TARGET, ARM_OUTPUT_FILE, false)?;
}
Ok(())
}

fn bundle_app(enable_web_rendering: bool) -> Result<()> {
fn bundle_app(
target_name: &'static str,
output_name: &str,
enable_web_rendering: bool,
) -> Result<()> {
if enable_web_rendering {
info!("Bundling compositor with web rendering");
} else {
info!("Bundling compositor without web rendering");
}

let root_dir_str = env!("CARGO_MANIFEST_DIR");
let root_dir: PathBuf = root_dir_str.into();
let release_dir = root_dir.join("target/x86_64-unknown-linux-gnu/release");
let release_dir = root_dir.join(format!("target/{target_name}/release"));
let tmp_dir = root_dir.join("video_compositor");
utils::setup_bundle_dir(&tmp_dir)?;

info!("Build main_process binary.");
utils::cargo_build("main_process", X86_TARGET, !enable_web_rendering)?;
utils::cargo_build("main_process", target_name, !enable_web_rendering)?;

if enable_web_rendering {
info!("Build process_helper binary.");
utils::cargo_build("process_helper", X86_TARGET, false)?;
utils::cargo_build("process_helper", target_name, false)?;

info!("Create {} directory", tmp_dir.display());
fs::create_dir_all(tmp_dir.clone())?;
Expand Down Expand Up @@ -75,18 +88,8 @@ fn bundle_app(enable_web_rendering: bool) -> Result<()> {
}

info!("Create tar.gz archive.");
let archive_name = match enable_web_rendering {
true => X86_WITH_WEB_RENDERER_OUTPUT_FILE,
false => X86_OUTPUT_FILE,
};
let exit_code = Command::new("tar")
.args([
"-C",
root_dir_str,
"-czvf",
archive_name,
"video_compositor",
])
.args(["-C", root_dir_str, "-czvf", output_name, "video_compositor"])
.spawn()?
.wait()?
.code();
Expand Down
Loading