cmake_minimum_required(VERSION 3.20)
project(spindle VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

option(SPINDLE_BUILD_TESTS "Build unit tests" ON)
option(SPINDLE_BUILD_PYTHON "Build pybind11 extension" ON)

set(SPINDLE_CORE_SOURCES
  csrc/core/Allocator.cpp
  csrc/core/Device.cpp
  csrc/core/Dtype.cpp
  csrc/core/Executor.cpp
  csrc/core/Graph.cpp
  csrc/core/Layout.cpp
  csrc/core/Storage.cpp
  csrc/core/Tensor.cpp
)
add_library(spindle_core STATIC
  ${SPINDLE_CORE_SOURCES}
)
target_include_directories(spindle_core PUBLIC "${PROJECT_SOURCE_DIR}/csrc")
set_target_properties(spindle_core PROPERTIES POSITION_INDEPENDENT_CODE ON)

include(cmake/Dependencies.cmake)
spindle_resolve_dependencies()

if(SPINDLE_BUILD_PYTHON)
  add_subdirectory(spindle)
endif()

if(SPINDLE_BUILD_TESTS)
  enable_testing()
  add_subdirectory(tests)
endif()

include(cmake/Summary.cmake)
spindle_print_summary()
