cmake_minimum_required(VERSION 3.22)
project(readnslate_bergamot_evaluation LANGUAGES C CXX)
if(NOT ANDROID OR NOT ANDROID_ABI STREQUAL "arm64-v8a")
  message(FATAL_ERROR "Private feasibility target requires Android arm64-v8a")
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_OBJECT_PATH_MAX 240)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Upstream Marian sets these in its directory, but Bergamot also includes its headers.
add_compile_definitions(ARM FMA SSE)
add_compile_options(-include fenv.h)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(BUILD_ARCH armv8-a CACHE STRING "" FORCE)
set(COMPILE_CPU ON CACHE BOOL "" FORCE)
set(COMPILE_CUDA OFF CACHE BOOL "" FORCE)
set(COMPILE_WASM OFF CACHE BOOL "" FORCE)
set(USE_WASM_COMPATIBLE_SOURCE ON CACHE BOOL "Minimal inference sources" FORCE)
set(COMPILE_WITHOUT_EXCEPTIONS OFF CACHE BOOL "" FORCE)
set(COMPILE_LIBRARY_ONLY ON CACHE BOOL "" FORCE)
set(COMPILE_TESTS OFF CACHE BOOL "" FORCE)
set(COMPILE_UNIT_TESTS OFF CACHE BOOL "" FORCE)
set(COMPILE_PYTHON OFF CACHE BOOL "" FORCE)
set(USE_MKL OFF CACHE BOOL "" FORCE)
set(USE_ONNX_SGEMM OFF CACHE BOOL "Use upstream ARM ruy" FORCE)
set(USE_RUY ON CACHE BOOL "" FORCE)
set(USE_RUY_SGEMM ON CACHE BOOL "" FORCE)
set(USE_THREADS ON CACHE BOOL "" FORCE)
set(USE_DOXYGEN OFF CACHE BOOL "" FORCE)
set(GIT_SUBMODULE OFF CACHE BOOL "Verified archives only; no build-time fetching" FORCE)
set(RUY_MINIMAL_BUILD ON CACHE BOOL "" FORCE)
set(SPM_ENABLE_TCMALLOC OFF CACHE BOOL "" FORCE)
if(NOT BERGAMOT_SOURCE)
  message(FATAL_ERROR "Pass the verified inference subtree as BERGAMOT_SOURCE")
endif()
set(PCRE2_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(PCRE2_BUILD_PCRE2GREP OFF CACHE BOOL "" FORCE)
set(PCRE2_SUPPORT_JIT OFF CACHE BOOL "Synthetic text; no executable JIT allocations" FORCE)
add_subdirectory("${PCRE2_SOURCE}" pcre2 EXCLUDE_FROM_ALL)
set(PCRE2_LIBRARIES pcre2-8-static CACHE STRING "Verified local static target" FORCE)
set(PCRE2_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/pcre2" CACHE PATH "" FORCE)
add_subdirectory("${BERGAMOT_SOURCE}" upstream EXCLUDE_FROM_ALL)
add_library(readnslate_bergamot_eval SHARED bridge.cpp)
set_target_properties(readnslate_bergamot_eval PROPERTIES OUTPUT_NAME readnslate_bergamot)
target_link_libraries(readnslate_bergamot_eval PRIVATE bergamot-translator-source)
target_compile_features(readnslate_bergamot_eval PRIVATE cxx_std_17)
target_link_options(readnslate_bergamot_eval PRIVATE
  "-Wl,-z,max-page-size=16384" "-Wl,-z,common-page-size=16384"
  "-Wl,-z,relro" "-Wl,-z,now" "-Wl,--no-undefined")
