Skip to content

Commit c67259e

Browse files
authored
Merge pull request #2552 from joliver82/android-16kb-openalsoft-update
Android 16kb openalsoft update
2 parents 8cc3086 + 5256c3c commit c67259e

File tree

9 files changed

+162
-105
lines changed

9 files changed

+162
-105
lines changed

.github/workflows/main.yml

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,17 +99,35 @@ jobs:
9999
name: Build natives for android
100100
runs-on: ubuntu-latest
101101
container:
102-
image: jmonkeyengine/buildenv-jme3:android
102+
image: ghcr.io/cirruslabs/android-sdk:35-ndk
103103

104104
steps:
105105
- name: Clone the repo
106106
uses: actions/checkout@v4
107107
with:
108108
fetch-depth: 1
109+
110+
- name: Setup Java 11
111+
uses: actions/setup-java@v4
112+
with:
113+
distribution: temurin
114+
java-version: '11'
115+
116+
- name: Check java version
117+
run: java -version
118+
119+
- name: Install CMake
120+
run: |
121+
apt-get update
122+
apt-get install -y cmake
123+
cmake --version
124+
109125
- name: Validate the Gradle wrapper
110126
uses: gradle/actions/wrapper-validation@v3
127+
111128
- name: Build
112129
run: |
130+
export ANDROID_NDK="$ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION"
113131
./gradlew -PuseCommitHashAsVersionName=true --no-daemon -PbuildNativeProjects=true \
114132
:jme3-android-native:assemble
115133

jme3-android-native/openalsoft.gradle

Lines changed: 97 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
// OpenAL Soft r1.21.1
22
// TODO: update URL to jMonkeyEngine fork once it's updated with latest kcat's changes
3-
String openALSoftUrl = 'https://github.com/kcat/openal-soft/archive/1.21.1.zip'
3+
String openALSoftUrl = 'https://github.com/kcat/openal-soft/archive/1.24.3.zip'
44
String openALSoftZipFile = 'OpenALSoft.zip'
55

66
// OpenAL Soft directory the download is extracted into
77
// Typically, the downloaded OpenAL Soft zip file will extract to a directory
88
// called "openal-soft"
9-
String openALSoftFolder = 'openal-soft-1.21.1'
9+
String openALSoftFolder = 'openal-soft-1.24.3'
1010

1111
//Working directories for the ndk build.
1212
String openalsoftBuildDir = "${buildDir}" + File.separator + 'openalsoft'
@@ -81,13 +81,103 @@ task copyJmeOpenALSoft(type: Copy, dependsOn: [copyOpenALSoft, copyJmeHeadersOpe
8181
from sourceDir
8282
into outputDir
8383
}
84+
// rootProject.ndkCommandPath must be set to your ndk-build wrapper or full ndk path
85+
def ndkPath = new File(rootProject.ndkCommandPath).getParent()
86+
def cmakeToolchain = "${ndkPath}/build/cmake/android.toolchain.cmake"
87+
88+
// 1) list your ABIs here
89+
def openalAbis = [
90+
"armeabi-v7a",
91+
"arm64-v8a",
92+
"x86",
93+
"x86_64"
94+
]
95+
96+
// 2) for each ABI, register a configure/build pair
97+
openalAbis.each { abi ->
98+
99+
// configure task
100+
tasks.register("configureOpenAlSoft_${abi}", Exec) {
101+
group = "external-native"
102+
description = "Generate CMake build files for OpenAL-Soft [$abi]"
103+
104+
workingDir file("$openalsoftBuildDir/$openALSoftFolder")
105+
commandLine = [
106+
"cmake",
107+
"-S", ".",
108+
"-B", "cmake-build-${abi}",
109+
"-G", "Unix Makefiles", // or Ninja
110+
"-DCMAKE_TOOLCHAIN_FILE=${cmakeToolchain}",
111+
"-DANDROID_PLATFORM=android-21",
112+
"-DANDROID_ABI=${abi}",
113+
"-DCMAKE_BUILD_TYPE=Release",
114+
"-DALSOFT_UTILS=OFF",
115+
"-DALSOFT_EXAMPLES=OFF",
116+
"-DALSOFT_TESTS=OFF",
117+
"-DALSOFT_BACKEND_OPENSL=ON",
118+
'-DALSOFT_SHARED=OFF',
119+
'-DBUILD_SHARED_LIBS=OFF',
120+
'-DALSOFT_STATIC=ON',
121+
'-DLIBTYPE=STATIC',
122+
'-DCMAKE_CXX_FLAGS=-stdlib=libc++'
123+
]
124+
125+
dependsOn copyOpenALSoft
126+
}
127+
128+
// build task
129+
tasks.register("buildOpenAlSoft_${abi}", Exec) {
130+
group = "external-native"
131+
description = "Compile OpenAL-Soft into libopenalsoft.a for [$abi]"
132+
133+
dependsOn "configureOpenAlSoft_${abi}"
134+
workingDir file("$openalsoftBuildDir/$openALSoftFolder")
135+
commandLine = [
136+
"cmake",
137+
"--build", "cmake-build-${abi}",
138+
"--config", "Release"
139+
]
140+
}
141+
}
142+
143+
// 3) optional: aggregate tasks
144+
tasks.register("configureOpenAlSoftAll") {
145+
group = "external-native"
146+
description = "Configure OpenAL-Soft for all ABIs"
147+
dependsOn openalAbis.collect { "configureOpenAlSoft_${it}" }
148+
}
149+
150+
tasks.register("buildOpenAlSoftAll") {
151+
group = "external-native"
152+
description = "Build OpenAL-Soft for all ABIs"
153+
dependsOn openalAbis.collect { "buildOpenAlSoft_${it}" }
154+
}
84155

85-
task buildOpenAlSoftNativeLib(type: Exec, dependsOn: copyJmeOpenALSoft) {
86-
// println "openalsoft build dir: " + openalsoftBuildDir
87-
// println "ndkCommandPath: " + project.ndkCommandPath
156+
task buildOpenAlSoftNativeLib(type: Exec) {
157+
group = "external-native"
158+
description = "Runs ndk-build on your JNI code, linking in the prebuilt OpenAL-Soft .a files"
159+
160+
dependsOn copyJmeOpenALSoft, buildOpenAlSoftAll
161+
162+
// where your Android.mk lives
88163
workingDir openalsoftBuildDir
164+
165+
// call the NDK build script
89166
executable rootProject.ndkCommandPath
90-
args "-j" + Runtime.runtime.availableProcessors()
167+
168+
// pass in all ABIs (so ndk-build will rebuild your shared .so for each one),
169+
// and pass in a custom var OPENALSOFT_BUILD_DIR so your Android.mk can find
170+
// the cmake-build-<ABI> folders.
171+
args(
172+
// let ndk-build know which ABIs to build for
173+
"APP_ABI=armeabi-v7a,arm64-v8a,x86,x86_64",
174+
175+
// pass in the path to the CMake output root
176+
"OPENALSOFT_BUILD_ROOT=${openalsoftBuildDir}/${openALSoftFolder}",
177+
178+
// parallel jobs
179+
"-j${Runtime.runtime.availableProcessors()}"
180+
)
91181
}
92182

93183
task updatePreCompiledOpenAlSoftLibs(type: Copy, dependsOn: buildOpenAlSoftNativeLib) {
@@ -140,3 +230,4 @@ class MyDownload extends DefaultTask {
140230
ant.get(src: sourceUrl, dest: target)
141231
}
142232
}
233+

jme3-android-native/src/native/jme_bufferallocator/Android.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ LOCAL_PATH := $(call my-dir)
3939

4040
include $(CLEAR_VARS)
4141

42+
LOCAL_CFLAGS := -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=true
4243
LOCAL_LDLIBS := -llog -Wl,-s
4344

4445
LOCAL_MODULE := bufferallocatorjme

jme3-android-native/src/native/jme_bufferallocator/Application.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@
3636
APP_PLATFORM := android-19
3737
# change this to 'debug' to see android logs
3838
APP_OPTIM := release
39-
APP_ABI := all
39+
APP_ABI := armeabi-v7a,arm64-v8a,x86,x86_64

jme3-android-native/src/native/jme_decode/Android.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ LOCAL_C_INCLUDES:= \
1010
$(LOCAL_PATH) \
1111
$(LOCAL_PATH)/Tremor
1212

13-
LOCAL_CFLAGS := -std=gnu99 -DLIMIT_TO_64kHz -O0
13+
LOCAL_CFLAGS := -std=gnu99 -DLIMIT_TO_64kHz -O0 -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=true
1414
LOCAL_LDLIBS := -lz -llog -Wl,-s
1515

1616
ifeq ($(TARGET_ARCH),arm)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
APP_PLATFORM := android-9
22
APP_OPTIM := release
3-
APP_ABI := all
3+
APP_ABI := armeabi-v7a,arm64-v8a,x86,x86_64

jme3-android-native/src/native/jme_decode/com_jme3_audio_plugins_NativeVorbisFile.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <unistd.h>
22
#include <stdlib.h>
33
#include <errno.h>
4+
#include <string.h>
45

56
#include "Tremor/ivorbisfile.h"
67

Lines changed: 40 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,49 @@
1-
TARGET_PLATFORM := android-19
1+
# jni/Android.mk
22

33
LOCAL_PATH := $(call my-dir)
44

5-
include $(CLEAR_VARS)
6-
7-
LOCAL_MODULE := openalsoftjme
8-
9-
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/include \
10-
$(LOCAL_PATH)/alc $(LOCAL_PATH)/common
5+
# require the path to cmake-build-<ABI>
6+
ifndef OPENALSOFT_BUILD_ROOT
7+
$(error OPENALSOFT_BUILD_ROOT not set! pass it via ndk-build OPENALSOFT_BUILD_ROOT=/path/to/cmake-build-root)
8+
endif
119

12-
LOCAL_CPP_FEATURES += exceptions
10+
# assemble the path to this ABI's .a
11+
OPENAL_PREBUILT_DIR := $(OPENALSOFT_BUILD_ROOT)/cmake-build-$(TARGET_ARCH_ABI)
1312

14-
LOCAL_CFLAGS := -ffast-math -DAL_BUILD_LIBRARY -DAL_ALEXT_PROTOTYPES -fcommon -O0 -DRESTRICT=""
15-
LOCAL_LDLIBS := -lOpenSLES -llog -Wl,-s
13+
# -----------------------------------------------------------------------------
14+
# 1) prebuilt static library
15+
include $(CLEAR_VARS)
16+
LOCAL_MODULE := openalsoft_prebuilt
17+
LOCAL_SRC_FILES := $(OPENAL_PREBUILT_DIR)/libopenal.a
18+
LOCAL_EXPORT_C_INCLUDES := $(OPENALSOFT_BUILD_ROOT)/include
19+
include $(PREBUILT_STATIC_LIBRARY)
1620

17-
LOCAL_SRC_FILES := al/auxeffectslot.cpp \
18-
al/buffer.cpp \
19-
al/effect.cpp \
20-
al/effects/autowah.cpp \
21-
al/effects/chorus.cpp \
22-
al/effects/compressor.cpp \
23-
al/effects/convolution.cpp \
24-
al/effects/dedicated.cpp \
25-
al/effects/distortion.cpp \
26-
al/effects/echo.cpp \
27-
al/effects/equalizer.cpp \
28-
al/effects/fshifter.cpp \
29-
al/effects/modulator.cpp \
30-
al/effects/null.cpp \
31-
al/effects/pshifter.cpp \
32-
al/effects/reverb.cpp \
33-
al/effects/vmorpher.cpp \
34-
al/error.cpp \
35-
al/event.cpp \
36-
al/extension.cpp \
37-
al/filter.cpp \
38-
al/listener.cpp \
39-
al/source.cpp \
40-
al/state.cpp \
41-
alc/alc.cpp \
42-
alc/alconfig.cpp \
43-
alc/alu.cpp \
44-
alc/backends/base.cpp \
45-
alc/backends/loopback.cpp \
46-
alc/backends/null.cpp \
47-
alc/backends/opensl.cpp \
48-
alc/backends/wave.cpp \
49-
alc/bformatdec.cpp \
50-
alc/buffer_storage.cpp \
51-
alc/converter.cpp \
52-
alc/effects/autowah.cpp \
53-
alc/effects/chorus.cpp \
54-
alc/effects/compressor.cpp \
55-
alc/effects/convolution.cpp \
56-
alc/effects/dedicated.cpp \
57-
alc/effects/distortion.cpp \
58-
alc/effects/echo.cpp \
59-
alc/effects/equalizer.cpp \
60-
alc/effects/fshifter.cpp \
61-
alc/effects/modulator.cpp \
62-
alc/effects/null.cpp \
63-
alc/effects/pshifter.cpp \
64-
alc/effects/reverb.cpp \
65-
alc/effects/vmorpher.cpp \
66-
alc/effectslot.cpp \
67-
alc/helpers.cpp \
68-
alc/hrtf.cpp \
69-
alc/panning.cpp \
70-
alc/uiddefs.cpp \
71-
alc/voice.cpp \
72-
common/alcomplex.cpp \
73-
common/alfstream.cpp \
74-
common/almalloc.cpp \
75-
common/alstring.cpp \
76-
common/dynload.cpp \
77-
common/polyphase_resampler.cpp \
78-
common/ringbuffer.cpp \
79-
common/strutils.cpp \
80-
common/threads.cpp \
81-
core/ambdec.cpp \
82-
core/bs2b.cpp \
83-
core/bsinc_tables.cpp \
84-
core/cpu_caps.cpp \
85-
core/devformat.cpp \
86-
core/except.cpp \
87-
core/filters/biquad.cpp \
88-
core/filters/nfc.cpp \
89-
core/filters/splitter.cpp \
90-
core/fmt_traits.cpp \
91-
core/fpu_ctrl.cpp \
92-
core/logging.cpp \
93-
core/mastering.cpp \
94-
core/mixer/mixer_c.cpp \
95-
core/uhjfilter.cpp \
96-
com_jme3_audio_android_AndroidAL.c \
97-
com_jme3_audio_android_AndroidALC.c \
98-
com_jme3_audio_android_AndroidEFX.c
21+
# -----------------------------------------------------------------------------
22+
# 2) your JNI wrapper
23+
include $(CLEAR_VARS)
24+
LOCAL_MODULE := openalsoftjme
25+
LOCAL_SRC_FILES := \
26+
com_jme3_audio_android_AndroidAL.c \
27+
com_jme3_audio_android_AndroidALC.c \
28+
com_jme3_audio_android_AndroidEFX.c
29+
30+
LOCAL_C_INCLUDES += \
31+
$(LOCAL_PATH) \
32+
$(LOCAL_PATH)/include \
33+
$(LOCAL_PATH)/alc \
34+
$(LOCAL_PATH)/common
35+
36+
LOCAL_CPP_FEATURES := exceptions rtti
37+
LOCAL_CFLAGS := -ffast-math \
38+
-DAL_ALEXT_PROTOTYPES \
39+
-fcommon \
40+
-O0 \
41+
-DRESTRICT="" \
42+
-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=true
43+
44+
LOCAL_LDLIBS := -lOpenSLES -llog -Wl,-s -lc++_static -lc++abi
45+
LOCAL_STATIC_LIBRARIES := openalsoft_prebuilt
46+
# (or LOCAL_WHOLE_STATIC_LIBRARIES if you need every object pulled in)
9947

10048
include $(BUILD_SHARED_LIBRARY)
10149

102-
# Alc/mixer/hrtf_inc.c \
103-
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
APP_PLATFORM := android-19
22
APP_OPTIM := release
3-
APP_ABI := all
3+
APP_ABI := armeabi-v7a,arm64-v8a,x86,x86_64
44
APP_STL := c++_static
55

0 commit comments

Comments
 (0)