# might use env instead
if (NOT DEFINED CALRT_SRC_DIR)
    set(CALRT_SRC_DIR ${CMAKE_SOURCE_DIR}/../mchp_model/calrt/hostrt)

    include(ExternalProject)

    set(CALRT_STAGING_DIR ${CMAKE_BINARY_DIR}/calrt_install)

    ExternalProject_Add(
        calrt_external # 构建过程

        SOURCE_DIR ${CALRT_SRC_DIR}

        CMAKE_ARGS 
            -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
            -DCMAKE_INSTALL_PREFIX=${CALRT_STAGING_DIR}
    )

    set(HOSTRT_INCLUDE_DIR ${CALRT_STAGING_DIR}/include)
    set(HOSTRT_LIBRARIES ${CALRT_STAGING_DIR}/lib/libhostrt.a)

    add_library(hostrt_external STATIC IMPORTED GLOBAL)
    set_target_properties(hostrt_external PROPERTIES
        IMPORTED_LOCATION "${HOSTRT_LIBRARIES}"
        INTERFACE_INCLUDE_DIRECTORIES "${HOSTRT_INCLUDE_DIR}"
    )

    list(APPEND CALRT_LIBRARIES
        hostrt_external
        elf
    )

    # set(CALRT_SRC_DIR ${CMAKE_SOURCE_DIR}/../mchp_model/calrt/hostrt)
    # find_package(calrt REQUIRED PATHS ${CALRT_SRC_DIR})

    # list(APPEND CALRT_LIBRARIES
    #     calrt::calrt
    # )

    file(GLOB GGML_SOURCES_CALRT "*.cpp")

    ggml_add_backend_library(ggml-calrt ${GGML_SOURCES_CALRT})
    add_dependencies(ggml-calrt calrt_external)
else()
    list(APPEND CALRT_LIBRARIES
        calrt_objs
    )
    file(GLOB GGML_SOURCES_CALRT "*.cpp")

   ggml_add_backend_library(ggml-calrt ${GGML_SOURCES_CALRT})
endif()


# Set header and libs
set(CALRT_INCLUDE_DIRS
    ${CALRT_SRC_DIR}/include
    ${CALRT_SRC_DIR}/fmt/include
)

target_link_libraries(ggml-calrt PRIVATE ${CALRT_LIBRARIES})
target_include_directories(ggml-calrt PUBLIC ${CALRT_INCLUDE_DIRS})

# target_compile_options(ggml-calrt PRIVATE -fsanitize=address -fno-omit-frame-pointer)
# target_link_options(ggml-calrt PRIVATE -fsanitize=address)


message(STATUS "CALRT: CALRT_SRC_DIR =  ${CALRT_SRC_DIR}")
message(STATUS "CALRT: CALRT_INCLUDE_DIRS =  ${CALRT_INCLUDE_DIRS}")
message(STATUS "CALRT: CALRT_LIBRARIES =  ${CALRT_LIBRARIES}")