cmake_minimum_required(VERSION 3.16)
project(librichsmi)

if(MSVC)
  message(FATAL_ERROR "Rich-SMI is not compatible with Windows" \n)
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_MWAITXINTRIN_H_INCLUDED")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORCE_INLINES")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__STRICT_ANSI__")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(NVML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(NVML REQUIRED)

if(NVML_FOUND)
  message(STATUS "NVML is available!")
  message(STATUS "    version: ${NVML_API_VERSION}")
  message(STATUS "    include path: ${NVML_INCLUDE_DIRS}")
  message(STATUS "    library path: ${NVML_LIBRARIES}" \n)
else()
  message(FATAL_ERROR "NVML is NOT available" \n)
endif()

set(PYBIND11_CPP_STANDARD -std=c++17)
add_subdirectory(third_party/pybind11)

if(pybind11_FOUND)
  message(STATUS "pybind11 is available!")
  message(STATUS "    include path: ${pybind11_INCLUDE_DIR}" \n)
else()
  message(FATAL_ERROR "pybind11 is NOT available" \n)
endif()

pybind11_add_module(librichsmi src/librichsmi.cc)
target_include_directories(librichsmi PRIVATE
  ${NVML_INCLUDE_DIRS}
  ${pybind11_INCLUDE_DIR}
)
target_link_libraries(librichsmi PRIVATE
  ${NVML_LIBRARIES}
)

execute_process(
  COMMAND "${PYTHON_EXECUTABLE}" -c "if True:
    import site
    print(site.getsitepackages()[0])"
  OUTPUT_VARIABLE Python_SITELIB
  OUTPUT_STRIP_TRAILING_WHITESPACE
)

install(TARGETS librichsmi DESTINATION ${Python_SITELIB})
