cmake_minimum_required(VERSION 3.18)
project(gl_engine_v30_ibbe_mcl_provider LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

option(MCL_USE_STATIC "Link libmcl statically when available" OFF)

if(NOT DEFINED MCL_DIR AND DEFINED ENV{MCL_DIR})
  set(MCL_DIR $ENV{MCL_DIR})
endif()
if(NOT DEFINED MCL_INCLUDE_DIR AND DEFINED ENV{MCL_INCLUDE_DIR})
  set(MCL_INCLUDE_DIR $ENV{MCL_INCLUDE_DIR})
endif()
if(NOT DEFINED MCL_LIB_DIR AND DEFINED ENV{MCL_LIB_DIR})
  set(MCL_LIB_DIR $ENV{MCL_LIB_DIR})
endif()

find_path(MCL_INCLUDE_DIR_FINAL mcl/bn.h
  HINTS
    ${MCL_INCLUDE_DIR}
    ${MCL_DIR}
    ${MCL_DIR}/include
    ${CMAKE_SOURCE_DIR}/vendor/mcl/include
    /usr/local/include /usr/include /opt/homebrew/include)

set(_mcl_lib_names mcl)
find_library(MCL_LIBRARY_FINAL NAMES ${_mcl_lib_names}
  HINTS
    ${MCL_LIB_DIR}
    ${MCL_DIR}
    ${MCL_DIR}/lib
    ${CMAKE_SOURCE_DIR}/vendor/mcl/lib
    /usr/local/lib /usr/lib /usr/lib64 /opt/homebrew/lib)

if(NOT MCL_INCLUDE_DIR_FINAL OR NOT MCL_LIBRARY_FINAL)
  message(FATAL_ERROR "mcl not found: set MCL_DIR or MCL_INCLUDE_DIR/MCL_LIB_DIR, or vendor mcl under native_mcl_candidate/vendor/mcl")
endif()

add_library(gl_engine_v30_ibbe_mcl_provider SHARED
  gl_engine_v30_ibbe_mcl_provider.cpp)

target_include_directories(gl_engine_v30_ibbe_mcl_provider PRIVATE
  ${MCL_INCLUDE_DIR_FINAL})

target_link_libraries(gl_engine_v30_ibbe_mcl_provider PRIVATE
  ${MCL_LIBRARY_FINAL})

set_target_properties(gl_engine_v30_ibbe_mcl_provider PROPERTIES
  OUTPUT_NAME "gl_engine_v30_ibbe_mcl_provider")
