From 341dee065763953fdeeb0a450864e92fbcef1658 Mon Sep 17 00:00:00 2001 From: zhouwei25 <52485244+zhouwei25@users.noreply.github.com> Date: Mon, 25 Nov 2019 12:01:24 +0800 Subject: [PATCH] Cache 3rd source code, improve stability, reduce the compilation time (#21190) --- cmake/external/boost.cmake | 23 +++++---- cmake/external/cares.cmake | 2 +- cmake/external/cub.cmake | 18 ++++--- cmake/external/dgc.cmake | 10 ++-- cmake/external/dlpack.cmake | 20 +++++--- cmake/external/eigen.cmake | 48 +++++++++++------- cmake/external/gflags.cmake | 14 ++++-- cmake/external/glog.cmake | 17 ++++--- cmake/external/gtest.cmake | 22 +++++--- cmake/external/mkldnn.cmake | 40 ++++++++------- cmake/external/mklml.cmake | 24 +++++---- cmake/external/openblas.cmake | 4 +- cmake/external/protobuf.cmake | 25 ++++----- cmake/external/pybind11.cmake | 20 +++++--- cmake/external/threadpool.cmake | 19 +++++-- cmake/external/warpctc.cmake | 14 ++++-- cmake/external/xxhash.cmake | 41 ++++++++------- cmake/external/zlib.cmake | 14 ++++-- cmake/third_party.cmake | 89 +++++++++++++++++++++++++++++++-- 19 files changed, 316 insertions(+), 148 deletions(-) diff --git a/cmake/external/boost.cmake b/cmake/external/boost.cmake index ba8b5fc6c8..c8854b3894 100644 --- a/cmake/external/boost.cmake +++ b/cmake/external/boost.cmake @@ -22,26 +22,29 @@ set(BOOST_PROJECT "extern_boost") # version of boost, say, 1.66.0, doesn't build on CentOS 6. We # checked that the devtools package of CentOS 6 installs boost 1.41.0. # So we use 1.41.0 here. -set(BOOST_VER "1.41.0") -set(BOOST_TAR "boost_1_41_0" CACHE STRING "" FORCE) -set(BOOST_URL "http://paddlepaddledeps.bj.bcebos.com/${BOOST_TAR}.tar.gz" CACHE STRING "" FORCE) +set(BOOST_VER "1.41.0") +set(BOOST_TAR "boost_1_41_0" CACHE STRING "" FORCE) +set(BOOST_URL "http://paddlepaddledeps.bj.bcebos.com/${BOOST_TAR}.tar.gz" CACHE STRING "" FORCE) -MESSAGE(STATUS "BOOST_TAR: ${BOOST_TAR}, BOOST_URL: ${BOOST_URL}") +MESSAGE(STATUS "BOOST_VERSION: ${BOOST_VER}, BOOST_URL: ${BOOST_URL}") -set(BOOST_SOURCES_DIR ${THIRD_PARTY_PATH}/boost) -set(BOOST_DOWNLOAD_DIR "${BOOST_SOURCES_DIR}/src/${BOOST_PROJECT}") +set(BOOST_PREFIX_DIR ${THIRD_PARTY_PATH}/boost) +cache_third_party(${BOOST_PROJECT} + URL ${BOOST_URL} + DIR ${BOOST_PREFIX_DIR}) -set(BOOST_INCLUDE_DIR "${BOOST_DOWNLOAD_DIR}" CACHE PATH "boost include directory." FORCE) +set(BOOST_INCLUDE_DIR "${BOOST_SOURCE_DIR}" CACHE PATH "boost include directory." FORCE) set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1) include_directories(${BOOST_INCLUDE_DIR}) ExternalProject_Add( ${BOOST_PROJECT} ${EXTERNAL_PROJECT_LOG_ARGS} - DOWNLOAD_DIR ${BOOST_DOWNLOAD_DIR} - URL ${BOOST_URL} + "${BOOST_DOWNLOAD_CMD}" + PREFIX ${BOOST_PREFIX_DIR} + DOWNLOAD_DIR ${BOOST_SOURCE_DIR} + SOURCE_DIR ${BOOST_SOURCE_DIR} DOWNLOAD_NO_PROGRESS 1 - PREFIX ${BOOST_SOURCES_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" diff --git a/cmake/external/cares.cmake b/cmake/external/cares.cmake index a4e19cc469..de199da3e6 100644 --- a/cmake/external/cares.cmake +++ b/cmake/external/cares.cmake @@ -36,7 +36,7 @@ ExternalProject_Add( CONFIGURE_COMMAND ./buildconf && ./configure --disable-shared --prefix=${CARES_INSTALL_DIR} BUILD_IN_SOURCE 1 PATCH_COMMAND ${PATCH_COMMAND_CARES} - BUILD_COMMAND make -j8 + BUILD_COMMAND make -j $(nproc) INSTALL_COMMAND make install ) diff --git a/cmake/external/cub.cmake b/cmake/external/cub.cmake index e8242ab417..8adf882802 100644 --- a/cmake/external/cub.cmake +++ b/cmake/external/cub.cmake @@ -14,18 +14,24 @@ include(ExternalProject) -set(CUB_SOURCE_DIR ${THIRD_PARTY_PATH}/cub) -set(CUB_INCLUDE_DIR ${CUB_SOURCE_DIR}/src/extern_cub) +set(CUB_PREFIX_DIR ${THIRD_PARTY_PATH}/cub) +set(CUB_REPOSITORY https://github.com/NVlabs/cub.git) +set(CUB_TAG v1.8.0) -include_directories(${CUB_INCLUDE_DIR}) +cache_third_party(extern_cub + REPOSITORY ${CUB_REPOSITORY} + TAG ${CUB_TAG} + DIR ${CUB_PREFIX_DIR}) + +include_directories(${CUB_SOURCE_DIR}) ExternalProject_Add( extern_cub ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/NVlabs/cub.git" - GIT_TAG "v1.8.0" - PREFIX ${CUB_SOURCE_DIR} + "${CUB_DOWNLOAD_CMD}" + PREFIX ${CUB_PREFIX_DIR} + SOURCE_DIR ${CUB_SOURCE_DIR} UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" diff --git a/cmake/external/dgc.cmake b/cmake/external/dgc.cmake index 59b463c4c0..b0a386c288 100644 --- a/cmake/external/dgc.cmake +++ b/cmake/external/dgc.cmake @@ -17,17 +17,17 @@ INCLUDE(ExternalProject) SET(DGC_SOURCES_DIR "${THIRD_PARTY_PATH}/dgc") SET(DGC_INSTALL_DIR "${THIRD_PARTY_PATH}/install/dgc") SET(DGC_INCLUDE_DIR "${DGC_INSTALL_DIR}/include" CACHE PATH "dgc include directory." FORCE) -SET(DGC_LIBRARIES "${DGC_INSTALL_DIR}/lib/libdgc.a" CACHE FILEPATH "dgc library." FORCE) +SET(DGC_LIBRARIES "${DGC_INSTALL_DIR}/lib/libdgc.a" CACHE FILEPATH "dgc library." FORCE) INCLUDE_DIRECTORIES(${DGC_INCLUDE_DIR}) ExternalProject_Add( extern_dgc ${EXTERNAL_PROJECT_LOG_ARGS} - URL "http://fleet.bj.bcebos.com/collective_ef2216a.tgz" - URL_MD5 "2f67549fd5f1262383d83289abc4f88f" - SOURCE_DIR "${DGC_SOURCES_DIR}" + URL "http://fleet.bj.bcebos.com/collective_ef2216a.tgz" + URL_MD5 "2f67549fd5f1262383d83289abc4f88f" + SOURCE_DIR "${DGC_SOURCES_DIR}" CONFIGURE_COMMAND "" - BUILD_COMMAND make -j + BUILD_COMMAND make -j $(nproc) INSTALL_COMMAND mkdir -p ${DGC_INSTALL_DIR}/lib/ ${DGC_INCLUDE_DIR}/dgc && cp ${DGC_SOURCES_DIR}/build/lib/libdgc.a ${DGC_LIBRARIES} && cp ${DGC_SOURCES_DIR}/build/include/dgc.h ${DGC_INCLUDE_DIR}/dgc/ diff --git a/cmake/external/dlpack.cmake b/cmake/external/dlpack.cmake index 679e91de4b..7710708cef 100644 --- a/cmake/external/dlpack.cmake +++ b/cmake/external/dlpack.cmake @@ -14,19 +14,27 @@ include(ExternalProject) -set(DLPACK_SOURCE_DIR ${THIRD_PARTY_PATH}/dlpack) -set(DLPACK_INCLUDE_DIR ${DLPACK_SOURCE_DIR}/src/extern_dlpack/include) +set(DLPACK_PREFIX_DIR ${THIRD_PARTY_PATH}/dlpack) +set(DLPACK_REPOSITORY https://github.com/dmlc/dlpack.git) +set(DLPACK_TAG v0.2) + +cache_third_party(extern_dlpack + REPOSITORY ${DLPACK_REPOSITORY} + TAG ${DLPACK_TAG} + DIR ${DLPACK_PREFIX_DIR}) + +set(DLPACK_INCLUDE_DIR ${DLPACK_SOURCE_DIR}/include) include_directories(${DLPACK_INCLUDE_DIR}) ExternalProject_Add( extern_dlpack ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/dmlc/dlpack.git" - GIT_TAG "v0.2" - PREFIX ${DLPACK_SOURCE_DIR} - UPDATE_COMMAND "" + "${DLPACK_DOWNLOAD_CMD}" + PREFIX ${DLPACK_PREFIX_DIR} + SOURCE_DIR ${DLPACK_SOURCE_DIR} + UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" diff --git a/cmake/external/eigen.cmake b/cmake/external/eigen.cmake index 43a23fa9d4..a5696429f9 100644 --- a/cmake/external/eigen.cmake +++ b/cmake/external/eigen.cmake @@ -12,28 +12,41 @@ # See the License for the specific language governing permissions and # limitations under the License. -INCLUDE(ExternalProject) +include(ExternalProject) -SET(EIGEN_SOURCE_DIR ${THIRD_PARTY_PATH}/eigen3) -SET(EIGEN_INCLUDE_DIR ${EIGEN_SOURCE_DIR}/src/extern_eigen3) -INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIR}) +set(EIGEN_PREFIX_DIR ${THIRD_PARTY_PATH}/eigen3) +# eigen on cuda9.1 missing header of math_funtions.hpp +# https://stackoverflow.com/questions/43113508/math-functions-hpp-not-found-when-using-cuda-with-eigen +if(WITH_AMD_GPU) + set(EIGEN_REPOSITORY https://github.com/sabreshao/hipeigen.git) + set(EIGEN_TAG 7cb2b6e5a4b4a1efe658abb215cd866c6fb2275e) +endif() if(WIN32) - set(EIGEN_GIT_REPOSITORY https://github.com/wopeizl/eigen-git-mirror) - set(EIGEN_GIT_TAG support_cuda9_win) + set(EIGEN_REPOSITORY https://github.com/wopeizl/eigen-git-mirror) + set(EIGEN_TAG support_cuda9_win) else() - set(EIGEN_GIT_REPOSITORY https://github.com/eigenteam/eigen-git-mirror) - set(EIGEN_GIT_TAG 917060c364181f33a735dc023818d5a54f60e54c) + set(EIGEN_REPOSITORY https://github.com/eigenteam/eigen-git-mirror) + set(EIGEN_TAG 917060c364181f33a735dc023818d5a54f60e54c) endif() + +cache_third_party(extern_eigen3 + REPOSITORY ${EIGEN_REPOSITORY} + TAG ${EIGEN_TAG} + DIR ${EIGEN_PREFIX_DIR}) + +set(EIGEN_INCLUDE_DIR ${EIGEN_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${EIGEN_INCLUDE_DIR}) + if(WITH_AMD_GPU) ExternalProject_Add( extern_eigen3 ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/sabreshao/hipeigen.git" - GIT_TAG 7cb2b6e5a4b4a1efe658abb215cd866c6fb2275e - PREFIX ${EIGEN_SOURCE_DIR} - UPDATE_COMMAND "" + "${DOWNLOAD_CMD}" + PREFIX ${EIGEN_PREFIX_DIR} + SOURCE_DIR ${EIGEN_SOURCE_DIR} + UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" @@ -44,13 +57,10 @@ else() extern_eigen3 ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "${EIGEN_GIT_REPOSITORY}" - # eigen on cuda9.1 missing header of math_funtions.hpp - # https://stackoverflow.com/questions/43113508/math-functions-hpp-not-found-when-using-cuda-with-eigen - GIT_TAG ${EIGEN_GIT_TAG} - PREFIX ${EIGEN_SOURCE_DIR} - DOWNLOAD_NAME "eigen" - UPDATE_COMMAND "" + "${EIGEN_DOWNLOAD_CMD}" + PREFIX ${EIGEN_PREFIX_DIR} + SOURCE_DIR ${EIGEN_SOURCE_DIR} + UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" diff --git a/cmake/external/gflags.cmake b/cmake/external/gflags.cmake index 1ceee9c168..15669c6c2a 100644 --- a/cmake/external/gflags.cmake +++ b/cmake/external/gflags.cmake @@ -14,9 +14,11 @@ INCLUDE(ExternalProject) -SET(GFLAGS_SOURCES_DIR ${THIRD_PARTY_PATH}/gflags) +SET(GFLAGS_PREFIX_DIR ${THIRD_PARTY_PATH}/gflags) SET(GFLAGS_INSTALL_DIR ${THIRD_PARTY_PATH}/install/gflags) SET(GFLAGS_INCLUDE_DIR "${GFLAGS_INSTALL_DIR}/include" CACHE PATH "gflags include directory." FORCE) +set(GFLAGS_REPOSITORY https://github.com/gflags/gflags.git) +set(GFLAGS_TAG 77592648e3f3be87d6c7123eb81cbad75f9aef5a) IF(WIN32) set(GFLAGS_LIBRARIES "${GFLAGS_INSTALL_DIR}/lib/gflags_static.lib" CACHE FILEPATH "GFLAGS_LIBRARIES" FORCE) ELSE(WIN32) @@ -27,13 +29,17 @@ ENDIF(WIN32) INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE_DIR}) +cache_third_party(extern_gflags + REPOSITORY ${GFLAGS_REPOSITORY} + TAG ${GFLAGS_TAG}) + ExternalProject_Add( extern_gflags ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/gflags/gflags.git" - GIT_TAG 77592648e3f3be87d6c7123eb81cbad75f9aef5a - PREFIX ${GFLAGS_SOURCES_DIR} + "${GFLAGS_DOWNLOAD_CMD}" + PREFIX ${GFLAGS_PREFIX_DIR} + SOURCE_DIR ${GFLAGS_SOURCE_DIR} BUILD_COMMAND ${BUILD_COMMAND} INSTALL_COMMAND ${INSTALL_COMMAND} UPDATE_COMMAND "" diff --git a/cmake/external/glog.cmake b/cmake/external/glog.cmake index 7df895ec62..093f6086e3 100644 --- a/cmake/external/glog.cmake +++ b/cmake/external/glog.cmake @@ -14,9 +14,11 @@ INCLUDE(ExternalProject) -SET(GLOG_SOURCES_DIR ${THIRD_PARTY_PATH}/glog) +SET(GLOG_PREFIX_DIR ${THIRD_PARTY_PATH}/glog) SET(GLOG_INSTALL_DIR ${THIRD_PARTY_PATH}/install/glog) SET(GLOG_INCLUDE_DIR "${GLOG_INSTALL_DIR}/include" CACHE PATH "glog include directory." FORCE) +SET(GLOG_REPOSITORY https://github.com/google/glog.git) +SET(GLOG_TAG v0.3.5) IF(WIN32) SET(GLOG_LIBRARIES "${GLOG_INSTALL_DIR}/lib/glog.lib" CACHE FILEPATH "glog library." FORCE) @@ -28,17 +30,18 @@ ENDIF(WIN32) INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIR}) -SET(GLOG_REPOSITORY "https://github.com/google/glog.git") -SET(GLOG_TAG "v0.3.5") +cache_third_party(extern_glog + REPOSITORY ${GLOG_REPOSITORY} + TAG ${GLOG_TAG}) ExternalProject_Add( extern_glog ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - DEPENDS gflags - GIT_REPOSITORY ${GLOG_REPOSITORY} - GIT_TAG ${GLOG_TAG} - PREFIX ${GLOG_SOURCES_DIR} + "${GLOG_DOWNLOAD_CMD}" + DEPENDS gflags + PREFIX ${GLOG_PREFIX_DIR} + SOURCE_DIR ${GLOG_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} diff --git a/cmake/external/gtest.cmake b/cmake/external/gtest.cmake index 1d5a6fad55..fccbc1f9b1 100644 --- a/cmake/external/gtest.cmake +++ b/cmake/external/gtest.cmake @@ -21,9 +21,11 @@ ENDIF() INCLUDE(GNUInstallDirs) INCLUDE(ExternalProject) -SET(GTEST_SOURCES_DIR ${THIRD_PARTY_PATH}/gtest) -SET(GTEST_INSTALL_DIR ${THIRD_PARTY_PATH}/install/gtest) -SET(GTEST_INCLUDE_DIR "${GTEST_INSTALL_DIR}/include" CACHE PATH "gtest include directory." FORCE) +SET(GTEST_PREFIX_DIR ${THIRD_PARTY_PATH}/gtest) +SET(GTEST_INSTALL_DIR ${THIRD_PARTY_PATH}/install/gtest) +SET(GTEST_INCLUDE_DIR "${GTEST_INSTALL_DIR}/include" CACHE PATH "gtest include directory." FORCE) +set(GTEST_REPOSITORY https://github.com/google/googletest.git) +set(GTEST_TAG release-1.8.1) INCLUDE_DIRECTORIES(${GTEST_INCLUDE_DIR}) @@ -44,14 +46,18 @@ IF(WITH_MKLML) SET(GTEST_DEPENDS ${MKLML_PROJECT}) ENDIF() +cache_third_party(extern_gtest + REPOSITORY ${GTEST_REPOSITORY} + TAG ${GTEST_TAG}) + ExternalProject_Add( extern_gtest ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} + "${GTEST_DOWNLOAD_CMD}" DEPENDS ${GTEST_DEPENDS} - GIT_REPOSITORY "https://github.com/google/googletest.git" - GIT_TAG "release-1.8.1" - PREFIX ${GTEST_SOURCES_DIR} + PREFIX ${GTEST_PREFIX_DIR} + SOURCE_DIR ${GTEST_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} @@ -69,8 +75,8 @@ ExternalProject_Add( -DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} ${EXTERNAL_OPTIONAL_ARGS} CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${GTEST_INSTALL_DIR} - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON - -DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} + -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON + -DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} ) ADD_LIBRARY(gtest STATIC IMPORTED GLOBAL) diff --git a/cmake/external/mkldnn.cmake b/cmake/external/mkldnn.cmake index 25870d9afd..4a14628876 100644 --- a/cmake/external/mkldnn.cmake +++ b/cmake/external/mkldnn.cmake @@ -15,9 +15,11 @@ INCLUDE(ExternalProject) SET(MKLDNN_PROJECT "extern_mkldnn") -SET(MKLDNN_SOURCES_DIR ${THIRD_PARTY_PATH}/mkldnn) +SET(MKLDNN_PREFIX_DIR ${THIRD_PARTY_PATH}/mkldnn) SET(MKLDNN_INSTALL_DIR ${THIRD_PARTY_PATH}/install/mkldnn) SET(MKLDNN_INC_DIR "${MKLDNN_INSTALL_DIR}/include" CACHE PATH "mkldnn include directory." FORCE) +SET(MKLDNN_REPOSITORY https://github.com/intel/mkl-dnn.git) +SET(MKLDNN_TAG aef88b7c233f48f8b945da310f1b973da31ad033) # Introduce variables: # * CMAKE_INSTALL_LIBDIR @@ -49,29 +51,33 @@ ELSE() SET(MKLDNN_CXXFLAG "${CMAKE_CXX_FLAGS} /EHsc") ENDIF(NOT WIN32) +cache_third_party(${MKLDNN_PROJECT} + REPOSITORY ${MKLDNN_REPOSITORY} + TAG ${MKLDNN_TAG}) + ExternalProject_Add( ${MKLDNN_PROJECT} ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} + "${MKLDNN_DOWNLOAD_CMD}" DEPENDS ${MKLDNN_DEPENDS} - GIT_REPOSITORY "https://github.com/intel/mkl-dnn.git" - GIT_TAG "aef88b7c233f48f8b945da310f1b973da31ad033" - PREFIX ${MKLDNN_SOURCES_DIR} + PREFIX ${MKLDNN_PREFIX_DIR} + SOURCE_DIR ${MKLDNN_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - CMAKE_ARGS -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} - CMAKE_ARGS -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} - CMAKE_ARGS -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - CMAKE_ARGS -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} - CMAKE_ARGS -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${MKLDNN_INSTALL_DIR} - CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON - CMAKE_ARGS -DMKLROOT=${MKLML_ROOT} - CMAKE_ARGS -DCMAKE_C_FLAGS=${MKLDNN_CFLAG} - CMAKE_ARGS -DCMAKE_CXX_FLAGS=${MKLDNN_CXXFLAG} - CMAKE_ARGS -DWITH_TEST=OFF -DWITH_EXAMPLE=OFF + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} + -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} + -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} + -DCMAKE_INSTALL_PREFIX=${MKLDNN_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DMKLROOT=${MKLML_ROOT} + -DCMAKE_C_FLAGS=${MKLDNN_CFLAG} + -DCMAKE_CXX_FLAGS=${MKLDNN_CXXFLAG} + -DWITH_TEST=OFF -DWITH_EXAMPLE=OFF CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${MKLDNN_INSTALL_DIR} -DMKLROOT:PATH=${MKLML_ROOT} ) diff --git a/cmake/external/mklml.cmake b/cmake/external/mklml.cmake index d511784d70..456d4d6774 100644 --- a/cmake/external/mklml.cmake +++ b/cmake/external/mklml.cmake @@ -43,24 +43,30 @@ ENDIF() SET(MKLML_PROJECT "extern_mklml") MESSAGE(STATUS "MKLML_VER: ${MKLML_VER}, MKLML_URL: ${MKLML_URL}") -SET(MKLML_SOURCE_DIR "${THIRD_PARTY_PATH}/mklml") -SET(MKLML_DOWNLOAD_DIR "${MKLML_SOURCE_DIR}/src/${MKLML_PROJECT}") +SET(MKLML_PREFIX_DIR "${THIRD_PARTY_PATH}/mklml") + +cache_third_party(${MKLML_PROJECT} + URL ${MKLML_URL} + DIR ${MKLML_PREFIX_DIR}) ExternalProject_Add( ${MKLML_PROJECT} ${EXTERNAL_PROJECT_LOG_ARGS} - PREFIX ${MKLML_SOURCE_DIR} - URL ${MKLML_URL} - DOWNLOAD_DIR ${MKLML_DOWNLOAD_DIR} + "${MKLML_DOWNLOAD_CMD}" + PREFIX ${MKLML_PREFIX_DIR} + DOWNLOAD_DIR ${MKLML_SOURCE_DIR} + SOURCE_DIR ${MKLML_SOURCE_DIR} DOWNLOAD_NO_PROGRESS 1 CONFIGURE_COMMAND "" BUILD_COMMAND "" - UPDATE_COMMAND "" - INSTALL_COMMAND - ${CMAKE_COMMAND} -E copy_directory ${MKLML_DOWNLOAD_DIR}/include ${MKLML_INC_DIR} && - ${CMAKE_COMMAND} -E copy_directory ${MKLML_DOWNLOAD_DIR}/lib ${MKLML_LIB_DIR} + UPDATE_COMMAND "" + INSTALL_COMMAND "" ) +add_custom_command(TARGET ${MKLML_PROJECT} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${MKLML_SOURCE_DIR}/include ${MKLML_INC_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${MKLML_SOURCE_DIR}/lib ${MKLML_LIB_DIR}) + INCLUDE_DIRECTORIES(${MKLML_INC_DIR}) ADD_LIBRARY(mklml SHARED IMPORTED GLOBAL) diff --git a/cmake/external/openblas.cmake b/cmake/external/openblas.cmake index eecaa043fa..95fc6dd478 100644 --- a/cmake/external/openblas.cmake +++ b/cmake/external/openblas.cmake @@ -42,8 +42,8 @@ IF(NOT WIN32) PREFIX ${CBLAS_SOURCES_DIR} INSTALL_DIR ${CBLAS_INSTALL_DIR} BUILD_IN_SOURCE 1 - BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} ${COMMON_ARGS} ${OPTIONAL_ARGS} - INSTALL_COMMAND ${CMAKE_MAKE_PROGRAM} install NO_SHARED=1 NO_LAPACK=1 PREFIX= + BUILD_COMMAND make -j$(nproc) ${COMMON_ARGS} ${OPTIONAL_ARGS} + INSTALL_COMMAND make install NO_SHARED=1 NO_LAPACK=1 PREFIX= && rm -r ${CBLAS_INSTALL_DIR}/lib/cmake ${CBLAS_INSTALL_DIR}/lib/pkgconfig UPDATE_COMMAND "" CONFIGURE_COMMAND "" diff --git a/cmake/external/protobuf.cmake b/cmake/external/protobuf.cmake index f172ebb18e..c6475c1e8d 100644 --- a/cmake/external/protobuf.cmake +++ b/cmake/external/protobuf.cmake @@ -17,10 +17,6 @@ INCLUDE(ExternalProject) IF(NOT WIN32) FIND_PACKAGE(Protobuf QUIET) ENDIF(NOT WIN32) -macro(UNSET_VAR VAR_NAME) - UNSET(${VAR_NAME} CACHE) - UNSET(${VAR_NAME}) -endmacro() UNSET_VAR(PROTOBUF_INCLUDE_DIR) UNSET_VAR(PROTOBUF_FOUND) @@ -160,7 +156,7 @@ endif() FUNCTION(build_protobuf TARGET_NAME BUILD_FOR_HOST) STRING(REPLACE "extern_" "" TARGET_DIR_NAME "${TARGET_NAME}") - SET(PROTOBUF_SOURCES_DIR ${THIRD_PARTY_PATH}/${TARGET_DIR_NAME}) + SET(PROTOBUF_PREFIX_DIR ${THIRD_PARTY_PATH}/${TARGET_DIR_NAME}) SET(PROTOBUF_INSTALL_DIR ${THIRD_PARTY_PATH}/install/${TARGET_DIR_NAME}) SET(${TARGET_NAME}_INCLUDE_DIR "${PROTOBUF_INSTALL_DIR}/include" PARENT_SCOPE) @@ -203,21 +199,26 @@ FUNCTION(build_protobuf TARGET_NAME BUILD_FOR_HOST) "-DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM}") ENDIF() - SET(PROTOBUF_REPO "https://github.com/protocolbuffers/protobuf.git") - SET(PROTOBUF_TAG "9f75c5aa851cd877fb0d93ccc31b8567a6706546") + SET(PROTOBUF_REPOSITORY https://github.com/protocolbuffers/protobuf.git) + SET(PROTOBUF_TAG 9f75c5aa851cd877fb0d93ccc31b8567a6706546) + + cache_third_party(${TARGET_NAME} + REPOSITORY ${PROTOBUF_REPOSITORY} + TAG ${PROTOBUF_TAG} + DIR ${PROTOBUF_PREFIX_DIR}) ExternalProject_Add( ${TARGET_NAME} ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - PREFIX ${PROTOBUF_SOURCES_DIR} + "${PROTOBUF_DOWNLOAD_CMD}" + PREFIX ${PROTOBUF_PREFIX_DIR} + SOURCE_DIR ${PROTOBUF_SOURCE_DIR} UPDATE_COMMAND "" DEPENDS zlib - GIT_REPOSITORY ${PROTOBUF_REPO} - GIT_TAG ${PROTOBUF_TAG} CONFIGURE_COMMAND - ${CMAKE_COMMAND} ${PROTOBUF_SOURCES_DIR}/src/${TARGET_NAME}/cmake - ${OPTIONAL_ARGS} + ${CMAKE_COMMAND} ${PROTOBUF_SOURCE_DIR}/cmake + ${OPTIONAL_ARGS} -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_SKIP_RPATH=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON diff --git a/cmake/external/pybind11.cmake b/cmake/external/pybind11.cmake index a7bf580883..d079e5c99f 100644 --- a/cmake/external/pybind11.cmake +++ b/cmake/external/pybind11.cmake @@ -14,18 +14,26 @@ include(ExternalProject) -set(PYBIND_SOURCE_DIR ${THIRD_PARTY_PATH}/pybind) +set(PYBIND_PREFIX_DIR ${THIRD_PARTY_PATH}/pybind) +SET(PYBIND_REPOSITORY https://github.com/pybind/pybind11.git) +SET(PYBIND_TAG v2.2.4) -include_directories(${PYBIND_SOURCE_DIR}/src/extern_pybind/include) +cache_third_party(extern_pybind + REPOSITORY ${PYBIND_REPOSITORY} + TAG ${PYBIND_TAG} + DIR ${PYBIND_PREFIX_DIR}) + +set(PYBIND_INCLUDE_DIR ${PYBIND_SOURCE_DIR}/include) +include_directories(${PYBIND_INCLUDE_DIR}) ExternalProject_Add( extern_pybind ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/pybind/pybind11.git" - GIT_TAG "v2.2.4" - PREFIX ${PYBIND_SOURCE_DIR} - UPDATE_COMMAND "" + "${PYBIND_DOWNLOAD_CMD}" + PREFIX ${PYBIND_PREFIX_DIR} + SOURCE_DIR ${PYBIND_SOURCE_DIR} + UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" diff --git a/cmake/external/threadpool.cmake b/cmake/external/threadpool.cmake index ebec736084..399eba59b2 100644 --- a/cmake/external/threadpool.cmake +++ b/cmake/external/threadpool.cmake @@ -14,17 +14,26 @@ INCLUDE(ExternalProject) -SET(THREADPOOL_SOURCE_DIR ${THIRD_PARTY_PATH}/threadpool) -SET(THREADPOOL_INCLUDE_DIR ${THREADPOOL_SOURCE_DIR}/src/extern_threadpool) +SET(THREADPOOL_PREFIX_DIR ${THIRD_PARTY_PATH}/threadpool) +set(THREADPOOL_REPOSITORY https://github.com/progschj/ThreadPool.git) +set(THREADPOOL_TAG 9a42ec1329f259a5f4881a291db1dcb8f2ad9040) + INCLUDE_DIRECTORIES(${THREADPOOL_INCLUDE_DIR}) +cache_third_party(extern_threadpool + REPOSITORY ${THREADPOOL_REPOSITORY} + TAG ${THREADPOOL_TAG} + DIR ${THREADPOOL_PREFIX_DIR}) + +include_directories(${THREADPOOL_SOURCE_DIR}) + ExternalProject_Add( extern_threadpool ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/progschj/ThreadPool.git" - GIT_TAG 9a42ec1329f259a5f4881a291db1dcb8f2ad9040 - PREFIX ${THREADPOOL_SOURCE_DIR} + "${THREADPOOL_DOWNLOAD_CMD}" + PREFIX ${THREADPOOL_PREFIX_DIR} + SOURCE_DIR ${THREADPOOL_SOURCE_DIR} UPDATE_COMMAND "" CONFIGURE_COMMAND "" BUILD_COMMAND "" diff --git a/cmake/external/warpctc.cmake b/cmake/external/warpctc.cmake index 7fa517d17f..cfa2501faa 100644 --- a/cmake/external/warpctc.cmake +++ b/cmake/external/warpctc.cmake @@ -14,9 +14,12 @@ INCLUDE(ExternalProject) -SET(WARPCTC_SOURCES_DIR ${THIRD_PARTY_PATH}/warpctc) +SET(WARPCTC_PREFIX_DIR ${THIRD_PARTY_PATH}/warpctc) SET(WARPCTC_INSTALL_DIR ${THIRD_PARTY_PATH}/install/warpctc) +# TODO: Use the official github address instead of private branch +set(WARPCTC_REPOSITORY https://github.com/wopeizl/warp-ctc.git) + SET(WARPCTC_INCLUDE_DIR "${WARPCTC_INSTALL_DIR}/include" CACHE PATH "Warp-ctc Directory" FORCE) # Used in unit test test_WarpCTCLayer @@ -29,15 +32,16 @@ ELSE() SET(USE_OMP ON) ENDIF() -# TODO: Use the official github address instead of private branch -SET(WARPCTC_REPOSITORY "https://github.com/wopeizl/warp-ctc.git") +cache_third_party(extern_warpctc + REPOSITORY ${WARPCTC_REPOSITORY}) ExternalProject_Add( extern_warpctc ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY ${WARPCTC_REPOSITORY} - PREFIX ${WARPCTC_SOURCES_DIR} + "${WARPCTC_DOWNLOAD_CMD}" + PREFIX ${WARPCTC_PREFIX_DIR} + SOURCE_DIR ${WARPCTC_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} diff --git a/cmake/external/xxhash.cmake b/cmake/external/xxhash.cmake index 07b19f8eaa..27726dbd49 100644 --- a/cmake/external/xxhash.cmake +++ b/cmake/external/xxhash.cmake @@ -14,17 +14,24 @@ INCLUDE(ExternalProject) -set(XXHASH_SOURCE_DIR ${THIRD_PARTY_PATH}/xxhash) +set(XXHASH_PREFIX_DIR ${THIRD_PARTY_PATH}/xxhash) set(XXHASH_INSTALL_DIR ${THIRD_PARTY_PATH}/install/xxhash) set(XXHASH_INCLUDE_DIR "${XXHASH_INSTALL_DIR}/include") +set(XXHASH_REPOSITORY https://github.com/Cyan4973/xxHash) +set(XXHASH_TAG v0.6.5) + +cache_third_party(extern_xxhash + REPOSITORY ${XXHASH_REPOSITORY} + TAG ${XXHASH_TAG} + DIR ${XXHASH_PREFIX_DIR}) IF(WITH_STATIC_LIB) SET(BUILD_CMD make lib) ELSE() IF(APPLE) - SET(BUILD_CMD sed -i \"\" "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" ${XXHASH_SOURCE_DIR}/src/extern_xxhash/Makefile && make lib) + SET(BUILD_CMD sed -i \"\" "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" ${XXHASH_SOURCE_DIR}/Makefile && make lib) ELSE(APPLE) - SET(BUILD_CMD sed -i "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" ${XXHASH_SOURCE_DIR}/src/extern_xxhash/Makefile && make lib) + SET(BUILD_CMD sed -i "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" ${XXHASH_SOURCE_DIR}/Makefile && make lib) ENDIF(APPLE) ENDIF() @@ -33,15 +40,13 @@ if(WIN32) extern_xxhash ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/Cyan4973/xxHash" - GIT_TAG "v0.6.5" - PREFIX ${XXHASH_SOURCE_DIR} - DOWNLOAD_NAME "xxhash" - UPDATE_COMMAND "" - BUILD_IN_SOURCE 1 - PATCH_COMMAND + "${XXHASH_DOWNLOAD_CMD}" + PREFIX ${XXHASH_PREFIX_DIR} + SOURCE_DIR ${XXHASH_SOURCE_DIR} + UPDATE_COMMAND "" + PATCH_COMMAND "" CONFIGURE_COMMAND - ${CMAKE_COMMAND} ${XXHASH_SOURCE_DIR}/src/extern_xxhash/cmake_unofficial + ${CMAKE_COMMAND} ${XXHASH_SOURCE_DIR}/cmake_unofficial -DCMAKE_INSTALL_PREFIX:PATH=${XXHASH_INSTALL_DIR} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF @@ -57,16 +62,14 @@ else() ExternalProject_Add( extern_xxhash ${EXTERNAL_PROJECT_LOG_ARGS} - GIT_REPOSITORY "https://github.com/Cyan4973/xxHash" - GIT_TAG "v0.6.5" - PREFIX ${XXHASH_SOURCE_DIR} - DOWNLOAD_NAME "xxhash" - UPDATE_COMMAND "" + "${XXHASH_DOWNLOAD_CMD}" + PREFIX ${XXHASH_PREFIX_DIR} + SOURCE_DIR ${XXHASH_SOURCE_DIR} + UPDATE_COMMAND "" CONFIGURE_COMMAND "" - BUILD_IN_SOURCE 1 - PATCH_COMMAND + BUILD_IN_SOURCE 1 BUILD_COMMAND ${BUILD_CMD} - INSTALL_COMMAND export PREFIX=${XXHASH_INSTALL_DIR}/ && make install + INSTALL_COMMAND make PREFIX=${XXHASH_INSTALL_DIR} install TEST_COMMAND "" ) endif() diff --git a/cmake/external/zlib.cmake b/cmake/external/zlib.cmake index 52d481705d..ba7fe845aa 100644 --- a/cmake/external/zlib.cmake +++ b/cmake/external/zlib.cmake @@ -14,21 +14,27 @@ INCLUDE(ExternalProject) -SET(ZLIB_SOURCES_DIR ${THIRD_PARTY_PATH}/zlib) +SET(ZLIB_PREFIX_DIR ${THIRD_PARTY_PATH}/zlib) SET(ZLIB_INSTALL_DIR ${THIRD_PARTY_PATH}/install/zlib) SET(ZLIB_ROOT ${ZLIB_INSTALL_DIR} CACHE FILEPATH "zlib root directory." FORCE) SET(ZLIB_INCLUDE_DIR "${ZLIB_INSTALL_DIR}/include" CACHE PATH "zlib include directory." FORCE) +set(ZLIB_REPOSITORY https://github.com/madler/zlib.git) +set(ZLIB_TAG v1.2.8) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) # For zlib code to include its own headers. INCLUDE_DIRECTORIES(${THIRD_PARTY_PATH}/install) # For Paddle code to include zlib.h. +cache_third_party(extern_zlib + REPOSITORY ${ZLIB_REPOSITORY} + TAG ${ZLIB_TAG}) + ExternalProject_Add( extern_zlib ${EXTERNAL_PROJECT_LOG_ARGS} ${SHALLOW_CLONE} - GIT_REPOSITORY "https://github.com/madler/zlib.git" - GIT_TAG "v1.2.8" - PREFIX ${ZLIB_SOURCES_DIR} + "${ZLIB_DOWNLOAD_CMD}" + PREFIX ${ZLIB_PREFIX_DIR} + SOURCE_DIR ${ZLIB_SOURCE_DIR} UPDATE_COMMAND "" CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} diff --git a/cmake/third_party.cmake b/cmake/third_party.cmake index 5546e94185..7b9d9ad891 100644 --- a/cmake/third_party.cmake +++ b/cmake/third_party.cmake @@ -12,13 +12,96 @@ # See the License for the specific language governing permissions and # limitations under the License. -# compile third party for fluid on both windows/linux/mac +# Creat a target named "third_party", which can compile external dependencies on all platform(windows/linux/mac) -set(THIRD_PARTY_PATH "${CMAKE_BINARY_DIR}/third_party" CACHE STRING - "A path setting third party libraries download & build directories.") +set(THIRD_PARTY_PATH "${CMAKE_BINARY_DIR}/third_party" CACHE STRING + "A path setting third party libraries download & build directories.") + +set(THIRD_PARTY_CACHE_PATH "${CMAKE_SOURCE_DIR}" CACHE STRING + "A path cache third party source code to avoid repeated download.") set(THIRD_PARTY_BUILD_TYPE Release) +# cache funciton to avoid repeat download code of third_party. +# This function has 4 parameters, URL/REPOSITOR/TAG/DIR: +# 1. URL: specify download url of 3rd party +# 2. REPOSITORY and TAG: specify git REPOSITORY and tag/branch/commitID of 3rd party +# 3. DIR(optional): Unify the source dir in cached and uncached mode to "${TARGET}_SOURCE_DIR". +# +# The function Return 2 PARENT_SCOPE variables: +# 1. ${TARGET}_DOWNLOAD_DIR: Simply place "${TARGET}_DOWNLOAD_DIR" in ExternalProject_Add, +# and you no longer need to set any donwnload steps in ExternalProject_Add. +# 2. ${TARGET}_SOURCE_DIR: Value of argument: SOURCE_DIR of ExternalProject_Add. +# For example: +# Cache_third_party (${TARGET} +# REPOSITORY ${TARGET_REPOSITORY} +# TAG ${TARGET_TAG}) +FUNCTION(cache_third_party TARGET) + SET(options "") + SET(oneValueArgs URL REPOSITORY TAG DIR) + SET(multiValueArgs "") + cmake_parse_arguments(cache_third_party "${optionps}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + STRING(REPLACE "extern_" "" TARGET_NAME ${TARGET}) + STRING(REGEX REPLACE "[0-9]+" "" TARGET_NAME ${TARGET_NAME}) + STRING(TOUPPER ${TARGET_NAME} TARGET_NAME) + IF(cache_third_party_REPOSITORY) + SET(${TARGET_NAME}_DOWNLOAD_CMD + GIT_REPOSITORY ${cache_third_party_REPOSITORY}) + IF(cache_third_party_TAG) + LIST(APPEND ${TARGET_NAME}_DOWNLOAD_CMD + GIT_TAG ${cache_third_party_TAG}) + ENDIF() + ELSEIF(cache_third_party_URL) + SET(${TARGET_NAME}_DOWNLOAD_CMD + URL ${cache_third_party_URL}) + ELSE() + MESSAGE(FATAL_ERROR "Download link (Git repo or URL) must be specified for cache!") + ENDIF() + IF(NOT WITH_TP_CACHE) + # The uniform argument "{TAGGET}_SOURCE_DIR" must exists for these targets even if not cache + SET(LISTS xxhash protobuf boost mklml cub dlpack eigen pybind threadpool) + FOREACH(tmp ${LISTS}) + IF(${TARGET} MATCHES ${tmp} AND cache_third_party_DIR) + SET(${TARGET_NAME}_SOURCE_DIR "${cache_third_party_DIR}/src/${TARGET}") + ENDIF() + ENDFOREACH() + ELSE() + # Generate and verify cache dir for third_party source code + SET(cache_third_party_REPOSITORY ${cache_third_party_REPOSITORY} ${cache_third_party_URL}) + IF(cache_third_party_REPOSITORY AND cache_third_party_TAG) + STRING(MD5 HASH_REPO ${cache_third_party_REPOSITORY}) + STRING(MD5 HASH_GIT ${cache_third_party_TAG}) + STRING(SUBSTRING ${HASH_REPO} 0 8 HASH_REPO) + STRING(SUBSTRING ${HASH_GIT} 0 8 HASH_GIT) + STRING(CONCAT HASH ${HASH_REPO} ${HASH_GIT}) + SET(${TARGET_NAME}_SOURCE_DIR ${THIRD_PARTY_CACHE_PATH}/third_party/${TARGET}_${HASH}) + ELSEIF(cache_third_party_REPOSITORY) + STRING(MD5 HASH_REPO ${cache_third_party_REPOSITORY}) + STRING(SUBSTRING ${HASH_REPO} 0 16 HASH) + SET(${TARGET_NAME}_SOURCE_DIR ${THIRD_PARTY_CACHE_PATH}/third_party/${TARGET}_${HASH}) + ENDIF() + + IF(EXISTS ${${TARGET_NAME}_SOURCE_DIR}) + # judge whether the cache dir is empty + FILE(GLOB files ${${TARGET_NAME}_SOURCE_DIR}/*) + LIST(LENGTH files files_len) + IF(files_len GREATER 0) + list(APPEND ${TARGET_NAME}_DOWNLOAD_CMD DOWNLOAD_COMMAND "") + ENDIF() + ENDIF() + ENDIF() + + # Pass the variable to parent scope, the double quotation marks can't be removed + SET(${TARGET_NAME}_SOURCE_DIR "${${TARGET_NAME}_SOURCE_DIR}" PARENT_SCOPE) + SET(${TARGET_NAME}_DOWNLOAD_CMD "${${TARGET_NAME}_DOWNLOAD_CMD}" PARENT_SCOPE) +ENDFUNCTION() + +MACRO(UNSET_VAR VAR_NAME) + UNSET(${VAR_NAME} CACHE) + UNSET(${VAR_NAME}) +ENDMACRO() + # Correction of flags on different Platform(WIN/MAC) and Print Warning Message if (APPLE) if(WITH_MKL) -- GitLab