cmake_minimum_required(VERSION 3.13)
project(ReactNativeShikiEngine)

set(CMAKE_VERBOSE_MAKEFILE ON)

# Find prebuilt oniguruma library
find_library(LOG_LIB log)
find_library(ONIG_LIB onig
    PATHS ${CMAKE_CURRENT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}
    NO_CMAKE_FIND_ROOT_PATH
    REQUIRED
)

# Main library
add_library(react-native-shiki-engine SHARED
    src/main/cpp/cpp-adapter.cpp
    ../cpp/NativeShikiEngineModule.cpp
    ../cpp/onig_regex.cpp
)

# Include directories for our code
target_include_directories(react-native-shiki-engine
    PUBLIC
        ../cpp
        src/main/cpp/include
)

# Set C++ standard and properties
set_target_properties(react-native-shiki-engine PROPERTIES
    CXX_STANDARD 20
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS OFF
    POSITION_INDEPENDENT_CODE ON
)

# Tell Folly not to look for folly-config.h
target_compile_definitions(react-native-shiki-engine
    PRIVATE
    -DFOLLY_NO_CONFIG=1
)

# Add codegen files
set(CODEGEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build/generated/source/codegen/jni")

if(EXISTS "${CODEGEN_DIR}/NativeShikiEngineSpec-generated.cpp")
    target_sources(react-native-shiki-engine PRIVATE
        ${CODEGEN_DIR}/NativeShikiEngineSpec-generated.cpp
    )
endif()

if(EXISTS "${CODEGEN_DIR}/react/renderer/components/NativeShikiEngineSpec/NativeShikiEngineSpecJSI-generated.cpp")
    target_sources(react-native-shiki-engine PRIVATE
        ${CODEGEN_DIR}/react/renderer/components/NativeShikiEngineSpec/NativeShikiEngineSpecJSI-generated.cpp
    )
endif()

target_include_directories(react-native-shiki-engine PRIVATE
    ${CODEGEN_DIR}
    ${CODEGEN_DIR}/react/renderer/components/NativeShikiEngineSpec
)

# Use prefab to find React Native libraries
find_package(fbjni REQUIRED CONFIG)
find_package(ReactAndroid REQUIRED CONFIG)

# Link libraries
target_link_libraries(react-native-shiki-engine
    ${ONIG_LIB}
    ${LOG_LIB}
    android
    fbjni::fbjni
    ReactAndroid::jsi
    ReactAndroid::reactnative
)
