#
# VisionCamera+autolinking.cmake
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
# https://github.com/mrousavy/nitro
# Copyright © Marc Rousavy @ Margelo
#

# This is a CMake file that adds all files generated by Nitrogen
# to the current CMake project.
#
# To use it, add this to your CMakeLists.txt:
# ```cmake
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/VisionCamera+autolinking.cmake)
# ```

# Define a flag to check if we are building properly
add_definitions(-DBUILDING_VISIONCAMERA_WITH_GENERATED_CMAKE_PROJECT)

# Enable Raw Props parsing in react-native (for Nitro Views)
add_definitions(-DRN_SERIALIZABLE_STATE)

# Add all headers that were generated by Nitrogen
include_directories(
  "../nitrogen/generated/shared/c++"
  "../nitrogen/generated/android/c++"
  "../nitrogen/generated/android/"
)

# Add all .cpp sources that were generated by Nitrogen
target_sources(
  # CMake project name (Android C++ library name)
  VisionCamera PRIVATE
  # Autolinking Setup
  ../nitrogen/generated/android/VisionCameraOnLoad.cpp
  # Shared Nitrogen C++ sources
  ../nitrogen/generated/shared/c++/HybridCameraControllerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraFactorySpec.cpp
  ../nitrogen/generated/shared/c++/HybridFrameRendererSpec.cpp
  ../nitrogen/generated/shared/c++/HybridNativeThreadSpec.cpp
  ../nitrogen/generated/shared/c++/HybridNativeThreadFactorySpec.cpp
  ../nitrogen/generated/shared/c++/HybridGestureControllerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridTapToFocusGestureControllerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridZoomGestureControllerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraDeviceSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraDeviceFactorySpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraExtensionSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraCalibrationDataSpec.cpp
  ../nitrogen/generated/shared/c++/HybridDepthSpec.cpp
  ../nitrogen/generated/shared/c++/HybridFramePlaneSpec.cpp
  ../nitrogen/generated/shared/c++/HybridFrameSpec.cpp
  ../nitrogen/generated/shared/c++/HybridPhotoSpec.cpp
  ../nitrogen/generated/shared/c++/HybridScannedObjectSpec.cpp
  ../nitrogen/generated/shared/c++/HybridScannedCodeSpec.cpp
  ../nitrogen/generated/shared/c++/HybridScannedFaceSpec.cpp
  ../nitrogen/generated/shared/c++/HybridLocationSpec.cpp
  ../nitrogen/generated/shared/c++/HybridMeteringPointSpec.cpp
  ../nitrogen/generated/shared/c++/HybridOrientationManagerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraDepthFrameOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraFrameOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraObjectOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraOutputSynchronizerSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraPhotoOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraPreviewOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraVideoOutputSpec.cpp
  ../nitrogen/generated/shared/c++/HybridRecorderSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraSessionSpec.cpp
  ../nitrogen/generated/shared/c++/HybridCameraSessionConfigSpec.cpp
  ../nitrogen/generated/shared/c++/HybridFrameConverterSpec.cpp
  ../nitrogen/generated/shared/c++/HybridFrameRendererViewSpec.cpp
  ../nitrogen/generated/shared/c++/views/HybridFrameRendererViewComponent.cpp
  ../nitrogen/generated/shared/c++/HybridPreviewViewSpec.cpp
  ../nitrogen/generated/shared/c++/views/HybridPreviewViewComponent.cpp
  # Android-specific Nitrogen C++ sources
  ../nitrogen/generated/android/c++/JHybridCameraControllerSpec.cpp
  ../nitrogen/generated/android/c++/JVariant_NullType_Double.cpp
  ../nitrogen/generated/android/c++/JHybridCameraFactorySpec.cpp
  ../nitrogen/generated/android/c++/JConstraint.cpp
  ../nitrogen/generated/android/c++/JHybridFrameRendererSpec.cpp
  ../nitrogen/generated/android/c++/JHybridNativeThreadSpec.cpp
  ../nitrogen/generated/android/c++/JHybridNativeThreadFactorySpec.cpp
  ../nitrogen/generated/android/c++/JHybridGestureControllerSpec.cpp
  ../nitrogen/generated/android/c++/JHybridTapToFocusGestureControllerSpec.cpp
  ../nitrogen/generated/android/c++/JHybridZoomGestureControllerSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraDeviceSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraDeviceFactorySpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraExtensionSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraCalibrationDataSpec.cpp
  ../nitrogen/generated/android/c++/JHybridDepthSpec.cpp
  ../nitrogen/generated/android/c++/JHybridFramePlaneSpec.cpp
  ../nitrogen/generated/android/c++/JHybridFrameSpec.cpp
  ../nitrogen/generated/android/c++/JHybridPhotoSpec.cpp
  ../nitrogen/generated/android/c++/JHybridScannedObjectSpec.cpp
  ../nitrogen/generated/android/c++/JHybridScannedCodeSpec.cpp
  ../nitrogen/generated/android/c++/JHybridScannedFaceSpec.cpp
  ../nitrogen/generated/android/c++/JHybridLocationSpec.cpp
  ../nitrogen/generated/android/c++/JHybridMeteringPointSpec.cpp
  ../nitrogen/generated/android/c++/JHybridOrientationManagerSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraDepthFrameOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraFrameOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraObjectOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraOutputSynchronizerSpec.cpp
  ../nitrogen/generated/android/c++/JVariant_HybridFrameSpec_HybridDepthSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraPhotoOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraPreviewOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraVideoOutputSpec.cpp
  ../nitrogen/generated/android/c++/JHybridRecorderSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraSessionSpec.cpp
  ../nitrogen/generated/android/c++/JHybridCameraSessionConfigSpec.cpp
  ../nitrogen/generated/android/c++/JHybridFrameConverterSpec.cpp
  ../nitrogen/generated/android/c++/JHybridFrameRendererViewSpec.cpp
  ../nitrogen/generated/android/c++/views/JHybridFrameRendererViewStateUpdater.cpp
  ../nitrogen/generated/android/c++/JHybridPreviewViewSpec.cpp
  ../nitrogen/generated/android/c++/views/JHybridPreviewViewStateUpdater.cpp
)

# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
target_compile_definitions(
  VisionCamera PRIVATE
  -DFOLLY_NO_CONFIG=1
  -DFOLLY_HAVE_CLOCK_GETTIME=1
  -DFOLLY_USE_LIBCPP=1
  -DFOLLY_CFG_NO_COROUTINES=1
  -DFOLLY_MOBILE=1
  -DFOLLY_HAVE_RECVMMSG=1
  -DFOLLY_HAVE_PTHREAD=1
  # Once we target android-23 above, we can comment
  # the following line. NDK uses GNU style stderror_r() after API 23.
  -DFOLLY_HAVE_XSI_STRERROR_R=1
)

# Add all libraries required by the generated specs
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library

# Link all libraries together
target_link_libraries(
        VisionCamera
        fbjni::fbjni                              # <-- Facebook C++ JNI helpers
        ReactAndroid::jsi                         # <-- RN: JSI
        react-native-nitro-modules::NitroModules  # <-- NitroModules Core :)
)

# Link react-native (different prefab between RN 0.75 and RN 0.76)
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
    target_link_libraries(
        VisionCamera
        ReactAndroid::reactnative                 # <-- RN: Native Modules umbrella prefab
    )
else()
    target_link_libraries(
        VisionCamera
        ReactAndroid::react_nativemodule_core     # <-- RN: TurboModules Core
    )
endif()
