I'm building an Audio Player, and I need FMOD to be built/extracted before the audio target gets built. Here's the CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
# Setup GNU/Unix make
set(PREBUILT_ARCH "windows-x86_64")
set(UNIX_MAKE_PROGRAM ${ANDROID_NDK}/prebuilt/${PREBUILT_ARCH}/bin/make)
set(MAKEFILE_FORMAT "Unix Makefiles")
# taglib configuration
set(TAGLIB_VERSION 1.11.1)
set(TAGLIB_CHECKSUM "cee7be0ccfc892fa433d6c837df9522a")
# fmod configuration
set(FMOD_VERSION 11000)
set(FMOD_CHECKSUM "154308800ea4e21649b70120d999fe7a")
include(ExternalProject)
ExternalProject_Add(
taglib
URL ${CMAKE_CURRENT_SOURCE_DIR}/external/taglib-${TAGLIB_VERSION}.tar.gz
URL_MD5 ${TAGLIB_CHECKSUM}
CONFIGURE_COMMAND ${CMAKE_COMMAND}
${CMAKE_CURRENT_BINARY_DIR}/taglib/src/taglib
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_API=${ANDROID_NATIVE_API_LEVEL}
-DCMAKE_ANDROID_ARCH_ABI=${ANDROID_ABI}
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
-GUnix\ Makefiles
-DCMAKE_MAKE_PROGRAM=${UNIX_MAKE_PROGRAM}
-DBUILD_SHARED_LIBS=ON
-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_SOURCE_DIR}/build/taglib/${ANDROID_ABI}
PREFIX taglib
INSTALL_COMMAND ${UNIX_MAKE_PROGRAM} install
)
ExternalProject_Add(
libfmod
URL ${CMAKE_CURRENT_SOURCE_DIR}/external/fmodstudioapi${FMOD_VERSION}android.tar.gz
URL_MD5 ${FMOD_CHECKSUM}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/libfmod/src/libfmod/api/lowlevel/lib/${ANDROID_ABI}/libfmod.so
${CMAKE_CURRENT_SOURCE_DIR}/build/libfmod/${ANDROID_ABI}/libfmod.so
&&
${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/libfmod/src/libfmod/api/lowlevel/lib/fmod.jar
${CMAKE_CURRENT_SOURCE_DIR}/build/libfmod/fmod.jar
PREFIX libfmod
)
add_library(fmod SHARED IMPORTED)
set_target_properties(fmod PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/build/libfmod/${ANDROID_ABI}/libfmod.so")
add_library(tag SHARED IMPORTED)
set_target_properties(tag PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/build/taglib/${ANDROID_ABI}/lib/libtag.so)
add_library(jni_abstract SHARED src/main/jni/jni_abstract.cpp)
add_library(audio SHARED src/main/jni/audio.c)
add_dependencies(audio fmod libfmod)
target_link_libraries(jni_abstract android log audio)
target_link_libraries(audio android log fmod)
However, this does not work. I'm suspecting the order of the commands inside the CMakeLists.txt file is not right, or am I missing something here?
Both FMOD and taglib are built from externally compressed tarballs downloaded from the internet. The compiler is LLVM and the target system is Android.
This is the error: Error:error: '../../../../build/libfmod/armeabi/libfmod.so', needed by '../../../../build/intermediates/cmake/debug/obj/armeabi/libaudio.so', missing and no known rule to make it