# SPDX-License-Identifier: MIT

# This file was generated by
# scripts/copy_from_upstream/copy_from_upstream.py

set(_ML_KEM_OBJS "")

if(OQS_ENABLE_KEM_ml_kem_512)
    add_library(ml_kem_512_ref OBJECT kem_ml_kem_512.c mlkem-native_ml-kem-512_ref/mlkem/compress.c mlkem-native_ml-kem-512_ref/mlkem/debug.c mlkem-native_ml-kem-512_ref/mlkem/indcpa.c mlkem-native_ml-kem-512_ref/mlkem/kem.c mlkem-native_ml-kem-512_ref/mlkem/poly.c mlkem-native_ml-kem-512_ref/mlkem/poly_k.c mlkem-native_ml-kem-512_ref/mlkem/sampling.c mlkem-native_ml-kem-512_ref/mlkem/verify.c)
    target_compile_options(ml_kem_512_ref PUBLIC -DMLKEM_K=2 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    target_include_directories(ml_kem_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-512_ref)
    target_include_directories(ml_kem_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_512_ref PUBLIC -DMLKEM_K=2 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_ref>)
endif()

if(OQS_ENABLE_KEM_ml_kem_512_x86_64)
    add_library(ml_kem_512_x86_64 OBJECT mlkem-native_ml-kem-512_x86_64/mlkem/compress.c mlkem-native_ml-kem-512_x86_64/mlkem/debug.c mlkem-native_ml-kem-512_x86_64/mlkem/indcpa.c mlkem-native_ml-kem-512_x86_64/mlkem/kem.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/basemul.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/basemul.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/compress_avx2.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/consts.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/intt.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/ntt.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/nttfrombytes.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/nttpack.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/ntttobytes.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/nttunpack.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/reduce.S mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/rej_uniform_avx2.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/rej_uniform_table.c mlkem-native_ml-kem-512_x86_64/mlkem/native/x86_64/src/tomont.S mlkem-native_ml-kem-512_x86_64/mlkem/poly.c mlkem-native_ml-kem-512_x86_64/mlkem/poly_k.c mlkem-native_ml-kem-512_x86_64/mlkem/sampling.c mlkem-native_ml-kem-512_x86_64/mlkem/verify.c)
    target_include_directories(ml_kem_512_x86_64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-512_x86_64)
    target_include_directories(ml_kem_512_x86_64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_512_x86_64 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
    target_compile_options(ml_kem_512_x86_64 PUBLIC -DMLKEM_K=2 -DMLK_CONFIG_FILE="../integration/liboqs/config_x86_64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_x86_64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_512_aarch64)
    add_library(ml_kem_512_aarch64 OBJECT mlkem-native_ml-kem-512_aarch64/mlkem/compress.c mlkem-native_ml-kem-512_aarch64/mlkem/debug.c mlkem-native_ml-kem-512_aarch64/mlkem/indcpa.c mlkem-native_ml-kem-512_aarch64/mlkem/kem.c mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/aarch64_zetas.c mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/intt.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/ntt.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/poly_mulcache_compute_asm.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/poly_reduce_asm.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/poly_tobytes_asm.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/poly_tomont_asm.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/rej_uniform_asm.S mlkem-native_ml-kem-512_aarch64/mlkem/native/aarch64/src/rej_uniform_table.c mlkem-native_ml-kem-512_aarch64/mlkem/poly.c mlkem-native_ml-kem-512_aarch64/mlkem/poly_k.c mlkem-native_ml-kem-512_aarch64/mlkem/sampling.c mlkem-native_ml-kem-512_aarch64/mlkem/verify.c)
    target_include_directories(ml_kem_512_aarch64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-512_aarch64)
    target_include_directories(ml_kem_512_aarch64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_512_aarch64 PUBLIC -DMLKEM_K=2 -DMLK_CONFIG_FILE="../integration/liboqs/config_aarch64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_aarch64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_512_cuda)
    add_library(ml_kem_512_cuda OBJECT cupqc_ml-kem-512_cuda/cupqc_ml-kem.cu)
    target_link_libraries(ml_kem_512_cuda cupqc)
    set_property(TARGET ml_kem_512_cuda PROPERTY CUDA_ARCHITECTURES OFF)
    target_compile_options(ml_kem_512_cuda PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:-rdc=true -dlto -arch=compute_70>)
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_cuda>)
endif()

if(OQS_ENABLE_KEM_ml_kem_768)
    add_library(ml_kem_768_ref OBJECT kem_ml_kem_768.c mlkem-native_ml-kem-768_ref/mlkem/compress.c mlkem-native_ml-kem-768_ref/mlkem/debug.c mlkem-native_ml-kem-768_ref/mlkem/indcpa.c mlkem-native_ml-kem-768_ref/mlkem/kem.c mlkem-native_ml-kem-768_ref/mlkem/poly.c mlkem-native_ml-kem-768_ref/mlkem/poly_k.c mlkem-native_ml-kem-768_ref/mlkem/sampling.c mlkem-native_ml-kem-768_ref/mlkem/verify.c)
    target_compile_options(ml_kem_768_ref PUBLIC -DMLKEM_K=3 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    target_include_directories(ml_kem_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-768_ref)
    target_include_directories(ml_kem_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_768_ref PUBLIC -DMLKEM_K=3 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_ref>)
endif()

if(OQS_ENABLE_KEM_ml_kem_768_x86_64)
    add_library(ml_kem_768_x86_64 OBJECT mlkem-native_ml-kem-768_x86_64/mlkem/compress.c mlkem-native_ml-kem-768_x86_64/mlkem/debug.c mlkem-native_ml-kem-768_x86_64/mlkem/indcpa.c mlkem-native_ml-kem-768_x86_64/mlkem/kem.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/basemul.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/basemul.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/compress_avx2.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/consts.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/intt.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/ntt.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/nttfrombytes.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/nttpack.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/ntttobytes.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/nttunpack.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/reduce.S mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/rej_uniform_avx2.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/rej_uniform_table.c mlkem-native_ml-kem-768_x86_64/mlkem/native/x86_64/src/tomont.S mlkem-native_ml-kem-768_x86_64/mlkem/poly.c mlkem-native_ml-kem-768_x86_64/mlkem/poly_k.c mlkem-native_ml-kem-768_x86_64/mlkem/sampling.c mlkem-native_ml-kem-768_x86_64/mlkem/verify.c)
    target_include_directories(ml_kem_768_x86_64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-768_x86_64)
    target_include_directories(ml_kem_768_x86_64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_768_x86_64 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
    target_compile_options(ml_kem_768_x86_64 PUBLIC -DMLKEM_K=3 -DMLK_CONFIG_FILE="../integration/liboqs/config_x86_64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_x86_64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_768_aarch64)
    add_library(ml_kem_768_aarch64 OBJECT mlkem-native_ml-kem-768_aarch64/mlkem/compress.c mlkem-native_ml-kem-768_aarch64/mlkem/debug.c mlkem-native_ml-kem-768_aarch64/mlkem/indcpa.c mlkem-native_ml-kem-768_aarch64/mlkem/kem.c mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/aarch64_zetas.c mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/intt.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/ntt.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/poly_mulcache_compute_asm.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/poly_reduce_asm.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/poly_tobytes_asm.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/poly_tomont_asm.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/rej_uniform_asm.S mlkem-native_ml-kem-768_aarch64/mlkem/native/aarch64/src/rej_uniform_table.c mlkem-native_ml-kem-768_aarch64/mlkem/poly.c mlkem-native_ml-kem-768_aarch64/mlkem/poly_k.c mlkem-native_ml-kem-768_aarch64/mlkem/sampling.c mlkem-native_ml-kem-768_aarch64/mlkem/verify.c)
    target_include_directories(ml_kem_768_aarch64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-768_aarch64)
    target_include_directories(ml_kem_768_aarch64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_768_aarch64 PUBLIC -DMLKEM_K=3 -DMLK_CONFIG_FILE="../integration/liboqs/config_aarch64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_aarch64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_768_cuda)
    add_library(ml_kem_768_cuda OBJECT cupqc_ml-kem-768_cuda/cupqc_ml-kem.cu)
    target_link_libraries(ml_kem_768_cuda cupqc)
    set_property(TARGET ml_kem_768_cuda PROPERTY CUDA_ARCHITECTURES OFF)
    target_compile_options(ml_kem_768_cuda PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:-rdc=true -dlto -arch=compute_70>)
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_cuda>)
endif()

if(OQS_ENABLE_KEM_ml_kem_1024)
    add_library(ml_kem_1024_ref OBJECT kem_ml_kem_1024.c mlkem-native_ml-kem-1024_ref/mlkem/compress.c mlkem-native_ml-kem-1024_ref/mlkem/debug.c mlkem-native_ml-kem-1024_ref/mlkem/indcpa.c mlkem-native_ml-kem-1024_ref/mlkem/kem.c mlkem-native_ml-kem-1024_ref/mlkem/poly.c mlkem-native_ml-kem-1024_ref/mlkem/poly_k.c mlkem-native_ml-kem-1024_ref/mlkem/sampling.c mlkem-native_ml-kem-1024_ref/mlkem/verify.c)
    target_compile_options(ml_kem_1024_ref PUBLIC -DMLKEM_K=4 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    target_include_directories(ml_kem_1024_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-1024_ref)
    target_include_directories(ml_kem_1024_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_1024_ref PUBLIC -DMLKEM_K=4 -DMLK_CONFIG_FILE="../integration/liboqs/config_c.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_ref>)
endif()

if(OQS_ENABLE_KEM_ml_kem_1024_x86_64)
    add_library(ml_kem_1024_x86_64 OBJECT mlkem-native_ml-kem-1024_x86_64/mlkem/compress.c mlkem-native_ml-kem-1024_x86_64/mlkem/debug.c mlkem-native_ml-kem-1024_x86_64/mlkem/indcpa.c mlkem-native_ml-kem-1024_x86_64/mlkem/kem.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/basemul.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/basemul.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/compress_avx2.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/consts.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/intt.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/ntt.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/nttfrombytes.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/nttpack.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/ntttobytes.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/nttunpack.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/reduce.S mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/rej_uniform_avx2.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/rej_uniform_table.c mlkem-native_ml-kem-1024_x86_64/mlkem/native/x86_64/src/tomont.S mlkem-native_ml-kem-1024_x86_64/mlkem/poly.c mlkem-native_ml-kem-1024_x86_64/mlkem/poly_k.c mlkem-native_ml-kem-1024_x86_64/mlkem/sampling.c mlkem-native_ml-kem-1024_x86_64/mlkem/verify.c)
    target_include_directories(ml_kem_1024_x86_64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-1024_x86_64)
    target_include_directories(ml_kem_1024_x86_64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_1024_x86_64 PRIVATE  -mavx2  -mbmi2  -mpopcnt )
    target_compile_options(ml_kem_1024_x86_64 PUBLIC -DMLKEM_K=4 -DMLK_CONFIG_FILE="../integration/liboqs/config_x86_64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_x86_64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_1024_aarch64)
    add_library(ml_kem_1024_aarch64 OBJECT mlkem-native_ml-kem-1024_aarch64/mlkem/compress.c mlkem-native_ml-kem-1024_aarch64/mlkem/debug.c mlkem-native_ml-kem-1024_aarch64/mlkem/indcpa.c mlkem-native_ml-kem-1024_aarch64/mlkem/kem.c mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/aarch64_zetas.c mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/intt.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/ntt.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/poly_mulcache_compute_asm.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/poly_reduce_asm.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/poly_tobytes_asm.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/poly_tomont_asm.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/rej_uniform_asm.S mlkem-native_ml-kem-1024_aarch64/mlkem/native/aarch64/src/rej_uniform_table.c mlkem-native_ml-kem-1024_aarch64/mlkem/poly.c mlkem-native_ml-kem-1024_aarch64/mlkem/poly_k.c mlkem-native_ml-kem-1024_aarch64/mlkem/sampling.c mlkem-native_ml-kem-1024_aarch64/mlkem/verify.c)
    target_include_directories(ml_kem_1024_aarch64 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/mlkem-native_ml-kem-1024_aarch64)
    target_include_directories(ml_kem_1024_aarch64 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
    target_compile_options(ml_kem_1024_aarch64 PUBLIC -DMLKEM_K=4 -DMLK_CONFIG_FILE="../integration/liboqs/config_aarch64.h")
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_aarch64>)
endif()

if(OQS_ENABLE_KEM_ml_kem_1024_cuda)
    add_library(ml_kem_1024_cuda OBJECT cupqc_ml-kem-1024_cuda/cupqc_ml-kem.cu)
    target_link_libraries(ml_kem_1024_cuda cupqc)
    set_property(TARGET ml_kem_1024_cuda PROPERTY CUDA_ARCHITECTURES OFF)
    target_compile_options(ml_kem_1024_cuda PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:-rdc=true -dlto -arch=compute_70>)
    set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_cuda>)
endif()

set(ML_KEM_OBJS ${_ML_KEM_OBJS} PARENT_SCOPE)
