book-reader/app/src/main/cpp/CMakeLists.txt
Aryan 06ec45504f
Fdroid fix (#57)
* fix: reproducible build paths for native libs and strip unused brotli sos

* build: improve build reproducibility in CMake

* build: disable dependencies information in APK and Bundle
2026-03-10 22:16:43 +05:30

114 lines
No EOL
3.9 KiB
CMake

# CMakeLists.txt
# Sets the minimum version of CMake required.
cmake_minimum_required(VERSION 3.22.1)
# Declares the project name.
project("reader-native")
add_compile_options(
"-ffile-prefix-map=${CMAKE_SOURCE_DIR}=."
"-ffile-prefix-map=${CMAKE_BINARY_DIR}=."
)
if(DEFINED CMAKE_ANDROID_NDK)
add_compile_options("-ffile-prefix-map=${CMAKE_ANDROID_NDK}=/ndk")
endif()
if(DEFINED CMAKE_SYSROOT)
add_compile_options("-ffile-prefix-map=${CMAKE_SYSROOT}=/sysroot")
endif()
add_compile_options(
-Wno-builtin-macro-redefined
-D__DATE__="\"1970-01-01\""
-D__TIME__="\"00:00:00\""
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,max-page-size=16384")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# --- CONFIGURE SUBPROJECTS ---
# Force subprojects to build as static libraries. This is critical for Android.
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE)
set(BROTLI_DISABLE_TESTS ON CACHE BOOL "Disable Brotli tests" FORCE)
# ===================================================================
# WOFF2 DEPENDENCY SETUP
# ===================================================================
# 1. Add the brotli project. This defines the `brotlidec-static` target.
add_subdirectory(woff2/brotli)
# 2. Manually define the variables that the woff2/CMakeLists.txt script expects.
set(BROTLIDEC_FOUND TRUE)
set(BROTLIENC_FOUND TRUE)
set(BROTLIDEC_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/woff2/brotli/c/include)
set(BROTLIENC_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/woff2/brotli/c/include)
set(BROTLIDEC_LIBRARIES brotlidec-static)
set(BROTLIENC_LIBRARIES brotlienc-static)
# 3. Add the woff2 project. This defines the `woff2dec` target.
add_subdirectory(woff2)
# ===================================================================
# LIBMOBI DEPENDENCY SETUP
# ===================================================================
# 4. Set libmobi options before adding it.
# We disable libxml2 to use the internal writer, simplifying dependencies.
# We also disable encryption for now for the same reason.
set(USE_LIBXML2 OFF CACHE BOOL "Use libxml2" FORCE)
set(USE_ENCRYPTION OFF CACHE BOOL "Enable encryption" FORCE)
# Temporarily enable shared libs to build libmobi as a .so file for LGPL compliance.
set(BUILD_SHARED_LIBS ON)
# 5. Add the libmobi project. This will define the `mobi` target as a shared library.
add_subdirectory(libmobi)
set_target_properties(mobi PROPERTIES VERSION "" SOVERSION "")
# Revert back to building static libs for any subsequent dependencies.
set(BUILD_SHARED_LIBS OFF)
# Force all symbols in the mobi shared library to be visible.
# This is necessary because some internal functions we use (like mobi_determine_flowpart_type)
# are not explicitly exported by the library's public API for shared builds.
set_target_properties(mobi PROPERTIES C_VISIBILITY_PRESET default)
# ===================================================================
# FINAL NATIVE LIBRARY FOR THE APP
# ===================================================================
# 6. Define our final JNI wrapper library.
add_library(
native-lib
SHARED
Woff2Converter.cpp
mobi_jni_bridge.c
pdfium_bridge.cpp # Add this new file
)
# 7. Tell our library where to find all necessary header files.
target_include_directories(native-lib
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/woff2/include
${CMAKE_CURRENT_SOURCE_DIR}/libmobi/src
)
# 8. Find the Android logging and zlib libraries.
find_library(log-lib log)
find_library(z-lib z)
# 9. Link our final library against all the static libraries and Android libraries.
target_link_libraries(
native-lib
PRIVATE
woff2dec
mobi
${log-lib}
${z-lib}
dl
)