# A library for integer division by constant with CPU dispatching.

if (ARCH_AMD64)
    add_library(divide_impl_sse2 divideImpl.cpp)
    target_compile_options(divide_impl_sse2 PRIVATE -msse2 -DNAMESPACE=SSE2)
    target_link_libraries(divide_impl_sse2 ch_contrib::libdivide)

    add_library(divide_impl_avx2 divideImpl.cpp)
    target_compile_options(divide_impl_avx2 PRIVATE -mavx2 -DNAMESPACE=AVX2)
    target_link_libraries(divide_impl_avx2 ch_contrib::libdivide)

    set(IMPLEMENTATIONS divide_impl_sse2 divide_impl_avx2)
else ()
    add_library(divide_impl_generic divideImpl.cpp)
    target_compile_options(divide_impl_generic PRIVATE -DNAMESPACE=Generic)
    target_link_libraries(divide_impl_generic ch_contrib::libdivide)

    set(IMPLEMENTATIONS divide_impl_generic)
endif ()

add_library(divide_impl divide.cpp)
target_link_libraries(divide_impl ${IMPLEMENTATIONS} clickhouse_common_io)
