liballeg/allegro5

Android: can't compile Allegro with WANT_GLES3=on

Closed this issue · 0 comments

Compiling Allegro 5.2.8 for Android doesn't work if WANT_GLES3 is enabled. It complains of two undefined symbols: glRenderbufferStorageMultisample and glFramebufferTexture2DMultisampleEXT.

As you can see below, Allegro is linked to libGLESv2.so instead of libGLESv3.so. glRenderbufferStorageMultisample requires version 3. In addition, glFramebufferTexture2DMultisampleEXT seems to be present on libGLESv3.so (and v2) starting from API level 28 only.

Linking with libGLESv2.so instead of libGLESv3.so:

[  0%] Linking C shared library lib/liballegro.so
/usr/bin/cmake -E cmake_link_script CMakeFiles/allegro.dir/link.txt --verbose=1
/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=aarch64-none-linux-android21 --gcc-toolchain=/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security  -W -Wall -Wpointer-arith -Wmissing-declarations -Wstrict-prototypes -O2 -g -DNDEBUG -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments  -shared -Wl,-soname,liballegro.so -o lib/liballegro.so CMakeFiles/allegro.dir/src/allegro.c.o CMakeFiles/allegro.dir/src/bitmap.c.o CMakeFiles/allegro.dir/src/bitmap_draw.c.o CMakeFiles/allegro.dir/src/bitmap_io.c.o CMakeFiles/allegro.dir/src/bitmap_lock.c.o CMakeFiles/allegro.dir/src/bitmap_pixel.c.o CMakeFiles/allegro.dir/src/bitmap_type.c.o CMakeFiles/allegro.dir/src/blenders.c.o CMakeFiles/allegro.dir/src/clipboard.c.o CMakeFiles/allegro.dir/src/config.c.o CMakeFiles/allegro.dir/src/convert.c.o CMakeFiles/allegro.dir/src/cpu.c.o CMakeFiles/allegro.dir/src/debug.c.o CMakeFiles/allegro.dir/src/display.c.o CMakeFiles/allegro.dir/src/display_settings.c.o CMakeFiles/allegro.dir/src/drawing.c.o CMakeFiles/allegro.dir/src/dtor.c.o CMakeFiles/allegro.dir/src/events.c.o CMakeFiles/allegro.dir/src/evtsrc.c.o CMakeFiles/allegro.dir/src/exitfunc.c.o CMakeFiles/allegro.dir/src/file.c.o CMakeFiles/allegro.dir/src/file_slice.c.o CMakeFiles/allegro.dir/src/file_stdio.c.o CMakeFiles/allegro.dir/src/fshook.c.o CMakeFiles/allegro.dir/src/fshook_stdio.c.o CMakeFiles/allegro.dir/src/fullscreen_mode.c.o CMakeFiles/allegro.dir/src/haptic.c.o CMakeFiles/allegro.dir/src/inline.c.o CMakeFiles/allegro.dir/src/joynu.c.o CMakeFiles/allegro.dir/src/keybdnu.c.o CMakeFiles/allegro.dir/src/libc.c.o CMakeFiles/allegro.dir/src/math.c.o CMakeFiles/allegro.dir/src/memblit.c.o CMakeFiles/allegro.dir/src/memdraw.c.o CMakeFiles/allegro.dir/src/memory.c.o CMakeFiles/allegro.dir/src/monitor.c.o CMakeFiles/allegro.dir/src/mousenu.c.o CMakeFiles/allegro.dir/src/mouse_cursor.c.o CMakeFiles/allegro.dir/src/path.c.o CMakeFiles/allegro.dir/src/pixels.c.o CMakeFiles/allegro.dir/src/shader.c.o CMakeFiles/allegro.dir/src/system.c.o CMakeFiles/allegro.dir/src/threads.c.o CMakeFiles/allegro.dir/src/timernu.c.o CMakeFiles/allegro.dir/src/tls.c.o CMakeFiles/allegro.dir/src/touch_input.c.o CMakeFiles/allegro.dir/src/transformations.c.o CMakeFiles/allegro.dir/src/tri_soft.c.o CMakeFiles/allegro.dir/src/utf8.c.o CMakeFiles/allegro.dir/src/misc/aatree.c.o CMakeFiles/allegro.dir/src/misc/bstrlib.c.o CMakeFiles/allegro.dir/src/misc/list.c.o CMakeFiles/allegro.dir/src/misc/vector.c.o CMakeFiles/allegro.dir/src/unix/ufdwatch.c.o CMakeFiles/allegro.dir/src/unix/utime.c.o CMakeFiles/allegro.dir/src/unix/uxthread.c.o CMakeFiles/allegro.dir/src/android/android_apk_file.c.o CMakeFiles/allegro.dir/src/android/android_clipboard.c.o CMakeFiles/allegro.dir/src/android/android_display.c.o CMakeFiles/allegro.dir/src/android/android_image.c.o CMakeFiles/allegro.dir/src/android/android_input_stream.c.o CMakeFiles/allegro.dir/src/android/android_joystick.c.o CMakeFiles/allegro.dir/src/android/android_keyboard.c.o CMakeFiles/allegro.dir/src/android/android_mouse.c.o CMakeFiles/allegro.dir/src/android/android_sensors.c.o CMakeFiles/allegro.dir/src/android/android_system.c.o CMakeFiles/allegro.dir/src/android/android_touch.c.o CMakeFiles/allegro.dir/src/android/jni_helpers.c.o CMakeFiles/allegro.dir/src/linux/ljoynu.c.o CMakeFiles/allegro.dir/src/android/android_apk_fs.c.o CMakeFiles/allegro.dir/src/opengl/extensions.c.o CMakeFiles/allegro.dir/src/opengl/ogl_bitmap.c.o CMakeFiles/allegro.dir/src/opengl/ogl_display.c.o CMakeFiles/allegro.dir/src/opengl/ogl_draw.c.o CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o CMakeFiles/allegro.dir/src/opengl/ogl_lock.c.o CMakeFiles/allegro.dir/src/opengl/ogl_lock_es.c.o CMakeFiles/allegro.dir/src/opengl/ogl_render_state.c.o CMakeFiles/allegro.dir/src/opengl/ogl_shader.c.o  -lm -llog /usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libGLESv2.so /usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libEGL.so -latomic -lm 
ld: error: undefined symbol: glRenderbufferStorageMultisample
>>> referenced by ogl_fbo.c:199 (/home/alexandre/allegro-5.2.8.0-android-new/src/opengl/ogl_fbo.c:199)
>>>               CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o:(attach_depth_buffer)

ld: error: undefined symbol: glFramebufferTexture2DMultisampleEXT
>>> referenced by ogl_fbo.c:626 (/home/alexandre/allegro-5.2.8.0-android-new/src/opengl/ogl_fbo.c:626)
>>>               CMakeFiles/allegro.dir/src/opengl/ogl_fbo.c.o:(_al_ogl_setup_fbo_non_backbuffer)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/allegro.dir/build.make:1259: lib/liballegro.so] Error 1
make[2]: Leaving directory '/home/alexandre/allegro-5.2.8.0-android-new/build_arm64-v8a'
make[1]: *** [CMakeFiles/Makefile2:369: CMakeFiles/allegro.dir/all] Error 2
make[1]: Leaving directory '/home/alexandre/allegro-5.2.8.0-android-new/build_arm64-v8a'
make: *** [Makefile:133: all] Error 2

Inspecting the symbols of libGLESv3.so (API Level 27):

alexandre@alenot:/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/27$ nm -gD libGLESv3.so | grep glFramebuffer
00000000000073c0 T glFramebufferParameteri
00000000000073c8 T glFramebufferRenderbuffer
00000000000073d0 T glFramebufferTexture
00000000000073d8 T glFramebufferTexture2D
00000000000073e0 T glFramebufferTexture3DOES
00000000000073e8 T glFramebufferTextureEXT
00000000000073f0 T glFramebufferTextureLayer

Inspecting the symbols of libGLESv3.so (API Level 28):

alexandre@alenot:/usr/local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/28$ nm -gD libGLESv3.so | grep glFramebuffer
00000000000073d8 T glFramebufferParameteri
00000000000073e0 T glFramebufferRenderbuffer
00000000000073e8 T glFramebufferTexture
00000000000073f0 T glFramebufferTexture2D
00000000000073f8 T glFramebufferTexture2DMultisampleEXT
0000000000007400 T glFramebufferTexture3DOES
0000000000007408 T glFramebufferTextureEXT
0000000000007410 T glFramebufferTextureLayer
0000000000007418 T glFramebufferTextureMultisampleMultiviewOVR
0000000000007420 T glFramebufferTextureMultiviewOVR