Skip to content

Commit 127ca96

Browse files
refactor: move build logic from CI to Makefile, output to build/
- Added install-ndk target (replaces 3x duplicated NDK install script) - Added ndkcli-release target (replaces inline CI build commands) - All build outputs go to build/ directory - CI now uses only Makefile targets: make install-ndk, make test, make check-no-capi, make lint, make check-examples, make ndkcli-release - Centralized API_LEVEL, NDK_CC_ARM64, NDK_CC_X86_64 variables - Same commands work locally and in CI
1 parent c1723c6 commit 127ca96

3 files changed

Lines changed: 48 additions & 55 deletions

File tree

.github/workflows/ci.yml

Lines changed: 10 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ on:
1111
permissions:
1212
contents: write
1313

14-
env:
15-
ANDROID_NDK_VERSION: r28
16-
ANDROID_NDK_DIR_NAME: "28.0.13004108"
17-
1814
jobs:
1915
test:
2016
name: Unit Tests & Lint
@@ -33,10 +29,7 @@ jobs:
3329
run: make check-no-capi
3430

3531
- name: Lint
36-
uses: golangci/golangci-lint-action@v9
37-
with:
38-
version: latest
39-
args: --timeout=5m ./tools/...
32+
run: make lint
4033

4134
check-examples:
4235
name: Cross-compile Examples
@@ -49,15 +42,9 @@ jobs:
4942
go-version: "1.24"
5043

5144
- name: Install Android NDK
52-
run: |
53-
wget -q "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" -O /tmp/ndk.zip
54-
unzip -q /tmp/ndk.zip -d /tmp/ndk-extract/
55-
ls /tmp/ndk-extract/
56-
mkdir -p "$ANDROID_HOME/ndk"
57-
mv /tmp/ndk-extract/android-ndk-* "$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}"
58-
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}" >> "$GITHUB_ENV"
59-
60-
- name: Cross-compile examples for Android arm64
45+
run: make install-ndk
46+
47+
- name: Cross-compile examples and ndkcli
6148
run: make check-examples
6249

6350
e2e-examples:
@@ -78,12 +65,7 @@ jobs:
7865
sudo udevadm trigger --name-match=kvm
7966
8067
- name: Install Android NDK
81-
run: |
82-
wget -q "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" -O /tmp/ndk.zip
83-
unzip -q /tmp/ndk.zip -d /tmp/ndk-extract/
84-
mkdir -p "$ANDROID_HOME/ndk"
85-
mv /tmp/ndk-extract/android-ndk-* "$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}"
86-
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}" >> "$GITHUB_ENV"
68+
run: make install-ndk
8769

8870
- name: Run examples on emulator
8971
uses: reactivecircus/android-emulator-runner@v2
@@ -106,27 +88,10 @@ jobs:
10688
go-version: "1.24"
10789

10890
- name: Install Android NDK
109-
run: |
110-
wget -q "https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip" -O /tmp/ndk.zip
111-
unzip -q /tmp/ndk.zip -d /tmp/ndk-extract/
112-
mkdir -p "$ANDROID_HOME/ndk"
113-
mv /tmp/ndk-extract/android-ndk-* "$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}"
114-
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}" >> "$GITHUB_ENV"
115-
echo "NDK_CC_PREFIX=$ANDROID_HOME/ndk/${ANDROID_NDK_DIR_NAME}/toolchains/llvm/prebuilt/linux-x86_64/bin" >> "$GITHUB_ENV"
116-
117-
- name: Build ndkcli for arm64
118-
run: |
119-
CGO_ENABLED=1 GOOS=android GOARCH=arm64 \
120-
CC="${NDK_CC_PREFIX}/aarch64-linux-android35-clang" \
121-
go build -trimpath -ldflags="-s -w" \
122-
-o ndkcli-android-arm64 ./cmd/ndkcli/
91+
run: make install-ndk
12392

124-
- name: Build ndkcli for x86_64
125-
run: |
126-
CGO_ENABLED=1 GOOS=android GOARCH=amd64 \
127-
CC="${NDK_CC_PREFIX}/x86_64-linux-android35-clang" \
128-
go build -trimpath -ldflags="-s -w" \
129-
-o ndkcli-android-x86_64 ./cmd/ndkcli/
93+
- name: Build release binaries
94+
run: make ndkcli-release
13095

13196
- name: Create release
13297
env:
@@ -136,5 +101,5 @@ jobs:
136101
gh release create "$TAG_NAME" \
137102
--title "ndkcli $TAG_NAME" \
138103
--generate-notes \
139-
ndkcli-android-arm64 \
140-
ndkcli-android-x86_64
104+
build/ndkcli-android-arm64 \
105+
build/ndkcli-android-x86_64

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ capi/manifests/.gen_*.yaml
2828

2929
cligen
3030
ndkcli
31+
build/

Makefile

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,14 @@ FIXTURE_MODULES := $(notdir $(wildcard tools/pkg/specgen/testdata/*/))
1717
NDK_SYSROOT := $(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include
1818
C2FFI_BIN ?= c2ffi
1919

20-
.PHONY: all capi specs idiomatic clean regen fixtures test lint check-examples e2e e2e-build e2e-examples e2e-examples-test e2e-audio ndkcli ndkcli-commands
20+
API_LEVEL ?= 35
21+
NDK_CC_ARM64 := $(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android$(API_LEVEL)-clang
22+
NDK_CC_X86_64 := $(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android$(API_LEVEL)-clang
23+
BUILD_DIR := build
24+
25+
.PHONY: all capi specs idiomatic clean regen fixtures test lint check-examples check-no-capi \
26+
e2e e2e-build e2e-examples e2e-examples-test e2e-audio \
27+
ndkcli ndkcli-commands ndkcli-release install-ndk
2128

2229
all: specs capi idiomatic
2330

@@ -102,15 +109,14 @@ lint:
102109

103110
# Cross-compile all examples and ndkcli for Android arm64 to catch compile errors (requires NDK)
104111
check-examples:
105-
CGO_ENABLED=1 GOOS=android GOARCH=arm64 \
106-
CC=$(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android35-clang \
112+
CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=$(NDK_CC_ARM64) \
107113
go build ./examples/... ./cmd/ndkcli/
108114

109115
# Cross-compile E2E test binary for Android x86_64 (requires NDK)
110116
e2e-build:
111-
CGO_ENABLED=1 GOOS=android GOARCH=amd64 \
112-
CC=$(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android35-clang \
113-
go build -o tests/e2e/e2e_test ./tests/e2e
117+
@mkdir -p $(BUILD_DIR)
118+
CGO_ENABLED=1 GOOS=android GOARCH=amd64 CC=$(NDK_CC_X86_64) \
119+
go build -o $(BUILD_DIR)/e2e_test ./tests/e2e
114120

115121
# Run full E2E test on Android emulator (requires SDK + NDK + KVM)
116122
e2e: e2e-build
@@ -128,11 +134,32 @@ e2e-examples-test:
128134
e2e-audio:
129135
./tests/e2e/run-audio-e2e.sh
130136

131-
# Build ndkcli for Android (requires NDK)
137+
# Install Android NDK (for CI; no-op if already present)
138+
ANDROID_NDK_VERSION ?= r28
139+
ANDROID_NDK_DIR_NAME ?= 28.0.13004108
140+
install-ndk:
141+
@if [ -d "$(NDK_PATH)" ]; then echo "NDK already at $(NDK_PATH)"; exit 0; fi; \
142+
echo "Installing Android NDK $(ANDROID_NDK_VERSION)..."; \
143+
wget -q "https://dl.google.com/android/repository/android-ndk-$(ANDROID_NDK_VERSION)-linux.zip" -O /tmp/ndk.zip; \
144+
unzip -q /tmp/ndk.zip -d /tmp/ndk-extract/; \
145+
mkdir -p "$(ANDROID_HOME)/ndk"; \
146+
mv /tmp/ndk-extract/android-ndk-* "$(ANDROID_HOME)/ndk/$(ANDROID_NDK_DIR_NAME)"; \
147+
rm -f /tmp/ndk.zip; \
148+
echo "NDK installed to $(ANDROID_HOME)/ndk/$(ANDROID_NDK_DIR_NAME)"
149+
150+
# Build ndkcli for Android arm64 (requires NDK)
132151
ndkcli:
133-
CGO_ENABLED=1 GOOS=android GOARCH=arm64 \
134-
CC=$(NDK_PATH)/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android$(APK_API)-clang \
135-
go build -o ndkcli ./cmd/ndkcli/
152+
@mkdir -p $(BUILD_DIR)
153+
CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=$(NDK_CC_ARM64) \
154+
go build -o $(BUILD_DIR)/ndkcli ./cmd/ndkcli/
155+
156+
# Build release binaries for both architectures (stripped)
157+
ndkcli-release:
158+
@mkdir -p $(BUILD_DIR)
159+
CGO_ENABLED=1 GOOS=android GOARCH=arm64 CC=$(NDK_CC_ARM64) \
160+
go build -trimpath -ldflags="-s -w" -o $(BUILD_DIR)/ndkcli-android-arm64 ./cmd/ndkcli/
161+
CGO_ENABLED=1 GOOS=android GOARCH=amd64 CC=$(NDK_CC_X86_64) \
162+
go build -trimpath -ldflags="-s -w" -o $(BUILD_DIR)/ndkcli-android-x86_64 ./cmd/ndkcli/
136163

137164
# Print all ndkcli subcommands (extracted from source, no binary needed)
138165
ndkcli-commands:

0 commit comments

Comments
 (0)