# Build extlibs as shared libraries
set(BUILD_SHARED_LIBS_SAVED "${BUILD_SHARED_LIBS}")
set(BUILD_SHARED_LIBS ON)

# Set CMAKE_POLICY_DEFAULT_CMP0077 to NEW to make option() command in CCfits
# CMakeLists.txt honoring the BUILD_SHARED_LIBS variable
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
add_subdirectory(CCfits)
add_subdirectory(pugixml)
add_subdirectory(Catch2)
add_subdirectory(progressbar)

# Embree config
set(EMBREE_TUTORIALS OFF CACHE BOOL "Disable Embree tutorials" FORCE)
set(EMBREE_TESTING_INSTALL_TESTS OFF CACHE BOOL "Don't install Embree tests" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "Disable Embree tests" FORCE)
set(EMBREE_TESTING_INTENSITY 0 CACHE STRING "Disable Embree test registration" FORCE)
set(EMBREE_TASKING_SYSTEM INTERNAL CACHE STRING "Tasking system for Embree" FORCE)
set(EMBREE_ISPC_SUPPORT OFF CACHE BOOL "Disable Embree ISPC support" FORCE)
set(EMBREE_SYCL_SUPPORT OFF CACHE BOOL "Disable Embree SYCL (GPU) support" FORCE)
set(EMBREE_RAY_PACKETS OFF CACHE BOOL "Disable packet kernels" FORCE)
set(EMBREE_FILTER_FUNCTION OFF CACHE BOOL "Disable filter functions" FORCE)
set(EMBREE_RAY_MASK OFF CACHE BOOL "Disable ray masks" FORCE)
# Keep only geometries we use (triangles + user), drop the rest to speed build
set(EMBREE_GEOMETRY_TRIANGLE ON CACHE BOOL "Triangles enabled" FORCE)
set(EMBREE_GEOMETRY_USER ON CACHE BOOL "User geometry enabled" FORCE)
set(EMBREE_GEOMETRY_QUAD OFF CACHE BOOL "Disable quad geometry" FORCE)
set(EMBREE_GEOMETRY_CURVE OFF CACHE BOOL "Disable curve geometry" FORCE)
set(EMBREE_GEOMETRY_SUBDIVISION OFF CACHE BOOL "Disable subdivision geometry" FORCE)
set(EMBREE_GEOMETRY_POINT OFF CACHE BOOL "Disable point geometry" FORCE)
set(EMBREE_GEOMETRY_GRID OFF CACHE BOOL "Disable grid geometry" FORCE)
set(EMBREE_GEOMETRY_INSTANCE OFF CACHE BOOL "Disable instancing" FORCE)
set(EMBREE_GEOMETRY_INSTANCE_ARRAY OFF CACHE BOOL "Disable instance arrays" FORCE)
set(EMBREE_MAX_INSTANCE_LEVEL_COUNT 1 CACHE STRING "Required when instancing is off" FORCE)
# Limit ISAs to speed build: x86 sticks to SSE2 baseline, arm64/aarch64 switches to NEON
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64|arm64)")
  set(EMBREE_ISA_SSE2 OFF CACHE BOOL "Enable SSE2 ISA" FORCE)
  set(EMBREE_ISA_SSE42 OFF CACHE BOOL "Disable SSE4.2 ISA" FORCE)
  set(EMBREE_ISA_AVX OFF CACHE BOOL "Disable AVX ISA" FORCE)
  set(EMBREE_ISA_AVX2 OFF CACHE BOOL "Disable AVX2 ISA" FORCE)
  set(EMBREE_ISA_AVX512 OFF CACHE BOOL "Disable AVX512 ISA" FORCE)
  set(EMBREE_ISA_NEON ON CACHE BOOL "Enable NEON ISA" FORCE)
  set(EMBREE_ISA_NEON2X OFF CACHE BOOL "Enable NEON2X ISA" FORCE)
  set(EMBREE_MAX_ISA NEON CACHE STRING "Highest ISA to build" FORCE)
else()
  set(EMBREE_ISA_SSE2 ON CACHE BOOL "Enable SSE2 ISA" FORCE)
  set(EMBREE_ISA_SSE42 OFF CACHE BOOL "Disable SSE4.2 ISA" FORCE)
  set(EMBREE_ISA_AVX OFF CACHE BOOL "Disable AVX ISA" FORCE)
  set(EMBREE_ISA_AVX2 OFF CACHE BOOL "Disable AVX2 ISA" FORCE)
  set(EMBREE_ISA_AVX512 OFF CACHE BOOL "Disable AVX512 ISA" FORCE)
  set(EMBREE_ISA_NEON OFF CACHE BOOL "Enable NEON ISA" FORCE)
  set(EMBREE_ISA_NEON2X OFF CACHE BOOL "Enable NEON2X ISA" FORCE)
  set(EMBREE_MAX_ISA SSE2 CACHE STRING "Highest ISA to build" FORCE)
endif()
add_subdirectory(embree)

set(BUILD_SHARED_LIBS "${BUILD_SHARED_LIBS_SAVED}")
