Skip to content

Commit e541bc1

Browse files
authored
feat: package for devices (#6)
* feat: add package for devices workflow * fix: use sysctl for mac * fix: append instead of rewrite * feat: build host as well * fix: add target option * fix: use host-build * fix: bin dir * fix: export * fix: build_compiler=off * export install dir * refactor: split host/embedded builds * fix: change condition * fix: use abspath for host bin dir * feat: enable other targets * fix: set iree host bin dir for all targets * fix: update xcode * fix: version * fix: host runtime build * fix: package name * Update .github/workflows/embedded_devices.yml
1 parent 6de5856 commit e541bc1

File tree

6 files changed

+182
-26
lines changed

6 files changed

+182
-26
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
name: embedded_devices
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
concurrency:
9+
group: ${{ github.workflow }}-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
jobs:
13+
build:
14+
runs-on: macos-14
15+
env:
16+
MIX_ENV: prod
17+
NX_IREE_PREFER_PRECOMPILED: false
18+
NX_IREE_SOURCE_DIR: ./build-cache/iree
19+
IREE_GIT_REV: candidate-20240604.914
20+
strategy:
21+
fail-fast: true
22+
matrix:
23+
build_target:
24+
- ios
25+
- ios_simulator
26+
- visionos
27+
- visionos_simulator
28+
- tvos
29+
- tvos_simulator
30+
steps:
31+
- name: checkout
32+
uses: actions/checkout@v4
33+
34+
- name: Install asdf and tools
35+
uses: asdf-vm/actions/install@v3
36+
37+
- name: Set up Xcode
38+
uses: maxim-lobanov/setup-xcode@v1
39+
with:
40+
xcode-version: "15.4"
41+
42+
- name: List XCode SDKs
43+
run: xcodebuild -showsdks
44+
45+
- name: Setup dependencies and env
46+
run: |
47+
brew install ninja
48+
mix local.hex --force
49+
mix local.rebar --force
50+
echo "NX_IREE_SOURCE_DIR=$(elixir -e 'IO.puts(Path.absname(~s(${{env.NX_IREE_SOURCE_DIR}})))')" > $GITHUB_ENV
51+
52+
- name: Cache mix dependencies
53+
id: cache-mix-deps
54+
uses: actions/cache@v4
55+
with:
56+
key: deps-${{ hashFiles('mix.lock') }}
57+
path: |
58+
./deps
59+
- name: Get mix deps
60+
if: steps.cache-mix-deps.outputs.cache-hit != 'true'
61+
run: mix deps.get
62+
- name: Cache IREE dir
63+
id: cache-iree-dir
64+
uses: actions/cache@v4
65+
with:
66+
key: iree-dir-${{ env.IREE_GIT_REV }}
67+
path: |
68+
${{ env.NX_IREE_SOURCE_DIR }}
69+
- name: Clone IREE
70+
if: steps.cache-iree-dir.outputs.cache-hit != 'true'
71+
run: make clone_iree
72+
- name: Compile Host
73+
run: BUILD_IREE_RUNTIME=true ./scripts/build_and_package.sh --target=host
74+
- name: Compile
75+
run: BUILD_IREE_RUNTIME=false ./scripts/build_and_package.sh --target=${{ matrix.build_target }}
76+
- name: Release Artifacts
77+
uses: softprops/action-gh-release@v2
78+
if: startsWith(github.ref, 'refs/tags/')
79+
with:
80+
files: |
81+
./iree-runtime/artifacts/*.tar.gz

.github/workflows/precompiled_nif.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
NX_IREE_PREFER_PRECOMPILED: false
1818
NX_IREE_SOURCE_DIR: ./build-cache/iree
1919
IREE_GIT_REV: candidate-20240604.914
20+
BUILD_IREE_RUNTIME: false
2021
strategy:
2122
fail-fast: false
2223
matrix:
@@ -112,7 +113,7 @@ jobs:
112113
- name: Setup cmake
113114
uses: jwlawson/actions-setup-cmake@v2
114115
with:
115-
cmake-version: '3.21.x'
116+
cmake-version: "3.21.x"
116117

117118
- name: checkout
118119
uses: actions/checkout@v4

Makefile

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ else
1818
all: install_runtime nx_iree
1919
endif
2020

21-
compile: install_runtime
22-
2321
.PHONY: clone_iree
2422
clone_iree: $(NX_IREE_SOURCE_DIR)
2523

@@ -40,55 +38,62 @@ BUILD_TARGET_FLAGS = -S cmake
4038
# flags for xcode 15.4
4139
ifeq ($(IREE_BUILD_TARGET), host)
4240
else ifeq ($(IREE_BUILD_TARGET), ios)
43-
BUILD_TARGET_FLAGS = \
41+
BUILD_TARGET_FLAGS += \
4442
-DCMAKE_SYSTEM_NAME=iOS\
4543
-DCMAKE_OSX_DEPLOYMENT_TARGET=17.5\
4644
-DCMAKE_OSX_ARCHITECTURES=arm64\
4745
-DCMAKE_SYSTEM_PROCESSOR=arm64\
4846
-DCMAKE_IOS_INSTALL_COMBINED=YES\
49-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk iphoneos Path)
47+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk iphoneos Path)\
48+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
5049
else ifeq ($(IREE_BUILD_TARGET), ios_simulator)
51-
BUILD_TARGET_FLAGS = \
50+
BUILD_TARGET_FLAGS += \
5251
-DCMAKE_SYSTEM_NAME=iOS\
5352
-DCMAKE_OSX_DEPLOYMENT_TARGET=17.5\
5453
-DCMAKE_OSX_ARCHITECTURES=arm64\
5554
-DCMAKE_SYSTEM_PROCESSOR=arm64\
5655
-DCMAKE_IOS_INSTALL_COMBINED=YES\
57-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk iphonesimulator Path)
56+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk iphonesimulator Path)\
57+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
5858
else ifeq ($(IREE_BUILD_TARGET), visionos)
59-
BUILD_TARGET_FLAGS = \
59+
BUILD_TARGET_FLAGS += \
6060
-DCMAKE_SYSTEM_NAME=visionOS\
6161
-DCMAKE_OSX_DEPLOYMENT_TARGET=1.2\
6262
-DCMAKE_OSX_ARCHITECTURES=arm64\
6363
-DCMAKE_SYSTEM_PROCESSOR=arm64\
64-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk xros Path)
64+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk xros Path)\
65+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
6566
else ifeq ($(IREE_BUILD_TARGET), visionos_simulator)
66-
BUILD_TARGET_FLAGS = \
67+
BUILD_TARGET_FLAGS += \
6768
-DCMAKE_SYSTEM_NAME=visionOS\
6869
-DCMAKE_OSX_DEPLOYMENT_TARGET=1.2\
6970
-DCMAKE_OSX_ARCHITECTURES=arm64\
7071
-DCMAKE_SYSTEM_PROCESSOR=arm64\
71-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk xrsimulator Path)
72+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk xrsimulator Path)\
73+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
7274
else ifeq ($(IREE_BUILD_TARGET), tvos)
73-
BUILD_TARGET_FLAGS = \
75+
BUILD_TARGET_FLAGS += \
7476
-DCMAKE_SYSTEM_NAME=tvOS\
7577
-DCMAKE_OSX_DEPLOYMENT_TARGET=17.5\
7678
-DCMAKE_OSX_ARCHITECTURES=arm64\
7779
-DCMAKE_SYSTEM_PROCESSOR=arm64\
78-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk appletvos Path)
80+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk appletvos Path)\
81+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
7982
else ifeq ($(IREE_BUILD_TARGET), tvos_simulator)
80-
BUILD_TARGET_FLAGS = \
83+
BUILD_TARGET_FLAGS += \
8184
-DCMAKE_SYSTEM_NAME=tvOS\
8285
-DCMAKE_OSX_DEPLOYMENT_TARGET=17.5\
8386
-DCMAKE_OSX_ARCHITECTURES=arm64\
8487
-DCMAKE_SYSTEM_PROCESSOR=arm64\
85-
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk appletvsimulator Path)
88+
-DCMAKE_OSX_SYSROOT=$(shell xcodebuild -version -sdk appletvsimulator Path)\
89+
-DIREE_HOST_BIN_DIR=$(abspath $(IREE_HOST_BIN_DIR))
8690
else
8791
$(error "Unknown IREE_BUILD_TARGET: $(IREE_BUILD_TARGET), must be one of host, ios, ios_simulator, visionos, visionos_simulator, tvos, tvos_simulator")
8892
endif
8993

9094
.PHONY: install_runtime
91-
install_runtime: $(IREE_INSTALL_DIR)
95+
install_runtime: iree_host $(IREE_INSTALL_DIR)
96+
9297

9398
CMAKE_SOURCES = cmake/src/runtime.cc cmake/src/runtime.h
9499

@@ -103,6 +108,20 @@ $(IREE_INSTALL_DIR): $(NX_IREE_SOURCE_DIR) $(CMAKE_SOURCES)
103108
cmake --build $(IREE_CMAKE_BUILD_DIR) --config $(IREE_CMAKE_CONFIG)
104109
cmake --install $(IREE_CMAKE_BUILD_DIR) --config $(IREE_CMAKE_CONFIG) --prefix $(IREE_INSTALL_DIR)
105110

111+
.PHONY: iree_host
112+
ifeq ($(BUILD_IREE_RUNTIME), true)
113+
iree_host:
114+
@echo "Building IREE runtime host binaries at $(IREE_HOST_BUILD_DIR)."
115+
cmake -G Ninja -B $(IREE_HOST_BUILD_DIR) \
116+
-DCMAKE_INSTALL_PREFIX=$(IREE_HOST_INSTALL_DIR) \
117+
-DIREE_BUILD_COMPILER=OFF\
118+
-DCMAKE_BUILD_TYPE=$(IREE_CMAKE_CONFIG) \
119+
-S $(NX_IREE_SOURCE_DIR)
120+
cmake --build $(IREE_HOST_BUILD_DIR) --target install
121+
else
122+
iree_host:
123+
@echo "Not building IREE runtime host binaries. Skipping."
124+
endif
106125

107126
### NxIREE Runtime NIF library
108127

scripts/build_and_package.sh

Lines changed: 63 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,76 @@
22

33
set -e
44

5-
IREE_BUILD_TARGET=$1
5+
get_nproc() {
6+
if [ "$(uname -s)" = "Darwin" ]; then
7+
sysctl -n hw.ncpu
8+
else
9+
nproc
10+
fi
11+
}
612

7-
NUM_JOBS=-j$(($(nproc) - 2 ))
13+
# Parse options
14+
while [[ $# -gt 0 ]]; do
15+
case $1 in
16+
--target=*)
17+
IREE_BUILD_TARGET="${1#*=}"
18+
shift # Shift past the argument
19+
;;
20+
*)
21+
echo "Unknown option: $1"
22+
exit 1
23+
;;
24+
esac
25+
done
26+
27+
NUM_JOBS=-j$(get_nproc)
828

929
mkdir -p iree-runtime/artifacts
1030

11-
IREE_CMAKE_BUILD_DIR=iree-runtime/${IREE_BUILD_TARGET}/iree-build
12-
IREE_RUNTIME_BUILD_DIR=iree-runtime/${IREE_BUILD_TARGET}/build
13-
IREE_INSTALL_DIR=iree-runtime/${IREE_BUILD_TARGET}/install
1431
HOST_ARCH=$(uname -s)-$(uname -m)
1532

16-
echo "Building for target: ${IREE_BUILD_TARGET}"
17-
make ${NUM_JOBS} compile IREE_GIT_REV=$(mix iree.version) IREE_INSTALL_DIR=${IREE_INSTALL_DIR} IREE_CMAKE_BUILD_DIR=${IREE_CMAKE_BUILD_DIR} IREE_RUNTIME_BUILD_DIR=${IREE_RUNTIME_BUILD_DIR} IREE_BUILD_TARGET=${IREE_BUILD_TARGET}
33+
install_dir() {
34+
echo "iree-runtime/$1/install"
35+
}
36+
build() {
37+
echo "Building for target: $1"
38+
local IREE_CMAKE_BUILD_DIR=iree-runtime/$1/iree-build
39+
local IREE_RUNTIME_BUILD_DIR=iree-runtime/$1/build
40+
local IREE_INSTALL_DIR=$(install_dir $1)
41+
42+
export IREE_HOST_BUILD_DIR=iree-runtime/host-build
43+
export IREE_HOST_INSTALL_DIR=${IREE_HOST_BUILD_DIR}/install
44+
export IREE_HOST_BIN_DIR=${IREE_HOST_BUILD_DIR}/install/bin
45+
46+
echo "IREE_CMAKE_BUILD_DIR: $IREE_CMAKE_BUILD_DIR"
47+
echo "IREE_RUNTIME_BUILD_DIR: $IREE_RUNTIME_BUILD_DIR"
48+
echo "IREE_INSTALL_DIR: $IREE_INSTALL_DIR"
49+
echo "IREE_HOST_BIN_DIR: $IREE_HOST_BIN_DIR"
50+
echo "IREE_HOST_INSTALL_DIR: $IREE_HOST_INSTALL_DIR"
51+
echo "IREE_HOST_BUILD_DIR: $IREE_HOST_BUILD_DIR"
52+
53+
if [[ $1 -eq "host" ]]; then
54+
make ${NUM_JOBS} install_runtime \
55+
IREE_GIT_REV=$(mix iree.version) \
56+
IREE_INSTALL_DIR=${IREE_INSTALL_DIR} \
57+
IREE_CMAKE_BUILD_DIR=${IREE_CMAKE_BUILD_DIR} \
58+
IREE_RUNTIME_BUILD_DIR=${IREE_RUNTIME_BUILD_DIR} \
59+
IREE_BUILD_TARGET=$1
60+
else
61+
make ${NUM_JOBS} install_runtime \
62+
IREE_GIT_REV=$(mix iree.version) \
63+
IREE_INSTALL_DIR=${IREE_INSTALL_DIR} \
64+
IREE_HOST_BIN_DIR=${IREE_HOST_BIN_DIR} \
65+
IREE_CMAKE_BUILD_DIR=${IREE_CMAKE_BUILD_DIR} \
66+
IREE_RUNTIME_BUILD_DIR=${IREE_RUNTIME_BUILD_DIR} \
67+
IREE_BUILD_TARGET=$1
68+
fi
69+
}
70+
71+
build $IREE_BUILD_TARGET
72+
IREE_INSTALL_DIR=$(install_dir $IREE_BUILD_TARGET)
1873

19-
TAR_NAME=iree-runtime/artifacts/nx_iree-${HOST_ARCH}-${IREE_BUILD_TARGET}.tar.gz
74+
TAR_NAME=iree-runtime/artifacts/nx_iree-embedded-macos-${IREE_BUILD_TARGET}.tar.gz
2075

2176
echo "Packaging into ${TAR_NAME}"
2277
tar -czf ${TAR_NAME} -C ${IREE_INSTALL_DIR} .

scripts/build_linux.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ do
55

66
SCRIPT_DIR=$(dirname "$0")
77

8-
${SCRIPT_DIR}/build_and_package.sh ${IREE_BUILD_TARGET}
8+
${SCRIPT_DIR}/build_and_package.sh --target=${IREE_BUILD_TARGET}
99

1010
done

scripts/build_mac_arm.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ do
55

66
SCRIPT_DIR=$(dirname "$0")
77

8-
${SCRIPT_DIR}/build_and_package.sh ${IREE_BUILD_TARGET}
8+
${SCRIPT_DIR}/build_and_package.sh --target=${IREE_BUILD_TARGET}
99

1010
done

0 commit comments

Comments
 (0)