# react-native-nitro-modules for HarmonyOS
# CMakeLists.txt for building the native C++ library
#
# Reference: react-native-fast-image, react-native-zip-archive CMakeLists

cmake_minimum_required(VERSION 3.13)
project(NitroModules)

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ============================================================================
# Find all HarmonyOS-specific C++ files
# ============================================================================
file(GLOB_RECURSE NITRO_HARMONY_SOURCES
     "${CMAKE_CURRENT_SOURCE_DIR}/NitroModulesTurboModule.cpp"
     "${CMAKE_CURRENT_SOURCE_DIR}/platform/ThreadUtils.cpp"
     "${CMAKE_CURRENT_SOURCE_DIR}/shared/*.cpp"
     "${CMAKE_CURRENT_SOURCE_DIR}/shared/PropNameIDCache.cpp"
     "${CMAKE_CURRENT_SOURCE_DIR}/shared/CommonGlobals.cpp"
)


# ============================================================================
# Create the shared library
# ============================================================================
add_library(rnoh_nitro_modules SHARED
    ${NITRO_HARMONY_SOURCES}
)

# ============================================================================
# Include directories
# ============================================================================
target_include_directories(rnoh_nitro_modules PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/shared
)


# ============================================================================
# Link libraries
# ============================================================================
# Link with RNOH (react-native-openharmony) for JSI and TurboModule support
target_link_libraries(rnoh_nitro_modules PUBLIC rnoh)

# Link with HarmonyOS system libraries
target_link_libraries(rnoh_nitro_modules PUBLIC
    libhilog_ndk.z.so
    libace_napi.z.so
)

# ============================================================================
# Compiler flags
# ============================================================================
target_compile_options(rnoh_nitro_modules PRIVATE
    -fexceptions
    -frtti
    -Wall
    -Wextra
    -fstack-protector-all
    -DHARMONY_PLATFORM
)
