Initial commit
This commit is contained in:
60
cmake/SrcBuild.cmake
Normal file
60
cmake/SrcBuild.cmake
Normal file
@@ -0,0 +1,60 @@
|
||||
#
|
||||
# 源码编译安装通用模版、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()
|
||||
Reference in New Issue
Block a user