# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM-MLU project
cmake_minimum_required(VERSION 3.16)
project(vllm_mlu_C)

function(detect_debian10)
    if(EXISTS "/etc/os-release")
        file(READ "/etc/os-release" os_release)
        if(os_release MATCHES "PRETTY_NAME=\"Debian GNU/Linux 10" OR
           os_release MATCHES "VERSION_ID=\"10")
            set(DEBIAN_10 TRUE PARENT_SCOPE)
            message(STATUS "Detected Debian 10 (buster)")
        endif()
    endif()
endfunction()

detect_debian10()

if(DEBIAN_10)
    find_program(GCC_PATH "gcc" PATHS "/usr/local/bin")
    if(GCC_PATH)
        message(STATUS "Using GCC on Debian 10: ${GCC_PATH}")
        set(CMAKE_C_COMPILER "${GCC_PATH}")
        set(CMAKE_CXX_COMPILER "/usr/local/bin/g++")
    else()
        message(WARNING "Debian 10 detected but gcc not found!")
    endif()
endif()

set(CMAKE_CXX_STANDARD 17)

include(${CMAKE_CURRENT_LIST_DIR}/cmake/utils.cmake)

# Suppress potential warnings about unused manually-specified variables
set(ignoreMe "${VLLM_PYTHON_PATH}")

set(PYTHON_SUPPORTED_VERSIONS "3.9" "3.10" "3.11" "3.12")

find_package(pybind11 REQUIRED)

append_cmake_prefix_path("torch" "torch.utils.cmake_prefix_path")
set(VLLM_MLU_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}")

find_package(Torch REQUIRED)

if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release" CACHE STRINGS "Build type Release/Debug (default Release)" FORCE)
endif()

file(GLOB VLLM_MLU_SRC ${CMAKE_CURRENT_SOURCE_DIR}/csrc/*.cpp)

include_directories(
    ${pybind11_INCLUDE_DIRS}
    ${PYTHON_INCLUDE_PATH}
    ${TORCH_INCLUDE_DIRS}
    $ENV{NEUWARE_HOME}/include
)

pybind11_add_module(vllm_mlu_C ${VLLM_MLU_SRC})

target_link_directories(
  vllm_mlu_C
  PRIVATE
  $ENV{NEUWARE_HOME}/lib64
)

target_link_libraries(
  vllm_mlu_C
  PUBLIC
  ${TORCH_LIBRARIES}
  libcndrv.so
)

target_link_options(vllm_mlu_C PRIVATE "-Wl,-rpath,$ORIGIN:$ORIGIN/lib")

install(TARGETS vllm_mlu_C DESTINATION ${VLLM_MLU_INSTALL_PATH})
