cmake_minimum_required(VERSION 3.16.8)
set(CMAKE_CXX_SYSROOT_FLAG_CODE "list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS cu)")

project(trapDemo)

# 设置编译选项、编译器标志等全局配置
# Set MACA Path
if(NOT DEFINED MACA_PATH)
    if(DEFINED ENV{MACA_PATH})
        set(MACA_PATH $ENV{MACA_PATH})
    else()
        set(MACA_PATH "/opt/maca")
    endif()
endif()
message(STATUS "MACA_PATH: ${MACA_PATH}")

#Set MACA_CLANG_PATH
if(NOT DEFINED MACA_CLANG_PATH)
    if(DEFINED ENV{MACA_CLANG_PATH})
        set(MACA_CLANG_PATH $ENV{MACA_CLANG_PATH})
    else()
        set(MACA_CLANG_PATH "${MACA_PATH}/mxgpu_llvm/bin")
    endif()
endif()
message(STATUS "MACA_CLANG_PATH: ${MACA_CLANG_PATH}")


set(COMPILER_NAME "mxcc")
# -Og is better for debug maca code than default
if(MACA_PLATFORM MATCHES "ON" OR MACA_PLATFORM MATCHES "on")
    set(COMPILER_NAME "mxcc")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Og")
endif()
message(STATUS "COMPILER_NAME: ${COMPILER_NAME}")
set(CMAKE_CXX_COMPILER "${MACA_CLANG_PATH}/${COMPILER_NAME}")
set(CMAKE_C_COMPILER "${MACA_CLANG_PATH}/${COMPILER_NAME}")
set(CMAKE_MACA_COMPILER "${MACA_CLANG_PATH}/${COMPILER_NAME}")

# Check if platform and compiler are set
message(STATUS "CMAKE_CXX_COMPILER: " ${CMAKE_CXX_COMPILER})
message(STATUS "CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER})

add_compile_options(-x maca -DNVRTC_GET_TYPE_NAME=1)
add_compile_options(-g)
add_compile_options(-offload-arch native)
add_compile_options(--maca-path=${MACA_PATH})
# 添加头文件目录到包含路径
include_directories(
    ${MACA_PATH}/include
)

link_directories(${MACA_PATH}/lib)

# 指定源码目录
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST)

# 创建可执行文件
if(WIN32)
#mxcc doesn't support cmake now, we need call mxcc by command
set(COMPILE_FLAGS -Xlinker /NODEFAULTLIB:libcmt.lib -D _MT -D _DLL -x maca)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
	list(APPEND COMPILE_FLAGS -D _DEBUG -lmsvcrtd)
else()
	list(APPEND COMPILE_FLAGS -lmsvcrt)
endif()
    execute_process(COMMAND PowerShell.exe ${CMAKE_CXX_COMPILER} ${COMPILE_FLAGS} ${SRC_PATH}/../test/trapDemo.cpp -o ${BUILD_PATH}/test/trapDemo.exe)
else()
    add_executable(trapDemo ${SRC_LIST})
endif()