move download and extract code into function
This commit is contained in:
35
cmake/Modules/ExternalCMakeProject.cmake
Normal file
35
cmake/Modules/ExternalCMakeProject.cmake
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Build a CMake based external library as subdirectory.
|
||||||
|
# The sources will be unpacked to ${CMAKE_BINARY_DIR}/_deps/${target}-src
|
||||||
|
# The binaries will be built in ${CMAKE_BINARY_DIR}/_deps/${target}-build
|
||||||
|
#
|
||||||
|
function(ExternalCMakeProject target url hash basedir cmakedir)
|
||||||
|
# change settings locally
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
if(CMAKE_VERSION VERSION_LESS 3.14)
|
||||||
|
get_filename_component(archive ${url} NAME)
|
||||||
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
||||||
|
message(STATUS "Downloading ${url}")
|
||||||
|
file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS)
|
||||||
|
message(STATUS "Unpacking and configuring ${archive}")
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
||||||
|
file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*")
|
||||||
|
list(LENGTH TARGET_SOURCE _num)
|
||||||
|
if(_num GREATER 1)
|
||||||
|
message(FATAL_ERROR "Inconsistent ${target} library sources. "
|
||||||
|
"Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake")
|
||||||
|
endif()
|
||||||
|
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
||||||
|
file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
||||||
|
add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}"
|
||||||
|
"${CMAKE_BINARY_DIR}/_deps/${target}-build")
|
||||||
|
else()
|
||||||
|
include(FetchContent)
|
||||||
|
message(STATUS "Downloading ${url}")
|
||||||
|
FetchContent_Declare(${target} URL ${url} URL_HASH MD5=${hash} SOURCE_SUBDIR ${cmakedir})
|
||||||
|
message(STATUS "Unpacking and configuring ${archive}")
|
||||||
|
FetchContent_MakeAvailable(${target})
|
||||||
|
endif()
|
||||||
|
endfunction(ExternalCMakeProject)
|
||||||
@ -12,47 +12,11 @@ if(DOWNLOAD_MSCG)
|
|||||||
mark_as_advanced(MSCG_URL)
|
mark_as_advanced(MSCG_URL)
|
||||||
mark_as_advanced(MSCG_MD5)
|
mark_as_advanced(MSCG_MD5)
|
||||||
|
|
||||||
# always compile a static lib but with position independent code
|
include(ExternalCMakeProject)
|
||||||
# make a copy of current settings for later use
|
ExternalCMakeProject(mscg ${MSCG_URL} ${MSCG_MD5} MSCG-release src/CMake)
|
||||||
set(OLD_SHARED_LIBS ${BUILD_SHARED_LIBS})
|
|
||||||
set(OLD_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.14)
|
|
||||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps)
|
|
||||||
file(DOWNLOAD ${MSCG_URL} ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz EXPECTED_HASH MD5=${MSCG_MD5})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/mscg.tar.gz
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps)
|
|
||||||
|
|
||||||
file(GLOB MSCG_SOURCE "${CMAKE_BINARY_DIR}/_deps/MSCG-release-*")
|
|
||||||
# sanity check. do not allow to have multiple downloaded and extracted versions of the source
|
|
||||||
list(LENGTH MSCG_SOURCE _num)
|
|
||||||
if(_num GREATER 1)
|
|
||||||
message(FATAL_ERROR "Inconsistent MSCG library sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake")
|
|
||||||
endif()
|
|
||||||
add_subdirectory(${MSCG_SOURCE}/src/CMake ${CMAKE_BINARY_DIR}/_deps/mscg-build)
|
|
||||||
else()
|
|
||||||
include(FetchContent)
|
|
||||||
FetchContent_Declare(mscg URL ${MSCG_URL} URL_HASH MD5=${MSCG_MD5} SOURCE_SUBDIR src/CMake)
|
|
||||||
FetchContent_MakeAvailable(mscg)
|
|
||||||
set(MSCG_SOURCE ${CMAKE_BINARY_DIR}/_deps/mscg-src)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# restore previous settings
|
|
||||||
if(OLD_POSITION_INDEPENDENT_CODE)
|
|
||||||
set(CMAKE_POSITON_INDEPENDENT_CODE ${OLD_POSITION_INDEPENDENT_CODE})
|
|
||||||
else()
|
|
||||||
unset(CMAKE_POSITION_INDEPENDENT_CODE)
|
|
||||||
endif()
|
|
||||||
if (OLD_SHARED_LIBS)
|
|
||||||
set(BUILD_SHARED_LIBS ${OLD_SHARED_LIBS})
|
|
||||||
else()
|
|
||||||
unset(BUILD_SHARED_LIBS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# set include and link library
|
# set include and link library
|
||||||
target_include_directories(lammps PRIVATE "${MSCG_SOURCE}/src")
|
target_include_directories(lammps PRIVATE "${CMAKE_BINARY_DIR}/_deps/mscg-src/src")
|
||||||
target_link_libraries(lammps PRIVATE mscg)
|
target_link_libraries(lammps PRIVATE mscg)
|
||||||
else()
|
else()
|
||||||
find_package(MSCG)
|
find_package(MSCG)
|
||||||
|
|||||||
@ -11,24 +11,8 @@ mark_as_advanced(GTEST_URL)
|
|||||||
mark_as_advanced(GTEST_MD5)
|
mark_as_advanced(GTEST_MD5)
|
||||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||||
|
|
||||||
# workaround for older CMake versions (tested on Ubuntu 18.04 with CMake 3.10)
|
include(ExternalCMakeProject)
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.14)
|
ExternalCMakeProject(googletest ${GTEST_URL} ${GTEST_MD5} googletest .)
|
||||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps)
|
|
||||||
file(DOWNLOAD ${GTEST_URL} ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz EXPECTED_HASH MD5=${GTEST_MD5})
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/googletest.tar.gz
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps)
|
|
||||||
file(GLOB GTEST_SOURCE "${CMAKE_BINARY_DIR}/_deps/googletest-*")
|
|
||||||
# sanity check. do not allow to have multiple downloaded and extracted versions of the source
|
|
||||||
list(LENGTH GTEST_SOURCE _num)
|
|
||||||
if(_num GREATER 1)
|
|
||||||
message(FATAL_ERROR "Inconsistent googletest sources. Please delete ${CMAKE_BINARY_DIR}/_deps and re-run cmake")
|
|
||||||
endif()
|
|
||||||
add_subdirectory(${GTEST_SOURCE} ${CMAKE_BINARY_DIR}/googletest)
|
|
||||||
else()
|
|
||||||
include(FetchContent)
|
|
||||||
FetchContent_Declare(googletest URL ${GTEST_URL} URL_HASH MD5=${GTEST_MD5})
|
|
||||||
FetchContent_MakeAvailable(googletest)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# General tests using the LAMMPS executable itself
|
# General tests using the LAMMPS executable itself
|
||||||
|
|||||||
Reference in New Issue
Block a user