Files
2026-07-13 12:40:42 +08:00

86 lines
2.7 KiB
CMake

set(CMAKE_FIND_DEBUG_MODE ON)
# flagcx.cmake
if(NOT WITH_FLAGCX)
return()
endif()
if(WITH_XPU)
#Paths
set(FLAGCX_SOURCE_DIR "${PADDLE_SOURCE_DIR}/third_party/flagcx")
set(FLAGCX_PREFIX "${FLAGCX_BINARY_DIR}") # staged "install"
set(FLAGCX_INC_SRC "${FLAGCX_SOURCE_DIR}/flagcx/include") # headers in source
set(FLAGCX_LIB_NAME
"flagcx"
CACHE STRING "FlagCX library base name")
set(FLAGCX_LIB "${FLAGCX_SOURCE_DIR}/build/lib/libflagcx.so")
set(XPU_INCLUDE_PATH "${THIRD_PARTY_PATH}/install/xpu/include/xpu")
set(XPU_LIB_PATH "${THIRD_PARTY_PATH}/install/xpu/lib")
find_path(
FLAGCX_INCLUDE_DIR flagcx.h
PATHS ${FLAGCX_SOURCE_DIR}/flagcx/include
NO_DEFAULT_PATH)
message(STATUS "FLAGCX_INCLUDE_DIR is ${FLAGCX_INCLUDE_DIR}")
include_directories(SYSTEM ${FLAGCX_INCLUDE_DIR})
ExternalProject_Add(
flagcx_ep
SOURCE_DIR "${FLAGCX_SOURCE_DIR}"
BINARY_DIR "${FLAGCX_SOURCE_DIR}"
CONFIGURE_COMMAND "" # none
# Ensure the script is executable
BUILD_COMMAND bash ${CMAKE_SOURCE_DIR}/tools/flagcx/build_flagcx_xpu.sh
${XPU_INCLUDE_PATH} ${XPU_LIB_PATH} ${FLAGCX_SOURCE_DIR}
# Option A: let the script do the staging; then INSTALL_COMMAND is empty
INSTALL_COMMAND ""
LOG_BUILD 1
LOG_INSTALL 1)
add_library(flagcx INTERFACE)
add_dependencies(flagcx flagcx_ep)
else()
set(FLAGCX_SOURCE_DIR "${PADDLE_SOURCE_DIR}/third_party/flagcx")
set(FLAGCX_BINARY_DIR "${PADDLE_SOURCE_DIR}/build/third_party/flagcx")
set(THIRD_PARTY_DIR "${PADDLE_SOURCE_DIR}/build/third_party")
set(FLAGCX_ROOT "/usr/local/flagcx")
set(FLAGCX_LIB_DIR "${FLAGCX_BINARY_DIR}/build/lib")
set(USR_LOCAL_DIR "/usr/local")
file(REMOVE_RECURSE ${FLAGCX_BINARY_DIR})
message(STATUS "removed old flagcx dir")
message(STATUS "Copying third-party source to build directory")
execute_process(COMMAND cp -r ${FLAGCX_SOURCE_DIR} ${THIRD_PARTY_DIR}
RESULT_VARIABLE COPY_RESULT)
if(NOT COPY_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to copy third-party source to build directory")
endif()
# Create a custom target to build the third-party library
message(STATUS "Building third-party library with its Makefile")
execute_process(
COMMAND make
WORKING_DIRECTORY ${FLAGCX_BINARY_DIR}
RESULT_VARIABLE BUILD_RESULT)
find_path(
FLAGCX_INCLUDE_DIR flagcx.h
PATHS ${FLAGCX_SOURCE_DIR}/flagcx/include
NO_DEFAULT_PATH)
message(STATUS "FLAGCX_INCLUDE_DIR is ${FLAGCX_INCLUDE_DIR}")
include_directories(SYSTEM ${FLAGCX_INCLUDE_DIR})
add_library(flagcx INTERFACE)
find_library(
FLAGCX_LIB
NAMES flagcx libflagcx
PATHS ${FLAGCX_LIB_DIR}
DOC "My custom library")
add_dependencies(flagcx FLAGCX_LIB)
message(STATUS "FLAGCX_LIB is ${FLAGCX_LIB}")
endif()