cmake_minimum_required(VERSION 3.18)
project(fstio LANGUAGES C CXX)

find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)
find_package(pybind11 CONFIG REQUIRED)

set(FSTLIB "${CMAKE_CURRENT_SOURCE_DIR}/vendor/fstlib")

set(FST_SOURCES
  ${FSTLIB}/LZ4/lz4.c
  ${FSTLIB}/ZSTD/common/debug.c
  ${FSTLIB}/ZSTD/common/entropy_common.c
  ${FSTLIB}/ZSTD/common/error_private.c
  ${FSTLIB}/ZSTD/common/fse_decompress.c
  ${FSTLIB}/ZSTD/common/pool.c
  ${FSTLIB}/ZSTD/common/xxhash.c
  ${FSTLIB}/ZSTD/common/zstd_common.c
  ${FSTLIB}/ZSTD/compress/fse_compress.c
  ${FSTLIB}/ZSTD/compress/hist.c
  ${FSTLIB}/ZSTD/compress/huf_compress.c
  ${FSTLIB}/ZSTD/compress/zstd_compress.c
  ${FSTLIB}/ZSTD/compress/zstd_compress_literals.c
  ${FSTLIB}/ZSTD/compress/zstd_compress_sequences.c
  ${FSTLIB}/ZSTD/compress/zstd_compress_superblock.c
  ${FSTLIB}/ZSTD/compress/zstd_double_fast.c
  ${FSTLIB}/ZSTD/compress/zstd_fast.c
  ${FSTLIB}/ZSTD/compress/zstd_lazy.c
  ${FSTLIB}/ZSTD/compress/zstd_ldm.c
  ${FSTLIB}/ZSTD/compress/zstd_opt.c
  ${FSTLIB}/ZSTD/decompress/huf_decompress.c
  ${FSTLIB}/ZSTD/decompress/zstd_ddict.c
  ${FSTLIB}/ZSTD/decompress/zstd_decompress.c
  ${FSTLIB}/ZSTD/decompress/zstd_decompress_block.c
  ${FSTLIB}/ZSTD/dictBuilder/cover.c
  ${FSTLIB}/ZSTD/dictBuilder/divsufsort.c
  ${FSTLIB}/ZSTD/dictBuilder/fastcover.c
  ${FSTLIB}/ZSTD/dictBuilder/zdict.c
  ${FSTLIB}/blockstreamer/blockstreamer_v2.cpp
  ${FSTLIB}/byte/byte_v12.cpp
  ${FSTLIB}/byteblock/byteblock_v13.cpp
  ${FSTLIB}/character/character_v6.cpp
  ${FSTLIB}/compression/compression.cpp
  ${FSTLIB}/compression/compressor.cpp
  ${FSTLIB}/double/double_v9.cpp
  ${FSTLIB}/factor/factor_v7.cpp
  ${FSTLIB}/integer/integer_v8.cpp
  ${FSTLIB}/integer64/integer64_v11.cpp
  ${FSTLIB}/interface/fststore.cpp
  ${FSTLIB}/logical/logical_v10.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/src/openmphelper.cpp
)

pybind11_add_module(_native MODULE src/native.cpp ${FST_SOURCES})
target_compile_features(_native PRIVATE cxx_std_17)
target_include_directories(_native PRIVATE
  ${CMAKE_CURRENT_SOURCE_DIR}/src/shims
  ${FSTLIB}
  ${FSTLIB}/LZ4
  ${FSTLIB}/ZSTD
  ${FSTLIB}/ZSTD/common
  ${FSTLIB}/ZSTD/compress
  ${FSTLIB}/ZSTD/decompress
)

if(MSVC)
  target_compile_options(_native PRIVATE /W3 /wd4068 /wd4244 /wd4267)
else()
  target_compile_options(_native PRIVATE -Wno-unknown-pragmas -Wno-unused-parameter)
endif()

install(TARGETS _native LIBRARY DESTINATION fstio RUNTIME DESTINATION fstio)
