61 lines
1.9 KiB
CMake
61 lines
1.9 KiB
CMake
#
|
|
# 源码编译安装通用模版、mpi/vasp等
|
|
#
|
|
|
|
# 源码编译安装通用函数
|
|
# NAME: 软件名 VER:版本 URL:在线下载地址
|
|
function(SrcBuild NAME VER URL)
|
|
SET_INSTALL_PATH(${NAME} ${VER} SOFT_INSTALL_DIR)
|
|
DEPLOY_MSG("Build ${NAME}-${VER} , install to: ${SOFT_INSTALL_DIR}")
|
|
|
|
# 1. 定义离线包路径 & 编译临时目录
|
|
set(OFFLINE_PKG_DIR "${CMAKE_SOURCE_DIR}/files")
|
|
set(PKG_FILENAME "${NAME}-${VER}.tar.gz")
|
|
set(LOCAL_TAR "${OFFLINE_PKG_DIR}/${PKG_FILENAME}")
|
|
set(BUILD_DIR "${CMAKE_BINARY_DIR}/build_${NAME}")
|
|
|
|
file(MAKE_DIRECTORY ${BUILD_DIR})
|
|
set(TAR_FILE "${BUILD_DIR}/${PKG_FILENAME}")
|
|
|
|
# 2. 优先使用本地离线包
|
|
if(EXISTS ${LOCAL_TAR})
|
|
DEPLOY_MSG("Found offline package: ${LOCAL_TAR}, use local file")
|
|
# 拷贝离线包到编译目录(避免源目录被修改)
|
|
file(COPY ${LOCAL_TAR} DESTINATION ${BUILD_DIR})
|
|
else()
|
|
DEPLOY_MSG("Offline package not found, start download: ${URL}")
|
|
file(DOWNLOAD ${URL} ${TAR_FILE} SHOW_PROGRESS)
|
|
endif()
|
|
|
|
# 3. 解压源码
|
|
execute_process(
|
|
COMMAND tar -xf ${TAR_FILE} -C ${BUILD_DIR}
|
|
RESULT_VARIABLE TAR_RET
|
|
)
|
|
if(NOT TAR_RET EQUAL 0)
|
|
message(FATAL_ERROR "Extract ${NAME} package failed")
|
|
endif()
|
|
|
|
set(SRC_DIR "${BUILD_DIR}/${NAME}-${VER}")
|
|
|
|
# 4. configure
|
|
execute_process(
|
|
COMMAND ./configure --prefix=${SOFT_INSTALL_DIR}
|
|
WORKING_DIRECTORY ${SRC_DIR}
|
|
RESULT_VARIABLE CONF_RET
|
|
)
|
|
if(NOT CONF_RET EQUAL 0)
|
|
message(FATAL_ERROR "${NAME} configure failed")
|
|
endif()
|
|
|
|
# 5. 编译 + 安装
|
|
execute_process(COMMAND make -j${BUILD_JOBS} WORKING_DIRECTORY ${SRC_DIR})
|
|
execute_process(COMMAND make install WORKING_DIRECTORY ${SRC_DIR})
|
|
|
|
DEPLOY_MSG("${NAME}-${VER} build & install done")
|
|
endfunction()
|
|
|
|
if(CMAKE_SCRIPT_MODE_FILE)
|
|
SrcBuild(${NAME} ${VER} ${URL})
|
|
endif()
|