cmake_minimum_required(VERSION 3.24)

project(soa_vs_aos LANGUAGES CXX CUDA)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_EXTENSIONS OFF)
set(CMAKE_CUDA_ARCHITECTURES native CACHE STRING
    "CUDA architectures to build for")

function(add_benchmark target source)
    add_executable(${target} ${source})
    target_compile_options(${target} PRIVATE
        $<$<COMPILE_LANGUAGE:CUDA>:-lineinfo>
        $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-save-temps=obj>
    )
endfunction()

add_benchmark(surface_normal_example surface_normal_example.cu)

add_benchmark(translate_example translate_example.cu)
add_benchmark(translate_example_aligned translate_example.cu)
target_compile_definitions(translate_example_aligned PRIVATE VEC_ENABLE_ALIGNAS)
