* 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
114 lines
No EOL
3.9 KiB
CMake
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
|
|
) |