117 lines
3.9 KiB
CMake
117 lines
3.9 KiB
CMake
|
|
function(setup_external_libs ARCH)
|
||
|
|
set(REQUEST_FILE "${PROJECT_SOURCE_DIR}/request.txt")
|
||
|
|
|
||
|
|
if(NOT EXISTS "${REQUEST_FILE}")
|
||
|
|
message(WARNING "request.txt not found at: ${REQUEST_FILE}")
|
||
|
|
return()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
#message(STATUS "Setting up external libraries for architecture: ${ARCH}")
|
||
|
|
|
||
|
|
# 读取request.txt
|
||
|
|
file(STRINGS ${REQUEST_FILE} LINES)
|
||
|
|
set(LIB_COUNT 0)
|
||
|
|
set(INCLUDE_DIRS)
|
||
|
|
set(LIBRARY_DIRS)
|
||
|
|
set(PREFIX_PATHS)
|
||
|
|
|
||
|
|
foreach(REL_PATH ${LINES})
|
||
|
|
# 跳过注释和空行
|
||
|
|
if(REL_PATH MATCHES "^[ \t]*#.*$" OR REL_PATH STREQUAL "")
|
||
|
|
continue()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# 去除首尾空格
|
||
|
|
string(STRIP "${REL_PATH}" REL_PATH)
|
||
|
|
|
||
|
|
# 构建完整路径
|
||
|
|
set(FULL_PATH "${PROJECT_SOURCE_DIR}/dependency/${ARCH}/${REL_PATH}")
|
||
|
|
|
||
|
|
# 检查路径是否存在
|
||
|
|
if(NOT EXISTS "${FULL_PATH}")
|
||
|
|
message(WARNING "Library path does not exist: ${FULL_PATH}")
|
||
|
|
continue()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# 添加到 CMAKE_PREFIX_PATH (保留原功能)
|
||
|
|
list(APPEND PREFIX_PATHS "${FULL_PATH}")
|
||
|
|
|
||
|
|
# 从路径中提取库名(最后一个目录名)
|
||
|
|
string(REGEX REPLACE ".*/([^/]+)/?$" "\\1" LIB_NAME "${REL_PATH}")
|
||
|
|
|
||
|
|
# 检查和处理头文件目录
|
||
|
|
set(HAS_INCLUDE FALSE)
|
||
|
|
set(HAS_LIB FALSE)
|
||
|
|
|
||
|
|
# 查找 include 目录
|
||
|
|
if(EXISTS "${FULL_PATH}/include")
|
||
|
|
# 有专门的 include 目录
|
||
|
|
list(APPEND INCLUDE_DIRS "${FULL_PATH}/include")
|
||
|
|
set(HAS_INCLUDE TRUE)
|
||
|
|
#message(STATUS " ${LIB_NAME}: Adding include directory: ${FULL_PATH}/include")
|
||
|
|
else()
|
||
|
|
# 没有专门的 include 目录,使用路径本身
|
||
|
|
list(APPEND INCLUDE_DIRS "${FULL_PATH}")
|
||
|
|
#message(STATUS " ${LIB_NAME}: Using base directory for includes: ${FULL_PATH}")
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# 查找 lib 目录
|
||
|
|
if(EXISTS "${FULL_PATH}/lib")
|
||
|
|
# 有专门的 lib 目录
|
||
|
|
list(APPEND LIBRARY_DIRS "${FULL_PATH}/lib")
|
||
|
|
set(HAS_LIB TRUE)
|
||
|
|
#message(STATUS " ${LIB_NAME}: Adding library directory: ${FULL_PATH}/lib")
|
||
|
|
else()
|
||
|
|
# 没有专门的 lib 目录,检查是否有库文件在当前目录
|
||
|
|
file(GLOB LIB_FILES "${FULL_PATH}/*.so" "${FULL_PATH}/*.a" "${FULL_PATH}/*.dylib" "${FULL_PATH}/*.dll" "${FULL_PATH}/*.lib")
|
||
|
|
if(LIB_FILES)
|
||
|
|
# 当前目录中有库文件
|
||
|
|
list(APPEND LIBRARY_DIRS "${FULL_PATH}")
|
||
|
|
set(HAS_LIB TRUE)
|
||
|
|
#message(STATUS " ${LIB_NAME}: Using base directory for libraries: ${FULL_PATH}")
|
||
|
|
else()
|
||
|
|
message(WARNING " ${LIB_NAME}: No library files found in: ${FULL_PATH}")
|
||
|
|
endif()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
if(HAS_INCLUDE OR HAS_LIB)
|
||
|
|
math(EXPR LIB_COUNT "${LIB_COUNT} + 1")
|
||
|
|
endif()
|
||
|
|
endforeach()
|
||
|
|
|
||
|
|
# 设置 CMAKE_PREFIX_PATH (原功能)
|
||
|
|
if(PREFIX_PATHS)
|
||
|
|
# 将路径添加到 CMAKE_PREFIX_PATH
|
||
|
|
list(APPEND CMAKE_PREFIX_PATH ${PREFIX_PATHS})
|
||
|
|
# 设置为全局变量,使其在 find_package 中可用
|
||
|
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||
|
|
#message(STATUS "Added to CMAKE_PREFIX_PATH:")
|
||
|
|
#foreach(PATH ${PREFIX_PATHS})
|
||
|
|
# message(STATUS " ${PATH}")
|
||
|
|
#endforeach()
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# 设置头文件目录
|
||
|
|
if(INCLUDE_DIRS)
|
||
|
|
# 去重
|
||
|
|
list(REMOVE_DUPLICATES INCLUDE_DIRS)
|
||
|
|
|
||
|
|
# 添加到包含目录
|
||
|
|
include_directories(${INCLUDE_DIRS})
|
||
|
|
endif()
|
||
|
|
|
||
|
|
# 设置库文件目录
|
||
|
|
if(LIBRARY_DIRS)
|
||
|
|
# 去重
|
||
|
|
list(REMOVE_DUPLICATES LIBRARY_DIRS)
|
||
|
|
# 添加到链接目录
|
||
|
|
link_directories(${LIBRARY_DIRS})
|
||
|
|
endif()
|
||
|
|
|
||
|
|
if(LIB_COUNT GREATER 0)
|
||
|
|
message(STATUS "Successfully setup ${LIB_COUNT} external libraries for ${ARCH}")
|
||
|
|
else()
|
||
|
|
message(WARNING "No external libraries were successfully setup")
|
||
|
|
endif()
|
||
|
|
endfunction()
|