From 2ae66df6020b37d5505a008d6e0450ea30d055ff Mon Sep 17 00:00:00 2001 From: Damien Nguyen Date: Thu, 27 Jan 2022 17:20:23 +0100 Subject: [PATCH] Add TARGET_ALIAS to mindspore_add_pkg --- cmake/external_libs/absl.cmake | 38 +- cmake/external_libs/c-ares.cmake | 30 +- cmake/external_libs/cppjieba.cmake | 24 +- cmake/external_libs/eigen.cmake | 19 +- cmake/external_libs/flatbuffers.cmake | 196 +++--- cmake/external_libs/glog.cmake | 69 +- cmake/external_libs/grpc.cmake | 158 ++--- cmake/external_libs/gtest.cmake | 106 +-- cmake/external_libs/icu4c.cmake | 79 +-- cmake/external_libs/jpeg_turbo.cmake | 74 +- cmake/external_libs/json.cmake | 35 +- cmake/external_libs/libevent.cmake | 34 +- cmake/external_libs/mkl_dnn.cmake | 68 +- cmake/external_libs/nccl.cmake | 28 +- cmake/external_libs/ompi.cmake | 26 +- cmake/external_libs/opencv.cmake | 196 +++--- cmake/external_libs/openssl.cmake | 8 +- cmake/external_libs/protobuf.cmake | 258 +++---- cmake/external_libs/pybind11.cmake | 80 +-- cmake/external_libs/re2.cmake | 26 +- cmake/external_libs/sentencepiece.cmake | 68 +- cmake/external_libs/sqlite.cmake | 54 +- cmake/external_libs/tinyxml2.cmake | 26 +- cmake/external_libs/zlib.cmake | 23 +- cmake/utils.cmake | 876 +++++++++++++++--------- 25 files changed, 1375 insertions(+), 1224 deletions(-) diff --git a/cmake/external_libs/absl.cmake b/cmake/external_libs/absl.cmake index 575afd71cd5..04d938b4d57 100644 --- a/cmake/external_libs/absl.cmake +++ b/cmake/external_libs/absl.cmake @@ -1,30 +1,26 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/abseil-cpp/repository/archive/20200923.3.tar.gz") - set(MD5 "daba6e99c7a84e2242a0107bbd873669") + set(REQ_URL "https://gitee.com/mirrors/abseil-cpp/repository/archive/20200923.3.tar.gz") + set(MD5 "daba6e99c7a84e2242a0107bbd873669") else() - set(REQ_URL "https://github.com/abseil/abseil-cpp/archive/20200923.3.tar.gz") - set(MD5 "daba6e99c7a84e2242a0107bbd873669") + set(REQ_URL "https://github.com/abseil/abseil-cpp/archive/20200923.3.tar.gz") + set(MD5 "daba6e99c7a84e2242a0107bbd873669") endif() if(NOT ENABLE_GLIBCXX) - set(absl_CXXFLAGS "${absl_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + set(absl_CXXFLAGS "${absl_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") endif() -mindspore_add_pkg(absl - VER 20200923.3 - LIBS absl_strings absl_throw_delegate absl_raw_logging_internal absl_int128 absl_bad_optional_access - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION - -DCMAKE_BUILD_TYPE:STRING=Release - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE - -DCMAKE_CXX_STANDARD=11 - ) +mindspore_add_pkg( + absl + VER 20200923.3 + LIBS absl_strings absl_throw_delegate absl_raw_logging_internal absl_int128 absl_bad_optional_access + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE -DCMAKE_CXX_STANDARD=11 + TARGET_ALIAS mindspore::absl_strings absl::absl_strings + TARGET_ALIAS mindspore::absl_throw_delegate absl::absl_throw_delegate + TARGET_ALIAS mindspore::absl_raw_logging_internal absl::absl_raw_logging_internal + TARGET_ALIAS mindspore::absl_int128 absl::absl_int128 + TARGET_ALIAS mindspore::absl_bad_optional_access absl::absl_bad_optional_access) include_directories(${absl_INC}) - -add_library(mindspore::absl_strings ALIAS absl::absl_strings) -add_library(mindspore::absl_throw_delegate ALIAS absl::absl_throw_delegate) -add_library(mindspore::absl_raw_logging_internal ALIAS absl::absl_raw_logging_internal) -add_library(mindspore::absl_int128 ALIAS absl::absl_int128) -add_library(mindspore::absl_bad_optional_access ALIAS absl::absl_bad_optional_access) diff --git a/cmake/external_libs/c-ares.cmake b/cmake/external_libs/c-ares.cmake index 4649b928b66..cd21d643d92 100644 --- a/cmake/external_libs/c-ares.cmake +++ b/cmake/external_libs/c-ares.cmake @@ -1,22 +1,20 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/c-ares/repository/archive/cares-1_15_0.tar.gz") - set(MD5 "459876e53724a2c87ed2876312b96aed") + set(REQ_URL "https://gitee.com/mirrors/c-ares/repository/archive/cares-1_15_0.tar.gz") + set(MD5 "459876e53724a2c87ed2876312b96aed") else() - set(REQ_URL "https://github.com/c-ares/c-ares/releases/download/cares-1_15_0/c-ares-1.15.0.tar.gz") - set(MD5 "d2391da274653f7643270623e822dff7") + set(REQ_URL "https://github.com/c-ares/c-ares/releases/download/cares-1_15_0/c-ares-1.15.0.tar.gz") + set(MD5 "d2391da274653f7643270623e822dff7") endif() -mindspore_add_pkg(c-ares - VER 1.15.0 - LIBS cares - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release - -DCARES_SHARED:BOOL=OFF - -DCARES_STATIC:BOOL=ON - -DCARES_STATIC_PIC:BOOL=ON - -DHAVE_LIBNSL:BOOL=OFF - PATCHES ${TOP_DIR}/third_party/patch/c-ares/CVE-2021-3672.patch) +mindspore_add_pkg( + c-ares + VER 1.15.0 + LIBS cares + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DCARES_SHARED:BOOL=OFF -DCARES_STATIC:BOOL=ON + -DCARES_STATIC_PIC:BOOL=ON -DHAVE_LIBNSL:BOOL=OFF + PATCHES ${TOP_DIR}/third_party/patch/c-ares/CVE-2021-3672.patch + TARGET_ALIAS mindspore::cares c-ares::cares) include_directories(${c-ares_INC}) -add_library(mindspore::cares ALIAS c-ares::cares) diff --git a/cmake/external_libs/cppjieba.cmake b/cmake/external_libs/cppjieba.cmake index 1cdc84ed17e..a7d2b973ef3 100644 --- a/cmake/external_libs/cppjieba.cmake +++ b/cmake/external_libs/cppjieba.cmake @@ -2,20 +2,20 @@ set(cppjieba_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(cppjieba_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/cppjieba/repository/archive/v5.0.3.tar.gz") - set(MD5 "06fcc22b4db6c332dc1b0bd353bdf6f2") + set(REQ_URL "https://gitee.com/mirrors/cppjieba/repository/archive/v5.0.3.tar.gz") + set(MD5 "06fcc22b4db6c332dc1b0bd353bdf6f2") else() - set(REQ_URL "https://github.com/yanyiwu/cppjieba/archive/v5.0.3.tar.gz") - set(MD5 "b8b3f7a73032c9ce9daafa4f67196c8c") + set(REQ_URL "https://github.com/yanyiwu/cppjieba/archive/v5.0.3.tar.gz") + set(MD5 "b8b3f7a73032c9ce9daafa4f67196c8c") endif() -mindspore_add_pkg(cppjieba - VER 5.0.3 - HEAD_ONLY ./ - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${TOP_DIR}/third_party/patch/cppjieba/cppjieba.patch001) +mindspore_add_pkg( + cppjieba + VER 5.0.3 + HEAD_ONLY ./ + URL ${REQ_URL} + MD5 ${MD5} + PATCHES ${TOP_DIR}/third_party/patch/cppjieba/cppjieba.patch001 + TARGET_ALIAS mindspore::cppjieba cppjieba) include_directories(${cppjieba_INC}include) include_directories(${cppjieba_INC}deps) -add_library(mindspore::cppjieba ALIAS cppjieba) - diff --git a/cmake/external_libs/eigen.cmake b/cmake/external_libs/eigen.cmake index f8d4110379d..72ce651e01b 100644 --- a/cmake/external_libs/eigen.cmake +++ b/cmake/external_libs/eigen.cmake @@ -1,18 +1,19 @@ set(Eigen3_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(Eigen3_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") - set(REQ_URL "https://gitlab.com/libeigen/eigen/-/archive/3.3.9/eigen-3.3.9.tar.gz") set(MD5 "609286804b0f79be622ccf7f9ff2b660") - -mindspore_add_pkg(Eigen3 - VER 3.3.9 - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DBUILD_TESTING=OFF) -find_package(Eigen3 3.3.9 REQUIRED ${MS_FIND_NO_DEFAULT_PATH}) +mindspore_add_pkg( + Eigen3 + VER 3.3.9 + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DBUILD_TESTING=OFF + TARGET_ALIAS mindspore::eigen Eigen3::Eigen) +if(NOT TARGET Eigen3::Eigen) + message(FATAL_ERROR "Failed to find Eigen3::Eigen") +endif() include_directories(${Eigen3_INC}) include_directories(${EIGEN3_INCLUDE_DIR}) set_property(TARGET Eigen3::Eigen PROPERTY IMPORTED_GLOBAL TRUE) -add_library(mindspore::eigen ALIAS Eigen3::Eigen) diff --git a/cmake/external_libs/flatbuffers.cmake b/cmake/external_libs/flatbuffers.cmake index 15893c1b49d..13d4d9822e3 100644 --- a/cmake/external_libs/flatbuffers.cmake +++ b/cmake/external_libs/flatbuffers.cmake @@ -1,134 +1,120 @@ if(MSVC) - set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") - set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}") - set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") + set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}") + set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") else() - set(flatbuffers_CXXFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") - set(flatbuffers_CFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") + set(flatbuffers_CXXFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") + set(flatbuffers_CFLAGS "-fPIC -fPIE -D_FORTIFY_SOURCE=2 -O2 -fstack-protector-strong") endif() if(WIN32) - set(flatbuffers_USE_STATIC_LIBS ON) + set(flatbuffers_USE_STATIC_LIBS ON) endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/flatbuffers/repository/archive/v2.0.0.tar.gz") - set(MD5 "5c23d17c0486b81d4c11907e8f7bf36b") + set(REQ_URL "https://gitee.com/mirrors/flatbuffers/repository/archive/v2.0.0.tar.gz") + set(MD5 "5c23d17c0486b81d4c11907e8f7bf36b") else() - set(REQ_URL "https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz") - set(MD5 "a27992324c3cbf86dd888268a23d17bd") + set(REQ_URL "https://github.com/google/flatbuffers/archive/v2.0.0.tar.gz") + set(MD5 "a27992324c3cbf86dd888268a23d17bd") endif() if(APPLE) - set(flatbuffers_CXXFLAGS "${flatbuffers_CXXFLAGS} -Wno-deprecated") + set(flatbuffers_CXXFLAGS "${flatbuffers_CXXFLAGS} -Wno-deprecated") endif() + if(APPLE) - mindspore_add_pkg(flatbuffers - VER 2.0.0 - LIBS flatbuffers - EXE flatc - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib) + set(CMAKE_OPTION -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib) else() - mindspore_add_pkg(flatbuffers - VER 2.0.0 - LIBS flatbuffers - EXE flatc - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_C_COMPILER=${FLATC_GCC_COMPILER} -DCMAKE_CXX_COMPILER=${FLATC_GXX_COMPILER} - -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release) + set(CMAKE_OPTION -DCMAKE_C_COMPILER=${FLATC_GCC_COMPILER} -DCMAKE_CXX_COMPILER=${FLATC_GXX_COMPILER} + -DFLATBUFFERS_BUILD_TESTS=OFF -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release) endif() +mindspore_add_pkg( + flatbuffers + VER 2.0.0 + LIBS flatbuffers + EXE flatc + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION ${CMAKE_OPTION} + TARGET_ALIAS mindspore::flatbuffers flatbuffers::flatbuffers + TARGET_ALIAS mindspore::flatc flatbuffers::flatc) + include_directories(${flatbuffers_INC}) -add_library(mindspore::flatbuffers ALIAS flatbuffers::flatbuffers) -add_executable(mindspore::flatc ALIAS flatbuffers::flatc) -function(ms_build_flatbuffers source_schema_files - source_schema_dirs - custom_target_name - generated_output_dir) - set(total_schema_dirs "") - set(total_generated_files "") - set(FLATC mindspore::flatc) - foreach(schema_dir ${source_schema_dirs}) - set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs}) - endforeach() - - foreach(schema IN LISTS ${source_schema_files}) - get_filename_component(filename ${schema} NAME_WE) - if(NOT ${generated_output_dir} STREQUAL "") - set(generated_file ${generated_output_dir}/${filename}_generated.h) - add_custom_command( - OUTPUT ${generated_file} - COMMAND ${FLATC} --gen-mutable - --reflect-names --gen-object-api -o ${generated_output_dir} - ${total_schema_dirs} - -c -b --reflect-types ${schema} - DEPENDS ${FLATC} ${schema} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM) - list(APPEND total_generated_files ${generated_file}) - endif() - endforeach() - - add_custom_target(${custom_target_name} ALL - DEPENDS ${total_generated_files}) +function(ms_build_flatbuffers source_schema_files source_schema_dirs custom_target_name generated_output_dir) + set(total_schema_dirs "") + set(total_generated_files "") + set(FLATC mindspore::flatc) + foreach(schema_dir ${source_schema_dirs}) + set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs}) + endforeach() + foreach(schema IN LISTS ${source_schema_files}) + get_filename_component(filename ${schema} NAME_WE) if(NOT ${generated_output_dir} STREQUAL "") - include_directories(${generated_output_dir}) - set_property(TARGET ${custom_target_name} - PROPERTY GENERATED_OUTPUT_DIR - ${generated_output_dir}) + set(generated_file ${generated_output_dir}/${filename}_generated.h) + add_custom_command( + OUTPUT ${generated_file} + COMMAND ${FLATC} --gen-mutable --reflect-names --gen-object-api -o ${generated_output_dir} ${total_schema_dirs} + -c -b --reflect-types ${schema} + DEPENDS ${FLATC} ${schema} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Running C++ flatbuffers compiler on ${schema}" + VERBATIM) + list(APPEND total_generated_files ${generated_file}) endif() + endforeach() + + add_custom_target(${custom_target_name} ALL DEPENDS ${total_generated_files}) + + if(NOT ${generated_output_dir} STREQUAL "") + include_directories(${generated_output_dir}) + set_property(TARGET ${custom_target_name} PROPERTY GENERATED_OUTPUT_DIR ${generated_output_dir}) + endif() endfunction() -function(ms_build_flatbuffers_lite - source_schema_files source_schema_dirs custom_target_name generated_output_dir if_inner) +function(ms_build_flatbuffers_lite source_schema_files source_schema_dirs custom_target_name generated_output_dir + if_inner) - set(total_schema_dirs "") - set(total_generated_files "") - set(FLATC mindspore::flatc) - foreach(schema_dir ${source_schema_dirs}) - set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs}) - endforeach() - - foreach(schema IN LISTS ${source_schema_files}) - get_filename_component(filename ${schema} NAME_WE) - if(NOT ${generated_output_dir} STREQUAL "") - set(generated_file ${generated_output_dir}/${filename}_generated.h) - if(if_inner MATCHES "inner") - add_custom_command( - OUTPUT ${generated_file} - COMMAND ${FLATC} --gen-mutable - --reflect-names --gen-object-api -o ${generated_output_dir} - ${total_schema_dirs} - -c -b --reflect-types ${schema} - DEPENDS ${FLATC} ${schema} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM) - else() - add_custom_command( - OUTPUT ${generated_file} - COMMAND ${FLATC} -o ${generated_output_dir} - ${total_schema_dirs} - -c -b ${schema} - DEPENDS ${FLATC} ${schema} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" - COMMENT "Running C++ flatbuffers compiler on ${schema}" VERBATIM) - endif() - list(APPEND total_generated_files ${generated_file}) - endif() - endforeach() - - add_custom_target(${custom_target_name} ALL - DEPENDS ${total_generated_files}) + set(total_schema_dirs "") + set(total_generated_files "") + set(FLATC mindspore::flatc) + foreach(schema_dir ${source_schema_dirs}) + set(total_schema_dirs -I ${schema_dir} ${total_schema_dirs}) + endforeach() + foreach(schema IN LISTS ${source_schema_files}) + get_filename_component(filename ${schema} NAME_WE) if(NOT ${generated_output_dir} STREQUAL "") - include_directories(${generated_output_dir}) - set_property(TARGET ${custom_target_name} - PROPERTY GENERATED_OUTPUT_DIR - ${generated_output_dir}) + set(generated_file ${generated_output_dir}/${filename}_generated.h) + if(if_inner MATCHES "inner") + add_custom_command( + OUTPUT ${generated_file} + COMMAND ${FLATC} --gen-mutable --reflect-names --gen-object-api -o ${generated_output_dir} + ${total_schema_dirs} -c -b --reflect-types ${schema} + DEPENDS ${FLATC} ${schema} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Running C++ flatbuffers compiler on ${schema}" + VERBATIM) + else() + add_custom_command( + OUTPUT ${generated_file} + COMMAND ${FLATC} -o ${generated_output_dir} ${total_schema_dirs} -c -b ${schema} + DEPENDS ${FLATC} ${schema} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + COMMENT "Running C++ flatbuffers compiler on ${schema}" + VERBATIM) + endif() + list(APPEND total_generated_files ${generated_file}) endif() + endforeach() + + add_custom_target(${custom_target_name} ALL DEPENDS ${total_generated_files}) + + if(NOT ${generated_output_dir} STREQUAL "") + include_directories(${generated_output_dir}) + set_property(TARGET ${custom_target_name} PROPERTY GENERATED_OUTPUT_DIR ${generated_output_dir}) + endif() endfunction() diff --git a/cmake/external_libs/glog.cmake b/cmake/external_libs/glog.cmake index cc019bf71a1..7541f09aec5 100644 --- a/cmake/external_libs/glog.cmake +++ b/cmake/external_libs/glog.cmake @@ -1,52 +1,51 @@ if(BUILD_LITE) - if(MSVC) - set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") - set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}") - set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - else() - set(glog_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_CXX_FLAGS} -Dgoogle=mindspore_private") - set(glog_CFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_C_FLAGS}") - set(glog_LDFLAGS "${SECURE_SHARED_LINKER_FLAGS}") - endif() - set(glog_patch "") - set(glog_lib glog) -else() + if(MSVC) + set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") + set(flatbuffers_CFLAGS "${CMAKE_C_FLAGS}") + set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + else() set(glog_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_CXX_FLAGS} -Dgoogle=mindspore_private") - set(glog_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") - set(glog_patch ${CMAKE_SOURCE_DIR}/third_party/patch/glog/glog.patch001) - set(glog_lib mindspore_glog) + set(glog_CFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_C_FLAGS}") + set(glog_LDFLAGS "${SECURE_SHARED_LINKER_FLAGS}") + endif() + set(glog_patch "") + set(glog_lib glog) +else() + set(glog_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 ${SECURE_CXX_FLAGS} -Dgoogle=mindspore_private") + set(glog_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") + set(glog_patch ${CMAKE_SOURCE_DIR}/third_party/patch/glog/glog.patch001) + set(glog_lib mindspore_glog) endif() if(NOT ENABLE_GLIBCXX) - set(glog_CXXFLAGS "${glog_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + set(glog_CXXFLAGS "${glog_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/glog/repository/archive/v0.4.0.tar.gz") - set(MD5 "9a7598a00c569a11ff1a419076de4ed7") + set(REQ_URL "https://gitee.com/mirrors/glog/repository/archive/v0.4.0.tar.gz") + set(MD5 "9a7598a00c569a11ff1a419076de4ed7") else() - set(REQ_URL "https://github.com/google/glog/archive/v0.4.0.tar.gz") - set(MD5 "0daea8785e6df922d7887755c3d100d0") + set(REQ_URL "https://github.com/google/glog/archive/v0.4.0.tar.gz") + set(MD5 "0daea8785e6df922d7887755c3d100d0") endif() set(glog_option -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DWITH_GFLAGS=OFF - -DCMAKE_BUILD_TYPE=Release) + -DCMAKE_BUILD_TYPE=Release) if(WIN32 AND NOT MSVC) - execute_process(COMMAND "${CMAKE_C_COMPILER}" -dumpmachine - OUTPUT_VARIABLE i686_or_x86_64 - ) - if(i686_or_x86_64 MATCHES "^i686-") - set(glog_option ${glog_option} -DHAVE_DBGHELP=ON) - endif() + execute_process(COMMAND "${CMAKE_C_COMPILER}" -dumpmachine OUTPUT_VARIABLE i686_or_x86_64) + if(i686_or_x86_64 MATCHES "^i686-") + set(glog_option ${glog_option} -DHAVE_DBGHELP=ON) + endif() endif() -mindspore_add_pkg(glog - VER 0.4.0 - LIBS ${glog_lib} - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${glog_patch} - CMAKE_OPTION ${glog_option}) +mindspore_add_pkg( + glog + VER 0.4.0 + LIBS ${glog_lib} + URL ${REQ_URL} + MD5 ${MD5} + PATCHES ${glog_patch} + CMAKE_OPTION ${glog_option} + TARGET_ALIAS mindspore::glog glog::${glog_lib}) include_directories(${glog_INC}) -add_library(mindspore::glog ALIAS glog::${glog_lib}) diff --git a/cmake/external_libs/grpc.cmake b/cmake/external_libs/grpc.cmake index be8c7c79e82..e0074b1431b 100644 --- a/cmake/external_libs/grpc.cmake +++ b/cmake/external_libs/grpc.cmake @@ -1,87 +1,87 @@ set(grpc_USE_STATIC_LIBS OFF) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(grpc_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2 \ + set(grpc_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 -O2 \ -Dgrpc=mindspore_grpc -Dgrpc_impl=mindspore_grpc_impl -Dgrpc_core=mindspore_grpc_core") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") else() - set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2 \ + set(grpc_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2 \ -Dgrpc=mindspore_grpc -Dgrpc_impl=mindspore_grpc_impl -Dgrpc_core=mindspore_grpc_core") - if(NOT ENABLE_GLIBCXX) - set(grpc_CXXFLAGS "${grpc_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") - endif() + if(NOT ENABLE_GLIBCXX) + set(grpc_CXXFLAGS "${grpc_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + endif() endif() if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(grpc_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") + set(grpc_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") endif() if(EXISTS ${protobuf_ROOT}/lib64) - set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib64/cmake/protobuf") + set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib64/cmake/protobuf") else() - set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib/cmake/protobuf") + set(_FINDPACKAGE_PROTOBUF_CONFIG_DIR "${protobuf_ROOT}/lib/cmake/protobuf") endif() message("grpc using Protobuf_DIR : " ${_FINDPACKAGE_PROTOBUF_CONFIG_DIR}) if(EXISTS ${absl_ROOT}/lib64) - set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib64/cmake/absl") + set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib64/cmake/absl") else() - set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib/cmake/absl") + set(_FINDPACKAGE_ABSL_CONFIG_DIR "${absl_ROOT}/lib/cmake/absl") endif() message("grpc using absl_DIR : " ${_FINDPACKAGE_ABSL_CONFIG_DIR}) if(EXISTS ${re2_ROOT}/lib64) - set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib64/cmake/re2") + set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib64/cmake/re2") else() - set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib/cmake/re2") + set(_FINDPACKAGE_RE2_CONFIG_DIR "${re2_ROOT}/lib/cmake/re2") endif() message("grpc using re2_DIR : " ${_FINDPACKAGE_RE2_CONFIG_DIR}) if(EXISTS ${openssl_ROOT}) - set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT}") + set(_CMAKE_ARGS_OPENSSL_ROOT_DIR "-DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT}") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/grpc/repository/archive/v1.36.1.tar.gz") - set(MD5 "71252ebcd8e9e32a818a907dfd4b63cc") + set(REQ_URL "https://gitee.com/mirrors/grpc/repository/archive/v1.36.1.tar.gz") + set(MD5 "71252ebcd8e9e32a818a907dfd4b63cc") else() - set(REQ_URL "https://github.com/grpc/grpc/archive/v1.36.1.tar.gz") - set(MD5 "90c93203e95e89af5f46738588217057") + set(REQ_URL "https://github.com/grpc/grpc/archive/v1.36.1.tar.gz") + set(MD5 "90c93203e95e89af5f46738588217057") endif() -mindspore_add_pkg(grpc - VER 1.36.1 - LIBS mindspore_grpc++ mindspore_grpc mindspore_gpr mindspore_upb mindspore_address_sorting - EXE grpc_cpp_plugin - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${TOP_DIR}/third_party/patch/grpc/grpc.patch001 - CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release - -DBUILD_SHARED_LIBS=ON - -DgRPC_INSTALL:BOOL=ON - -DgRPC_BUILD_TESTS:BOOL=OFF - -DgRPC_PROTOBUF_PROVIDER:STRING=package - -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG - -DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR} - -DgRPC_ZLIB_PROVIDER:STRING=package - -DZLIB_ROOT:PATH=${zlib_ROOT} - -DgRPC_ABSL_PROVIDER:STRING=package - -Dabsl_DIR:PATH=${_FINDPACKAGE_ABSL_CONFIG_DIR} - -DgRPC_CARES_PROVIDER:STRING=package - -Dc-ares_DIR:PATH=${c-ares_ROOT}/lib/cmake/c-ares - -DgRPC_SSL_PROVIDER:STRING=package - ${_CMAKE_ARGS_OPENSSL_ROOT_DIR} - -DgRPC_RE2_PROVIDER:STRING=package - -Dre2_DIR:PATH=${_FINDPACKAGE_RE2_CONFIG_DIR} - ) +mindspore_add_pkg( + grpc + VER 1.36.1 + LIBS mindspore_grpc++ mindspore_grpc mindspore_gpr mindspore_upb mindspore_address_sorting + EXE grpc_cpp_plugin + URL ${REQ_URL} + MD5 ${MD5} + PATCHES ${TOP_DIR}/third_party/patch/grpc/grpc.patch001 + CMAKE_OPTION + -DCMAKE_BUILD_TYPE:STRING=Release + -DBUILD_SHARED_LIBS=ON + -DgRPC_INSTALL:BOOL=ON + -DgRPC_BUILD_TESTS:BOOL=OFF + -DgRPC_PROTOBUF_PROVIDER:STRING=package + -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING=CONFIG + -DProtobuf_DIR:PATH=${_FINDPACKAGE_PROTOBUF_CONFIG_DIR} + -DgRPC_ZLIB_PROVIDER:STRING=package + -DZLIB_ROOT:PATH=${zlib_ROOT} + -DgRPC_ABSL_PROVIDER:STRING=package + -Dabsl_DIR:PATH=${_FINDPACKAGE_ABSL_CONFIG_DIR} + -DgRPC_CARES_PROVIDER:STRING=package + -Dc-ares_DIR:PATH=${c-ares_ROOT}/lib/cmake/c-ares + -DgRPC_SSL_PROVIDER:STRING=package + ${_CMAKE_ARGS_OPENSSL_ROOT_DIR} + -DgRPC_RE2_PROVIDER:STRING=package + -Dre2_DIR:PATH=${_FINDPACKAGE_RE2_CONFIG_DIR} + TARGET_ALIAS mindspore::grpc++ grpc::mindspore_grpc++) include_directories(${grpc_INC}) -add_library(mindspore::grpc++ ALIAS grpc::mindspore_grpc++) - # link other grpc libs target_link_libraries(grpc::mindspore_grpc++ INTERFACE grpc::mindspore_grpc grpc::mindspore_gpr grpc::mindspore_upb - grpc::mindspore_address_sorting) + grpc::mindspore_address_sorting) # modify mindspore macro define add_compile_definitions(grpc=mindspore_grpc) @@ -89,41 +89,43 @@ add_compile_definitions(grpc_impl=mindspore_grpc_impl) add_compile_definitions(grpc_core=mindspore_grpc_core) function(ms_grpc_generate c_var h_var) - if(NOT ARGN) - message(SEND_ERROR "Error: ms_grpc_generate() called without any proto files") - return() - endif() + if(NOT ARGN) + message(SEND_ERROR "Error: ms_grpc_generate() called without any proto files") + return() + endif() - set(${c_var}) - set(${h_var}) + set(${c_var}) + set(${h_var}) - foreach(file ${ARGN}) - get_filename_component(abs_file ${file} ABSOLUTE) - get_filename_component(file_name ${file} NAME_WE) - get_filename_component(file_dir ${abs_file} PATH) - file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir}) + foreach(file ${ARGN}) + get_filename_component(abs_file ${file} ABSOLUTE) + get_filename_component(file_name ${file} NAME_WE) + get_filename_component(file_dir ${abs_file} PATH) + file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir}) - list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc") - list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h") - list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc") - list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h") + list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc") + list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h") + list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc") + list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h") - add_custom_command( - OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" - "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" - "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc" - "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" - COMMAND protobuf::protoc --version - COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto - --grpc_out=${CMAKE_BINARY_DIR}/proto - --plugin=protoc-gen-grpc=$ ${abs_file} - DEPENDS protobuf::protoc grpc::grpc_cpp_plugin ${abs_file} - COMMENT "Running C++ gRPC compiler on ${file}" VERBATIM) - endforeach() + add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" + "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.cc" "${CMAKE_BINARY_DIR}/proto/${file_name}.grpc.pb.h" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" + COMMAND protobuf::protoc --version + COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto --grpc_out=${CMAKE_BINARY_DIR}/proto + --plugin=protoc-gen-grpc=$ ${abs_file} + DEPENDS protobuf::protoc grpc::grpc_cpp_plugin ${abs_file} + COMMENT "Running C++ gRPC compiler on ${file}" + VERBATIM) + endforeach() - set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE) - set(${c_var} ${${c_var}} PARENT_SCOPE) - set(${h_var} ${${h_var}} PARENT_SCOPE) + set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE) + set(${c_var} + ${${c_var}} + PARENT_SCOPE) + set(${h_var} + ${${h_var}} + PARENT_SCOPE) endfunction() diff --git a/cmake/external_libs/gtest.cmake b/cmake/external_libs/gtest.cmake index b9f5ca277f3..885fdbeb668 100644 --- a/cmake/external_libs/gtest.cmake +++ b/cmake/external_libs/gtest.cmake @@ -1,67 +1,71 @@ set(gtest_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(gtest_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") -set(CMAKE_OPTION - -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON - -DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON) +set(CMAKE_OPTION -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON + -DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON) if(BUILD_LITE) - if(PLATFORM_ARM64) - set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake - -DANDROID_NATIVE_API_LEVEL=19 - -DANDROID_NDK=$ENV{ANDROID_NDK} - -DANDROID_ABI=arm64-v8a - -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang - -DANDROID_STL=${ANDROID_STL} - ${CMAKE_OPTION}) - endif() - if(PLATFORM_ARM32) - set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake - -DANDROID_NATIVE_API_LEVEL=19 - -DANDROID_NDK=$ENV{ANDROID_NDK} - -DANDROID_ABI=armeabi-v7a - -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang - -DANDROID_STL=${ANDROID_STL} - ${CMAKE_OPTION}) - endif() + if(PLATFORM_ARM64) + set(CMAKE_OPTION + -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake + -DANDROID_NATIVE_API_LEVEL=19 + -DANDROID_NDK=$ENV{ANDROID_NDK} + -DANDROID_ABI=arm64-v8a + -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang + -DANDROID_STL=${ANDROID_STL} + ${CMAKE_OPTION}) + endif() + if(PLATFORM_ARM32) + set(CMAKE_OPTION + -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake + -DANDROID_NATIVE_API_LEVEL=19 + -DANDROID_NDK=$ENV{ANDROID_NDK} + -DANDROID_ABI=armeabi-v7a + -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang + -DANDROID_STL=${ANDROID_STL} + ${CMAKE_OPTION}) + endif() endif() if(NOT ENABLE_GLIBCXX) - set(gtest_CXXFLAGS "${gtest_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + set(gtest_CXXFLAGS "${gtest_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/googletest/repository/archive/release-1.8.1.tar.gz") - set(MD5 "2e6fbeb6a91310a16efe181886c59596") + set(REQ_URL "https://gitee.com/mirrors/googletest/repository/archive/release-1.8.1.tar.gz") + set(MD5 "2e6fbeb6a91310a16efe181886c59596") else() - set(REQ_URL "https://github.com/google/googletest/archive/release-1.8.1.tar.gz") - set(MD5 "2e6fbeb6a91310a16efe181886c59596") + set(REQ_URL "https://github.com/google/googletest/archive/release-1.8.1.tar.gz") + set(MD5 "2e6fbeb6a91310a16efe181886c59596") endif() -mindspore_add_pkg(gtest - VER 1.8.1 - LIBS gtest gmock - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION ${CMAKE_OPTION}) +mindspore_add_pkg( + gtest + VER 1.8.1 + LIBS gtest gmock + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION ${CMAKE_OPTION} + TARGET_ALIAS mindspore::gtest gtest::gtest + TARGET_ALIAS mindspore::gmock gtest::gmock) + include_directories(${gtest_INC}) -add_library(mindspore::gtest ALIAS gtest::gtest) -add_library(mindspore::gmock ALIAS gtest::gmock) + if(CMAKE_SYSTEM_NAME MATCHES "Windows") - file(COPY ${gtest_DIRPATH}/bin/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_DIRPATH}/bin/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_DIRPATH}/bin/libgmock_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_DIRPATH}/bin/libgmock${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_DIRPATH}/bin/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_DIRPATH}/bin/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_DIRPATH}/bin/libgmock_main${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_DIRPATH}/bin/libgmock${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) else() - file(COPY ${gtest_LIBPATH}/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_LIBPATH}/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_LIBPATH}/libgmock${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) - file(COPY ${gtest_LIBPATH}/libgmock_main${CMAKE_SHARED_LIBRARY_SUFFIX} DESTINATION - ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) -endif() \ No newline at end of file + file(COPY ${gtest_LIBPATH}/libgtest${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_LIBPATH}/libgtest_main${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_LIBPATH}/libgmock${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + file(COPY ${gtest_LIBPATH}/libgmock_main${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) +endif() diff --git a/cmake/external_libs/icu4c.cmake b/cmake/external_libs/icu4c.cmake index 464eeb691c2..3304b962d4d 100644 --- a/cmake/external_libs/icu4c.cmake +++ b/cmake/external_libs/icu4c.cmake @@ -3,56 +3,53 @@ set(LIB_ICU_DATA icudata) set(LIB_ICU_I18N icui18n) if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/icu/repository/archive/release-67-1.tar.gz") - set(MD5 "0c2662a2b0bc80b0eb56495205247c8f") + set(REQ_URL "https://gitee.com/mirrors/icu/repository/archive/release-67-1.tar.gz") + set(MD5 "0c2662a2b0bc80b0eb56495205247c8f") else() - set(REQ_URL "https://github.com/unicode-org/icu/archive/release-67-1.tar.gz") - set(MD5 "fd525fb47d8827b0b7da78b51dd2d93f") + set(REQ_URL "https://github.com/unicode-org/icu/archive/release-67-1.tar.gz") + set(MD5 "fd525fb47d8827b0b7da78b51dd2d93f") endif() if(CMAKE_SYSTEM_NAME MATCHES "Windows") - message("icu4c thirdparty do not support windows currently.") + message("icu4c thirdparty do not support windows currently.") else() - set(JSON_FILE "{ \n\ + set(JSON_FILE + "{ \n\ \"strategy\": \"additive\",\n\ \"featureFilters\": {\n\ \"normalization\": \"include\"\n\ }\n\ }\ ") - file(WRITE ${CMAKE_BINARY_DIR}/icu4c_filter.json ${JSON_FILE}) - if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - mindspore_add_pkg(icu4c - VER 67.1 - LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N} - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/icu4c/icu4c.patch01 - CONFIGURE_COMMAND ./icu4c/source/runConfigureICU MacOSX --disable-tests - --disable-samples --disable-icuio --disable-extras - ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json - ) - else() - mindspore_add_pkg(icu4c - VER 67.1 - LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N} - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${TOP_DIR}/third_party/patch/icu4c/icu4c.patch01 - CONFIGURE_COMMAND ./icu4c/source/runConfigureICU Linux --enable-rpath --disable-tests --disable-samples - --disable-icuio --disable-extras - ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json - ) - endif() - include_directories(${icu4c_INC}) - if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - include(${CMAKE_SOURCE_DIR}/cmake/change_rpath.cmake) - changerpath($ ${LIB_ICU_COMMON} "libicuuc;libicudata") - changerpath($ ${LIB_ICU_DATA} "libicudata") - changerpath($ ${LIB_ICU_I18N} "libicuuc;libicudata;libicui18n") - endif() - add_library(mindspore::icuuc ALIAS icu4c::${LIB_ICU_COMMON}) - add_library(mindspore::icudata ALIAS icu4c::${LIB_ICU_DATA}) - add_library(mindspore::icui18n ALIAS icu4c::${LIB_ICU_I18N}) - add_definitions(-D ENABLE_ICU4C) + file(WRITE ${CMAKE_BINARY_DIR}/icu4c_filter.json ${JSON_FILE}) + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + set(PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/icu4c/icu4c.patch01) + set(CONFIGURE_COMMAND ./icu4c/source/runConfigureICU MacOSX --disable-tests --disable-samples --disable-icuio + --disable-extras ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json) + else() + set(PATCHES ${TOP_DIR}/third_party/patch/icu4c/icu4c.patch01) + set(CONFIGURE_COMMAND ./icu4c/source/runConfigureICU Linux --enable-rpath --disable-tests --disable-samples + --disable-icuio --disable-extras ICU_DATA_FILTER_FILE=${CMAKE_BINARY_DIR}/icu4c_filter.json) + endif() + + mindspore_add_pkg( + icu4c + VER 67.1 + LIBS ${LIB_ICU_COMMON} ${LIB_ICU_DATA} ${LIB_ICU_I18N} + URL ${REQ_URL} + MD5 ${MD5} + PATCHES ${PATCHES} + CONFIGURE_COMMAND ${CONFIGURE_COMMAND} + TARGET_ALIAS mindspore::icuuc icu4c::${LIB_ICU_COMMON} + TARGET_ALIAS mindspore::icudata icu4c::${LIB_ICU_DATA} + TARGET_ALIAS mindspore::icui18n icu4c::${LIB_ICU_I18N}) + + include_directories(${icu4c_INC}) + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + include(${CMAKE_SOURCE_DIR}/cmake/change_rpath.cmake) + changerpath($ ${LIB_ICU_COMMON} "libicuuc;libicudata") + changerpath($ ${LIB_ICU_DATA} "libicudata") + changerpath($ ${LIB_ICU_I18N} "libicuuc;libicudata;libicui18n") + endif() + add_definitions(-DENABLE_ICU4C) endif() diff --git a/cmake/external_libs/jpeg_turbo.cmake b/cmake/external_libs/jpeg_turbo.cmake index 12f2d9cd730..c756003d51e 100644 --- a/cmake/external_libs/jpeg_turbo.cmake +++ b/cmake/external_libs/jpeg_turbo.cmake @@ -1,56 +1,58 @@ - if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/libjpeg-turbo/repository/archive/2.0.4.tar.gz") - set(MD5 "44c43e4a9fb352f47090804529317c88") + set(REQ_URL "https://gitee.com/mirrors/libjpeg-turbo/repository/archive/2.0.4.tar.gz") + set(MD5 "44c43e4a9fb352f47090804529317c88") else() - set(REQ_URL "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/2.0.4.tar.gz") - set(MD5 "44c43e4a9fb352f47090804529317c88") + set(REQ_URL "https://github.com/libjpeg-turbo/libjpeg-turbo/archive/2.0.4.tar.gz") + set(MD5 "44c43e4a9fb352f47090804529317c88") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \ + set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \ -O2") else() - set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \ + set(jpeg_turbo_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \ -D_FORTIFY_SOURCE=2 -O2") endif() set(jpeg_turbo_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack,-s") - set(jpeg_turbo_USE_STATIC_LIBS ON) set(JPEG_TURBO_PATCHE ${CMAKE_SOURCE_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001) set(CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DCMAKE_SKIP_RPATH=TRUE -DWITH_SIMD=ON) if(BUILD_LITE) - set(jpeg_turbo_USE_STATIC_LIBS OFF) - set(JPEG_TURBO_PATCHE ${TOP_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001) - if(PLATFORM_ARM64) - set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake - -DANDROID_NATIVE_API_LEVEL=19 - -DANDROID_NDK=$ENV{ANDROID_NDK} - -DANDROID_ABI=arm64-v8a - -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang - -DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - endif() - if(PLATFORM_ARM32) - set(CMAKE_OPTION -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake - -DANDROID_NATIVE_API_LEVEL=19 - -DANDROID_NDK=$ENV{ANDROID_NDK} - -DANDROID_ABI=armeabi-v7a - -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang - -DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) - endif() + set(jpeg_turbo_USE_STATIC_LIBS OFF) + set(JPEG_TURBO_PATCHE ${TOP_DIR}/third_party/patch/jpeg_turbo/jpeg_turbo.patch001) + if(PLATFORM_ARM64) + set(CMAKE_OPTION + -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake + -DANDROID_NATIVE_API_LEVEL=19 + -DANDROID_NDK=$ENV{ANDROID_NDK} + -DANDROID_ABI=arm64-v8a + -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang + -DANDROID_STL=c++_shared + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + endif() + if(PLATFORM_ARM32) + set(CMAKE_OPTION + -DCMAKE_TOOLCHAIN_FILE=$ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake + -DANDROID_NATIVE_API_LEVEL=19 + -DANDROID_NDK=$ENV{ANDROID_NDK} + -DANDROID_ABI=armeabi-v7a + -DANDROID_TOOLCHAIN_NAME=aarch64-linux-android-clang + -DANDROID_STL=c++_shared + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + endif() endif() -mindspore_add_pkg(jpeg_turbo - VER 2.0.4 - LIBS jpeg turbojpeg - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION ${CMAKE_OPTION} - PATCHES ${JPEG_TURBO_PATCHE} - ) +mindspore_add_pkg( + jpeg_turbo + VER 2.0.4 + LIBS jpeg turbojpeg + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION ${CMAKE_OPTION} + PATCHES ${JPEG_TURBO_PATCHE} + TARGET_ALIAS mindspore::jpeg_turbo jpeg_turbo::jpeg + TARGET_ALIAS mindspore::turbojpeg jpeg_turbo::turbojpeg) include_directories(${jpeg_turbo_INC}) -add_library(mindspore::jpeg_turbo ALIAS jpeg_turbo::jpeg) -add_library(mindspore::turbojpeg ALIAS jpeg_turbo::turbojpeg) diff --git a/cmake/external_libs/json.cmake b/cmake/external_libs/json.cmake index efb21b193b3..f68b74d4805 100644 --- a/cmake/external_libs/json.cmake +++ b/cmake/external_libs/json.cmake @@ -1,26 +1,27 @@ if(MSVC) - set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") - set(flatbuffers_CFLAGS "${CMAKE_CXX_FLAGS}") - set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(flatbuffers_CXXFLAGS "${CMAKE_CXX_FLAGS}") + set(flatbuffers_CFLAGS "${CMAKE_CXX_FLAGS}") + set(flatbuffers_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") else() - set(nlohmann_json373_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") - set(nlohmann_json373_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") + set(nlohmann_json373_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") + set(nlohmann_json373_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/JSON-for-Modern-CPP/repository/archive/v3.7.3.zip") - set(MD5 "b758acca4f3e133bacf919e31ca302e3") - set(INCLUDE "./include") + set(REQ_URL "https://gitee.com/mirrors/JSON-for-Modern-CPP/repository/archive/v3.7.3.zip") + set(MD5 "b758acca4f3e133bacf919e31ca302e3") + set(INCLUDE "./include") else() - set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.7.3/include.zip") - set(MD5 "fb96f95cdf609143e998db401ca4f324") - set(INCLUDE "./include") + set(REQ_URL "https://github.com/nlohmann/json/releases/download/v3.7.3/include.zip") + set(MD5 "fb96f95cdf609143e998db401ca4f324") + set(INCLUDE "./include") endif() -mindspore_add_pkg(nlohmann_json373 - VER 3.7.3 - HEAD_ONLY ${INCLUDE} - URL ${REQ_URL} - MD5 ${MD5}) +mindspore_add_pkg( + nlohmann_json373 + VER 3.7.3 + HEAD_ONLY ${INCLUDE} + URL ${REQ_URL} + MD5 ${MD5} + TARGET_ALIAS mindspore::json nlohmann_json373) include_directories(${nlohmann_json373_INC}) -add_library(mindspore::json ALIAS nlohmann_json373) diff --git a/cmake/external_libs/libevent.cmake b/cmake/external_libs/libevent.cmake index fb194025665..a660c9de5e6 100644 --- a/cmake/external_libs/libevent.cmake +++ b/cmake/external_libs/libevent.cmake @@ -1,30 +1,30 @@ set(libevent_CFLAGS "-fstack-protector-all -D_FORTIFY_SOURCE=2 -O2") if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(libevent_LDFLAGS "-Wl,-z,now") + set(libevent_LDFLAGS "-Wl,-z,now") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/libevent/repository/archive/release-2.1.12-stable.tar.gz") - set(MD5 "0d5a27436bf7ff8253420c8cf09f47ca") + set(REQ_URL "https://gitee.com/mirrors/libevent/repository/archive/release-2.1.12-stable.tar.gz") + set(MD5 "0d5a27436bf7ff8253420c8cf09f47ca") else() - set(REQ_URL + set(REQ_URL "https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz") - set(MD5 "b5333f021f880fe76490d8a799cd79f4") + set(MD5 "b5333f021f880fe76490d8a799cd79f4") endif() message("libevent using openssl stub dir: " ${openssl_ROOT}) -mindspore_add_pkg(libevent - VER 2.1.12 - LIBS event event_pthreads event_core event_openssl - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/libevent/libevent.patch001 - CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING=OFF -DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT}) +mindspore_add_pkg( + libevent + VER 2.1.12 + LIBS event event_pthreads event_core event_openssl + URL ${REQ_URL} + MD5 ${MD5} + PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/libevent/libevent.patch001 + CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_TESTING=OFF -DOPENSSL_ROOT_DIR:PATH=${openssl_ROOT} + TARGET_ALIAS mindspore::event libevent::event + TARGET_ALIAS mindspore::event_pthreads libevent::event_pthreads + TARGET_ALIAS mindspore::event_core libevent::event_core + TARGET_ALIAS mindspore::event_openssl libevent::event_openssl) include_directories(${libevent_INC}) - -add_library(mindspore::event ALIAS libevent::event) -add_library(mindspore::event_pthreads ALIAS libevent::event_pthreads) -add_library(mindspore::event_core ALIAS libevent::event_core) -add_library(mindspore::event_openssl ALIAS libevent::event_openssl) diff --git a/cmake/external_libs/mkl_dnn.cmake b/cmake/external_libs/mkl_dnn.cmake index b991e176579..1968c43bbac 100644 --- a/cmake/external_libs/mkl_dnn.cmake +++ b/cmake/external_libs/mkl_dnn.cmake @@ -1,37 +1,45 @@ set(onednn_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(onednn_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") + if(USE_MS_THREADPOOL_FOR_DNNL) - set(USE_MS_THREADPOOL "-DDNNL_CPU_RUNTIME=THREADPOOL") + set(USE_MS_THREADPOOL "-DDNNL_CPU_RUNTIME=THREADPOOL") else() - set(USE_MS_THREADPOOL "") -endif() -if(CMAKE_SYSTEM_NAME MATCHES "Windows") - mindspore_add_pkg(onednn - VER 2.2 - LIBS dnnl mkldnn - HEAD_ONLY ./include - RELEASE on - URL http://tools.mindspore.cn/libs/dnnl/dnnl_win_2.2.0_cpu_vcomp.zip - MD5 139fcdbd601a970fb86dd15b30ba5ae3) -else() - if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/MKL-DNN/repository/archive/v2.2.tar.gz") - set(MD5 "49c650e0cc24ef9ae7033d4cb22ebfad") - else() - set(REQ_URL "https://github.com/oneapi-src/oneDNN/archive/v2.2.tar.gz") - set(MD5 "6a062e36ea1bee03ff55bf44ee243e27") - endif() - mindspore_add_pkg(onednn - VER 2.2 - LIBS dnnl mkldnn - URL ${REQ_URL} - MD5 ${MD5} - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/onednn/0001-fix-user-threadpool-bug.patch - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/onednn/0002-fix-pool-nthr-bug.patch - CMAKE_OPTION -DDNNL_ARCH_OPT_FLAGS='' -DDNNL_BUILD_EXAMPLES=OFF -DDNNL_BUILD_TESTS=OFF - ${USE_MS_THREADPOOL} -DDNNL_ENABLE_CONCURRENT_EXEC=ON) + set(USE_MS_THREADPOOL "") endif() +if(CMAKE_SYSTEM_NAME MATCHES "Windows") + set(ARGS HEAD_ONLY ./include RELEASE on) + + set(REQ_URL https://github.com/oneapi-src/oneDNN/releases/download/v2.2/dnnl_win_2.2.0_cpu_vcomp.zip) + set(MD5 fa12c693b2ec07700d174e1e99d60a7e) +else() + if(ENABLE_GITEE) + set(REQ_URL "https://gitee.com/mirrors/MKL-DNN/repository/archive/v2.2.tar.gz") + set(MD5 "49c650e0cc24ef9ae7033d4cb22ebfad") + else() + set(REQ_URL "https://github.com/oneapi-src/oneDNN/archive/v2.2.tar.gz") + set(MD5 "6a062e36ea1bee03ff55bf44ee243e27") + endif() + set(ARGS + PATCHES + ${CMAKE_SOURCE_DIR}/third_party/patch/onednn/0001-fix-user-threadpool-bug.patch + PATCHES + ${CMAKE_SOURCE_DIR}/third_party/patch/onednn/0002-fix-pool-nthr-bug.patch + CMAKE_OPTION + -DDNNL_ARCH_OPT_FLAGS='' + -DDNNL_BUILD_EXAMPLES=OFF + -DDNNL_BUILD_TESTS=OFF + ${USE_MS_THREADPOOL} + -DDNNL_ENABLE_CONCURRENT_EXEC=ON) +endif() + +mindspore_add_pkg( + onednn + VER 2.2 + LIBS dnnl mkldnn + URL ${REQ_URL} + MD5 ${MD5} ${ARGS} + TARGET_ALIAS mindspore::dnnl onednn::dnnl + TARGET_ALIAS mindspore::mkldnn onednn::mkldnn) + include_directories(${onednn_INC}) -add_library(mindspore::dnnl ALIAS onednn::dnnl) -add_library(mindspore::mkldnn ALIAS onednn::mkldnn) diff --git a/cmake/external_libs/nccl.cmake b/cmake/external_libs/nccl.cmake index c9c43f38f91..a33aee8577f 100644 --- a/cmake/external_libs/nccl.cmake +++ b/cmake/external_libs/nccl.cmake @@ -1,19 +1,21 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/nccl/repository/archive/v2.7.6-1.tar.gz") - set(MD5 "6884364c2b1cf229f0bdaf94efcb5782") + set(REQ_URL "https://gitee.com/mirrors/nccl/repository/archive/v2.7.6-1.tar.gz") + set(MD5 "6884364c2b1cf229f0bdaf94efcb5782") else() - set(REQ_URL "https://github.com/NVIDIA/nccl/archive/v2.7.6-1.tar.gz") - set(MD5 "073b19899f374c5ba07d2db02dc38f9f") + set(REQ_URL "https://github.com/NVIDIA/nccl/archive/v2.7.6-1.tar.gz") + set(MD5 "073b19899f374c5ba07d2db02dc38f9f") endif() set(nccl_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") -mindspore_add_pkg(nccl - VER 2.7.6-1 - LIBS nccl - URL ${REQ_URL} - MD5 ${MD5} - BUILD_OPTION src.build - INSTALL_INCS build/include/* - INSTALL_LIBS build/lib/*) +mindspore_add_pkg( + nccl + VER 2.7.6-1 + LIBS nccl + URL ${REQ_URL} + MD5 ${MD5} + BUILD_OPTION src.build + INSTALL_INCS build/include/* + INSTALL_LIBS build/lib/* + TARGET_ALIAS mindspore::nccl nccl::nccl +) include_directories(${nccl_INC}) -add_library(mindspore::nccl ALIAS nccl::nccl) diff --git a/cmake/external_libs/ompi.cmake b/cmake/external_libs/ompi.cmake index 1ed8dfb2a63..b92873f85fb 100644 --- a/cmake/external_libs/ompi.cmake +++ b/cmake/external_libs/ompi.cmake @@ -1,18 +1,20 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/ompi/repository/archive/v4.0.3.tar.gz") - set(MD5 "70f764c26ab6cd99487d58be0cd8c409") + set(REQ_URL "https://gitee.com/mirrors/ompi/repository/archive/v4.0.3.tar.gz") + set(MD5 "70f764c26ab6cd99487d58be0cd8c409") else() - set(REQ_URL "https://github.com/open-mpi/ompi/archive/v4.0.3.tar.gz") - set(MD5 "86cb724e8fe71741ad3be4e7927928a2") + set(REQ_URL "https://github.com/open-mpi/ompi/archive/v4.0.3.tar.gz") + set(MD5 "86cb724e8fe71741ad3be4e7927928a2") endif() set(ompi_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") -mindspore_add_pkg(ompi - VER 4.0.3 - LIBS mpi - URL ${REQ_URL} - MD5 ${MD5} - PRE_CONFIGURE_COMMAND ./autogen.pl - CONFIGURE_COMMAND ./configure) +mindspore_add_pkg( + ompi + VER 4.0.3 + LIBS mpi + URL ${REQ_URL} + MD5 ${MD5} + PRE_CONFIGURE_COMMAND ./autogen.pl + CONFIGURE_COMMAND ./configure + TARGET_ALIAS mindspore::ompi ompi::mpi +) include_directories(${ompi_INC}) -add_library(mindspore::ompi ALIAS ompi::mpi) \ No newline at end of file diff --git a/cmake/external_libs/opencv.cmake b/cmake/external_libs/opencv.cmake index c6abaeb7c1a..361eedc4d86 100644 --- a/cmake/external_libs/opencv.cmake +++ b/cmake/external_libs/opencv.cmake @@ -1,130 +1,96 @@ if(MSVC) - set(opencv_CXXFLAGS "${CMAKE_CXX_FLAGS}") - set(opencv_CFLAGS "${CMAKE_C_FLAGS}") - set(opencv_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(opencv_CXXFLAGS "${CMAKE_CXX_FLAGS}") + set(opencv_CFLAGS "${CMAKE_C_FLAGS}") + set(opencv_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(opencv_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") - set(opencv_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") - set(opencv_LDFLAGS "-Wl") + set(opencv_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(opencv_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(opencv_LDFLAGS "-Wl") elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") - set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") - set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-attributes -Wno-unknown-pragmas") - set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-unused-value -Wno-implicit-fallthrough") + set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-attributes -Wno-unknown-pragmas") + set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -Wno-unused-value -Wno-implicit-fallthrough") else() - set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2") - set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -O2") - if(NOT ENABLE_GLIBCXX) - set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") - endif() - set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") - set(opencv_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack -s") + set(opencv_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2") + set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -O2") + if(NOT ENABLE_GLIBCXX) + set(opencv_CXXFLAGS "${opencv_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + endif() + set(opencv_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -O2") + set(opencv_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack -s") endif() if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/opencv/repository/archive/4.5.2.tar.gz") - set(MD5 "d3141f649ab2d76595fdd8991ee15c55") + set(REQ_URL "https://gitee.com/mirrors/opencv/repository/archive/4.5.2.tar.gz") + set(MD5 "d3141f649ab2d76595fdd8991ee15c55") else() - set(REQ_URL "https://github.com/opencv/opencv/archive/4.5.2.tar.gz") - set(MD5 "d3141f649ab2d76595fdd8991ee15c55") + set(REQ_URL "https://github.com/opencv/opencv/archive/4.5.2.tar.gz") + set(MD5 "d3141f649ab2d76595fdd8991ee15c55") endif() -if(MSVC) - mindspore_add_pkg(opencv - VER 4.5.2 - LIBS opencv_core452.lib opencv_imgcodecs452.lib opencv_imgproc452.lib - LIB_PATH x64/*/lib - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF - -DWITH_ADE=OFF - -DBUILD_ZLIB=ON - -DBUILD_JPEG=ON - -DBUILD_PNG=ON - -DBUILD_OPENEXR=OFF - -DBUILD_TESTS=OFF - -DBUILD_PERF_TESTS=OFF - -DBUILD_opencv_apps=OFF - -DCMAKE_SKIP_RPATH=TRUE - -DBUILD_opencv_python3=OFF - -DBUILD_opencv_videoio=OFF - -DWITH_FFMPEG=OFF - -DWITH_TIFF=ON - -DBUILD_TIFF=OFF - -DWITH_JASPER=OFF - -DBUILD_JASPER=OFF - -DCV_TRACE=OFF # cause memory usage increacing - -DTIFF_INCLUDE_DIR=${tiff_INC} - -DTIFF_LIBRARY=${tiff_LIB}) -elseif(WIN32) - mindspore_add_pkg(opencv - VER 4.5.2 - LIBS libopencv_core452.dll.a libopencv_imgcodecs452.dll.a libopencv_imgproc452.dll.a - LIB_PATH x64/mingw/lib - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF - -DWITH_ADE=OFF - -DBUILD_ZLIB=ON - -DBUILD_JPEG=ON - -DBUILD_PNG=ON - -DBUILD_OPENEXR=OFF - -DBUILD_TESTS=OFF - -DBUILD_PERF_TESTS=OFF - -DBUILD_opencv_apps=OFF - -DCMAKE_SKIP_RPATH=TRUE - -DBUILD_opencv_python3=OFF - -DBUILD_opencv_videoio=OFF - -DWITH_FFMPEG=OFF - -DWITH_TIFF=ON - -DBUILD_TIFF=OFF - -DWITH_JASPER=OFF - -DBUILD_JASPER=OFF - -DCV_TRACE=OFF # cause memory usage increacing - -DWITH_LAPACK=OFF - -DTIFF_INCLUDE_DIR=${tiff_INC} - -DTIFF_LIBRARY=${tiff_LIB}) -else() - mindspore_add_pkg(opencv - VER 4.5.2 - LIBS opencv_core opencv_imgcodecs opencv_imgproc - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DWITH_PROTOBUF=OFF -DWITH_WEBP=OFF -DWITH_IPP=OFF - -DWITH_ADE=OFF - -DBUILD_ZLIB=ON - -DBUILD_JPEG=ON - -DBUILD_PNG=ON - -DBUILD_OPENEXR=OFF - -DBUILD_TESTS=OFF - -DBUILD_PERF_TESTS=OFF - -DBUILD_opencv_apps=OFF - -DCMAKE_SKIP_RPATH=TRUE - -DBUILD_opencv_python3=OFF - -DWITH_FFMPEG=OFF - -DWITH_TIFF=ON - -DBUILD_TIFF=OFF - -DWITH_JASPER=OFF - -DBUILD_JASPER=OFF - -DCV_TRACE=OFF # cause memory usage increacing - -DWITH_LAPACK=OFF - -DTIFF_INCLUDE_DIR=${tiff_INC} - -DTIFF_LIBRARY=${tiff_LIB}) -endif() +set( + CMAKE_OPTION + -DCMAKE_BUILD_TYPE=Release + -DWITH_PROTOBUF=OFF + -DWITH_WEBP=OFF + -DWITH_IPP=OFF + -DWITH_ADE=OFF + -DBUILD_ZLIB=ON + -DBUILD_JPEG=ON + -DBUILD_PNG=ON + -DBUILD_OPENEXR=OFF + -DBUILD_TESTS=OFF + -DBUILD_PERF_TESTS=OFF + -DBUILD_opencv_apps=OFF + -DCMAKE_SKIP_RPATH=TRUE + -DBUILD_opencv_python3=OFF + -DWITH_FFMPEG=OFF + -DWITH_TIFF=ON + -DBUILD_TIFF=OFF + -DWITH_JASPER=OFF + -DBUILD_JASPER=OFF + -DCV_TRACE=OFF # cause memory usage increacing + -DTIFF_INCLUDE_DIR=${tiff_INC} + -DTIFF_LIBRARY=${tiff_LIB} +) if(MSVC) - include_directories(${opencv_INC}) - add_library(mindspore::opencv_core ALIAS opencv::opencv_core452.lib) - add_library(mindspore::opencv_imgcodecs ALIAS opencv::opencv_imgcodecs452.lib) - add_library(mindspore::opencv_imgproc ALIAS opencv::opencv_imgproc452.lib) + set(LIBS opencv_core452.lib opencv_imgcodecs452.lib opencv_imgproc452.lib) + set(LIB_PATH LIB_PATH x64/*/lib) + list(APPEND CMAKE OPTION -DBUILD_opencv_videoio=OFF) + set(TARGET_ALIAS TARGET_ALIAS mindspore::opencv_core opencv::opencv_core452.lib) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgcodecs opencv::opencv_imgcodecs452.lib) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgproc opencv::opencv_imgproc452.lib) elseif(WIN32) - include_directories(${opencv_INC}) - add_library(mindspore::opencv_core ALIAS opencv::libopencv_core452.dll.a) - add_library(mindspore::opencv_imgcodecs ALIAS opencv::libopencv_imgcodecs452.dll.a) - add_library(mindspore::opencv_imgproc ALIAS opencv::libopencv_imgproc452.dll.a) + set(LIBS libopencv_core452.dll.a libopencv_imgcodecs452.dll.a libopencv_imgproc452.dll.a) + set(LIB_PATH LIB_PATH x64/mingw/lib) + list(APPEND CMAKE_OPTION -DBUILD_opencv_videoio=OFF -DWITH_LAPACK=OFF) + set(TARGET_ALIAS TARGET_ALIAS mindspore::opencv_core opencv::libopencv_core452.dll.a) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgcodecs opencv::libopencv_imgcodecs452.dll.a) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgproc opencv::libopencv_imgproc452.dll.a) else() - include_directories(${opencv_INC}/opencv4) - add_library(mindspore::opencv_core ALIAS opencv::opencv_core) - add_library(mindspore::opencv_imgcodecs ALIAS opencv::opencv_imgcodecs) - add_library(mindspore::opencv_imgproc ALIAS opencv::opencv_imgproc) + set(LIBS opencv_core opencv_imgcodecs opencv_imgproc) + + list(APPEND CMAKE_OPTION -DWITH_LAPACK=OFF) + set(TARGET_ALIAS TARGET_ALIAS mindspore::opencv_core opencv::opencv_core) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgcodecs opencv::opencv_imgcodecs) + list(APPEND TARGET_ALIAS TARGET_ALIAS mindspore::opencv_imgproc opencv::opencv_imgproc) +endif() + +mindspore_add_pkg( + opencv + VER 4.5.2 + LIBS ${LIBS} ${LIB_PATH} + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION ${CMAKE_OPTION} ${TARGET_ALIAS} +) + +if(MSVC) + include_directories(${opencv_INC}) +elseif(WIN32) + include_directories(${opencv_INC}) +else() + include_directories(${opencv_INC}/opencv4) endif() diff --git a/cmake/external_libs/openssl.cmake b/cmake/external_libs/openssl.cmake index 4bd580b0f88..a141ed7c7d9 100644 --- a/cmake/external_libs/openssl.cmake +++ b/cmake/external_libs/openssl.cmake @@ -13,7 +13,8 @@ else() endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR APPLE) - mindspore_add_pkg(openssl + mindspore_add_pkg( + openssl VER 1.1.1k LIBS ssl crypto URL ${REQ_URL} @@ -21,8 +22,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR APPLE) CONFIGURE_COMMAND ./config no-zlib no-shared PATCHES ${OPENSSL_PATCH_ROOT}/CVE-2021-3711.patch PATCHES ${OPENSSL_PATCH_ROOT}/CVE-2021-3712.patch - ) + TARGET_ALIAS mindspore::ssl openssl::ssl + TARGET_ALIAS mindspore::crypto openssl::crypto) include_directories(${openssl_INC}) - add_library(mindspore::ssl ALIAS openssl::ssl) - add_library(mindspore::crypto ALIAS openssl::crypto) endif() diff --git a/cmake/external_libs/protobuf.cmake b/cmake/external_libs/protobuf.cmake index 5e03ad15e22..5bc8b9cc2b1 100644 --- a/cmake/external_libs/protobuf.cmake +++ b/cmake/external_libs/protobuf.cmake @@ -1,34 +1,34 @@ set(protobuf_USE_STATIC_LIBS ON) if(BUILD_LITE) - if(MSVC) - set(protobuf_CXXFLAGS "${CMAKE_CXX_FLAGS}") - set(protobuf_CFLAGS "${CMAKE_C_FLAGS}") - set(protobuf_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - set(_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) - set(CMAKE_STATIC_LIBRARY_PREFIX "lib") - else() - set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ + if(MSVC) + set(protobuf_CXXFLAGS "${CMAKE_CXX_FLAGS}") + set(protobuf_CFLAGS "${CMAKE_C_FLAGS}") + set(protobuf_LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) + set(CMAKE_STATIC_LIBRARY_PREFIX "lib") + else() + set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") - if(NOT ENABLE_GLIBCXX) - set(protobuf_CXXFLAGS "${protobuf_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") - endif() - set(protobuf_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") - endif() -else() - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC \ - -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") - elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ - -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") - else() - set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ - -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") - if(NOT ENABLE_GLIBCXX) - set(protobuf_CXXFLAGS "${protobuf_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") - endif() + if(NOT ENABLE_GLIBCXX) + set(protobuf_CXXFLAGS "${protobuf_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") endif() set(protobuf_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") + endif() +else() + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC \ + -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") + elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ + -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") + else() + set(protobuf_CXXFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter \ + -fPIC -fvisibility=hidden -D_FORTIFY_SOURCE=2 -O2") + if(NOT ENABLE_GLIBCXX) + set(protobuf_CXXFLAGS "${protobuf_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + endif() + endif() + set(protobuf_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") endif() set(_ms_tmp_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) @@ -37,120 +37,134 @@ string(REPLACE " -Wall" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/protobuf_source/repository/archive/v3.13.0.tar.gz") - set(MD5 "53ab10736257b3c61749de9800b8ce97") + set(REQ_URL "https://gitee.com/mirrors/protobuf_source/repository/archive/v3.13.0.tar.gz") + set(MD5 "53ab10736257b3c61749de9800b8ce97") else() - set(REQ_URL "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz") - set(MD5 "1a6274bc4a65b55a6fa70e264d796490") + set(REQ_URL "https://github.com/protocolbuffers/protobuf/archive/v3.13.0.tar.gz") + set(MD5 "1a6274bc4a65b55a6fa70e264d796490") endif() -mindspore_add_pkg(protobuf - VER 3.13.0 - LIBS protobuf - EXE protoc - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_PATH cmake/ - CMAKE_OPTION -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release) +mindspore_add_pkg( + protobuf + VER 3.13.0 + LIBS protobuf + EXE protoc + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_PATH cmake/ + CMAKE_OPTION -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release + TARGET_ALIAS mindspore::protobuf protobuf::protobuf) include_directories(${protobuf_INC}) -add_library(mindspore::protobuf ALIAS protobuf::protobuf) -set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS}) +set(CMAKE_CXX_FLAGS ${_ms_tmp_CMAKE_CXX_FLAGS}) if(MSVC) - set(CMAKE_STATIC_LIBRARY_PREFIX, ${_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX}) + set(CMAKE_STATIC_LIBRARY_PREFIX, ${_ms_tmp_CMAKE_STATIC_LIBRARY_PREFIX}) endif() function(common_protobuf_generate path c_var h_var) - if(NOT ARGN) - message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files") - return() - endif() + if(NOT ARGN) + message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files") + return() + endif() - set(${c_var}) - set(${h_var}) + set(${c_var}) + set(${h_var}) - foreach(file ${ARGN}) - get_filename_component(abs_file ${file} ABSOLUTE) - get_filename_component(file_name ${file} NAME_WE) - get_filename_component(file_dir ${abs_file} PATH) - file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir}) + foreach(file ${ARGN}) + get_filename_component(abs_file ${file} ABSOLUTE) + get_filename_component(file_name ${file} NAME_WE) + get_filename_component(file_dir ${abs_file} PATH) + file(RELATIVE_PATH rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${file_dir}) - list(APPEND ${c_var} "${path}/${file_name}.pb.cc") - list(APPEND ${h_var} "${path}/${file_name}.pb.h") - add_custom_command( - OUTPUT "${path}/${file_name}.pb.cc" "${path}/${file_name}.pb.h" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory "${path}" - COMMAND protobuf::protoc -I${file_dir} --cpp_out=${path} ${abs_file} - DEPENDS protobuf::protoc ${abs_file} - COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM) - endforeach() + list(APPEND ${c_var} "${path}/${file_name}.pb.cc") + list(APPEND ${h_var} "${path}/${file_name}.pb.h") + add_custom_command( + OUTPUT "${path}/${file_name}.pb.cc" "${path}/${file_name}.pb.h" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory "${path}" + COMMAND protobuf::protoc -I${file_dir} --cpp_out=${path} ${abs_file} + DEPENDS protobuf::protoc ${abs_file} + COMMENT "Running C++ protocol buffer compiler on ${file}" + VERBATIM) + endforeach() - set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE) - set(${c_var} ${${c_var}} PARENT_SCOPE) - set(${h_var} ${${h_var}} PARENT_SCOPE) + set_source_files_properties(${${c_var}} ${${h_var}} PROPERTIES GENERATED TRUE) + set(${c_var} + ${${c_var}} + PARENT_SCOPE) + set(${h_var} + ${${h_var}} + PARENT_SCOPE) endfunction() function(ms_protobuf_generate c_var h_var) - common_protobuf_generate(${CMAKE_BINARY_DIR}/proto ${c_var} ${h_var} ${ARGN}) - set(${c_var} ${${c_var}} PARENT_SCOPE) - set(${h_var} ${${h_var}} PARENT_SCOPE) + common_protobuf_generate(${CMAKE_BINARY_DIR}/proto ${c_var} ${h_var} ${ARGN}) + set(${c_var} + ${${c_var}} + PARENT_SCOPE) + set(${h_var} + ${${h_var}} + PARENT_SCOPE) endfunction() function(ms_protobuf_generate_py c_var h_var py_var) - if(NOT ARGN) - message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files") - return() + if(NOT ARGN) + message(SEND_ERROR "Error: ms_protobuf_generate() called without any proto files") + return() + endif() + + set(${c_var}) + set(${h_var}) + set(${py_var}) + + foreach(file ${ARGN}) + get_filename_component(abs_file ${file} ABSOLUTE) + get_filename_component(file_name ${file} NAME_WE) + get_filename_component(file_dir ${abs_file} PATH) + + list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc") + list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h") + list(APPEND ${py_var} "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py") + if(WIN32) + add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" + "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" + COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND perl -pi.bak -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + "${PROJECT_SOURCE_DIR}/mindspore/python/mindspore/train/" + DEPENDS protobuf::protoc ${abs_file} + COMMENT "Running C++ protocol buffer compiler on ${file}" + VERBATIM) + else() + add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" + "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" + COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} + COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/" "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + COMMAND cp "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" + "${PROJECT_SOURCE_DIR}/mindspore/python/mindspore/train/" + DEPENDS protobuf::protoc ${abs_file} + COMMENT "Running C++ protocol buffer compiler on ${file}" + VERBATIM) endif() - - set(${c_var}) - set(${h_var}) - set(${py_var}) - - foreach(file ${ARGN}) - get_filename_component(abs_file ${file} ABSOLUTE) - get_filename_component(file_name ${file} NAME_WE) - get_filename_component(file_dir ${abs_file} PATH) - - list(APPEND ${c_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc") - list(APPEND ${h_var} "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h") - list(APPEND ${py_var} "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py") - if(WIN32) - add_custom_command( - OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" - "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" - "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" - COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND perl -pi.bak -e "s/import (.+_pb2.*)/from . import \\1/" - "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - "${PROJECT_SOURCE_DIR}/mindspore/python/mindspore/train/" - DEPENDS protobuf::protoc ${abs_file} - COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM) - else() - add_custom_command( - OUTPUT "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.cc" - "${CMAKE_BINARY_DIR}/proto/${file_name}.pb.h" - "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/proto" - COMMAND protobuf::protoc -I${file_dir} --cpp_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND protobuf::protoc -I${file_dir} --python_out=${CMAKE_BINARY_DIR}/proto ${abs_file} - COMMAND perl -pi -e "s/import (.+_pb2.*)/from . import \\1/" - "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - COMMAND cp "${CMAKE_BINARY_DIR}/proto/${file_name}_pb2.py" - "${PROJECT_SOURCE_DIR}/mindspore/python/mindspore/train/" - DEPENDS protobuf::protoc ${abs_file} - COMMENT "Running C++ protocol buffer compiler on ${file}" VERBATIM) - endif() - endforeach() - set_source_files_properties(${${c_var}} ${${h_var}} ${${py_var}} PROPERTIES GENERATED TRUE) - set(${c_var} ${${c_var}} PARENT_SCOPE) - set(${h_var} ${${h_var}} PARENT_SCOPE) - set(${py_var} ${${py_var}} PARENT_SCOPE) + endforeach() + set_source_files_properties(${${c_var}} ${${h_var}} ${${py_var}} PROPERTIES GENERATED TRUE) + set(${c_var} + ${${c_var}} + PARENT_SCOPE) + set(${h_var} + ${${h_var}} + PARENT_SCOPE) + set(${py_var} + ${${py_var}} + PARENT_SCOPE) endfunction() diff --git a/cmake/external_libs/pybind11.cmake b/cmake/external_libs/pybind11.cmake index 1d634f296ec..3df217c5901 100644 --- a/cmake/external_libs/pybind11.cmake +++ b/cmake/external_libs/pybind11.cmake @@ -1,61 +1,47 @@ set(PYTHON_VERSION ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}) if(ENABLE_GITEE) - if(PYTHON_VERSION MATCHES "3.9") - set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.6.1.tar.gz") - set(MD5 "cd04f7bd275fedb97e8b583c115769e6") - elseif(PYTHON_VERSION MATCHES "3.8") - set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.6.1.tar.gz") - set(MD5 "cd04f7bd275fedb97e8b583c115769e6") - elseif(PYTHON_VERSION MATCHES "3.7") - set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.4.3.tar.gz") - set(MD5 "8f69438201bc824c63e5774bf8c1d422") - else() - message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'") - return() - endif() + if(PYTHON_VERSION VERSION_GREATER_EQUAL 3.8.0) + set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.6.1.tar.gz") + set(MD5 "cd04f7bd275fedb97e8b583c115769e6") + elseif(PYTHON_VERSION VERSION_GREATER_EQUAL 3.7.0) + set(REQ_URL "https://gitee.com/mirrors/pybind11/repository/archive/v2.4.3.tar.gz") + set(MD5 "8f69438201bc824c63e5774bf8c1d422") + else() + message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'") + return() + endif() else() - if(PYTHON_VERSION MATCHES "3.9") - set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz") - set(MD5 "32a7811f3db423df4ebfc731a28e5901") - elseif(PYTHON_VERSION MATCHES "3.8") - set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz") - set(MD5 "32a7811f3db423df4ebfc731a28e5901") - elseif(PYTHON_VERSION MATCHES "3.7") - set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.4.3.tar.gz") - set(MD5 "62254c40f89925bb894be421fe4cdef2") - else() - message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'") - return() - endif() + if(PYTHON_VERSION VERSION_GREATER_EQUAL 3.8.0) + set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.6.1.tar.gz") + set(MD5 "32a7811f3db423df4ebfc731a28e5901") + elseif(PYTHON_VERSION VERSION_GREATER_EQUAL 3.7.0) + set(REQ_URL "https://github.com/pybind/pybind11/archive/v2.4.3.tar.gz") + set(MD5 "62254c40f89925bb894be421fe4cdef2") + else() + message("Could not find 'Python 3.8' or 'Python 3.7' or 'Python 3.9'") + return() + endif() endif() set(pybind11_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2") set(pybind11_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") -if(PYTHON_VERSION MATCHES "3.9") - mindspore_add_pkg(pybind11 - VER 2.6.1 - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE - ) -elseif(PYTHON_VERSION MATCHES "3.8") - mindspore_add_pkg(pybind11 - VER 2.6.1 - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE - ) +if(PYTHON_VERSION VERSION_GREATER_EQUAL 3.8.0) + set(VER 2.6.1) +elseif(PYTHON_VERSION VERSION_GREATER_EQUAL 3.7.0) + set(VER 2.4.3) else() - mindspore_add_pkg(pybind11 - VER 2.4.3 - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE - ) + set(VER NOT-FOUND) endif() +mindspore_add_pkg( + pybind11 + VER ${VER} + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DPYBIND11_TEST=OFF -DPYBIND11_LTO_CXX_FLAGS=FALSE + TARGET_ALIAS mindspore::pybind11_module pybind11::module) + include_directories(${pybind11_INC}) find_package(pybind11 REQUIRED) set_property(TARGET pybind11::module PROPERTY IMPORTED_GLOBAL TRUE) -add_library(mindspore::pybind11_module ALIAS pybind11::module) diff --git a/cmake/external_libs/re2.cmake b/cmake/external_libs/re2.cmake index 0b515648754..1cbd8ea0081 100644 --- a/cmake/external_libs/re2.cmake +++ b/cmake/external_libs/re2.cmake @@ -1,22 +1,22 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/re2/repository/archive/2019-12-01.tar.gz") - set(MD5 "527eab0c75d6a1a0044c6eefd816b2fb") + set(REQ_URL "https://gitee.com/mirrors/re2/repository/archive/2019-12-01.tar.gz") + set(MD5 "527eab0c75d6a1a0044c6eefd816b2fb") else() - set(REQ_URL "https://github.com/google/re2/archive/2019-12-01.tar.gz") - set(MD5 "527eab0c75d6a1a0044c6eefd816b2fb") + set(REQ_URL "https://github.com/google/re2/archive/2019-12-01.tar.gz") + set(MD5 "527eab0c75d6a1a0044c6eefd816b2fb") endif() if(NOT ENABLE_GLIBCXX) - set(re2_CXXFLAGS "${re2_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") + set(re2_CXXFLAGS "${re2_CXXFLAGS} -D_GLIBCXX_USE_CXX11_ABI=0") endif() -mindspore_add_pkg(re2 - VER 20191201 - LIBS re2 - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE) +mindspore_add_pkg( + re2 + VER 20191201 + LIBS re2 + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE + TARGET_ALIAS mindspore::re2 re2::re2) include_directories(${re2_INC}) -add_library(mindspore::re2 ALIAS re2::re2) - diff --git a/cmake/external_libs/sentencepiece.cmake b/cmake/external_libs/sentencepiece.cmake index ce2ea537bd8..c92e67d334c 100644 --- a/cmake/external_libs/sentencepiece.cmake +++ b/cmake/external_libs/sentencepiece.cmake @@ -1,49 +1,39 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/sentencepiece/repository/archive/v0.1.92.tar.gz") - set(MD5 "0fc99de9f09b9184398f49647791799f") + set(REQ_URL "https://gitee.com/mirrors/sentencepiece/repository/archive/v0.1.92.tar.gz") + set(MD5 "0fc99de9f09b9184398f49647791799f") else() - set(REQ_URL "https://github.com/google/sentencepiece/archive/v0.1.92.tar.gz") - set(MD5 "5dfd2241914b5598a68b2a8542ed8e91") + set(REQ_URL "https://github.com/google/sentencepiece/archive/v0.1.92.tar.gz") + set(MD5 "5dfd2241914b5598a68b2a8542ed8e91") endif() +set(CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_ENABLE_SHARED=OFF) if(WIN32) - set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-stringop-overflow \ + set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-stringop-overflow \ -Wno-format-extra-args -Wno-format") - set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") - mindspore_add_pkg(sentencepiece - VER 0.1.92 - LIBS sentencepiece sentencepiece_train - URL ${REQ_URL} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=ON -DSPM_ENABLE_SHARED=OFF - MD5 ${MD5} - ) + set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") + list(APPEND CMAKE_OPTION -DSPM_USE_BUILTIN_PROTOBUF=ON) else() - set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-sign-compare") - set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") - if(ENABLE_GLIBCXX) - mindspore_add_pkg(sentencepiece - VER 0.1.92 - LIBS sentencepiece sentencepiece_train - URL ${REQ_URL} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=OFF -DSPM_ENABLE_SHARED=OFF - -DPROTOBUF_INC=${protobuf_INC} -DCMAKE_CXX_STANDARD=11 - MD5 ${MD5} - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001_cpu - ) - else() - mindspore_add_pkg(sentencepiece - VER 0.1.92 - LIBS sentencepiece sentencepiece_train - URL ${REQ_URL} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release -DSPM_USE_BUILTIN_PROTOBUF=OFF -DSPM_ENABLE_SHARED=OFF - -DPROTOBUF_INC=${protobuf_INC} - MD5 ${MD5} - PATCHES ${TOP_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001 - ) - endif() + set(sentencepiece_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -Wno-unused-result -Wno-sign-compare") + set(sentencepiece_CFLAGS "-D_FORTIFY_SOURCE=2 -O2") + list(APPEND CMAKE_OPTION -DSPM_USE_BUILTIN_PROTOBUF=OFF) + if(ENABLE_GLIBCXX) + set(PATCHES PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001_cpu) + list(APPEND CMAKE_OPTION -DPROTOBUF_INC=${protobuf_INC} -DCMAKE_CXX_STANDARD=11) + else() + set(PATCHES PATCHES ${TOP_DIR}/third_party/patch/sentencepiece/sentencepiece.patch001) + list(APPEND CMAKE_OPTION -DPROTOBUF_INC=${protobuf_INC}) + endif() endif() -include_directories(${sentencepiece_INC}) -add_library(mindspore::sentencepiece ALIAS sentencepiece::sentencepiece) -add_library(mindspore::sentencepiece_train ALIAS sentencepiece::sentencepiece_train) +mindspore_add_pkg( + sentencepiece + VER 0.1.92 + LIBS sentencepiece sentencepiece_train + URL ${REQ_URL} + CMAKE_OPTION ${CMAKE_OPTION} + MD5 ${MD5} ${PATCHES} + TARGET_ALIAS mindspore::sentencepiece sentencepiece::sentencepiece + TARGET_ALIAS mindspore::sentencepiece_train sentencepiece::sentencepiece_train) + +include_directories(${sentencepiece_INC}) diff --git a/cmake/external_libs/sqlite.cmake b/cmake/external_libs/sqlite.cmake index ca058fe8c1a..e6f3e57b524 100644 --- a/cmake/external_libs/sqlite.cmake +++ b/cmake/external_libs/sqlite.cmake @@ -1,40 +1,36 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/sqlite/repository/archive/version-3.36.0.tar.gz") - set(MD5 "715df9c2d2ccf6207158d6c087f711cf") + set(REQ_URL "https://gitee.com/mirrors/sqlite/repository/archive/version-3.36.0.tar.gz") + set(MD5 "715df9c2d2ccf6207158d6c087f711cf") else() - set(REQ_URL "https://github.com/sqlite/sqlite/archive/version-3.36.0.tar.gz") - set(MD5 "715df9c2d2ccf6207158d6c087f711cf") + set(REQ_URL "https://github.com/sqlite/sqlite/archive/version-3.36.0.tar.gz") + set(MD5 "715df9c2d2ccf6207158d6c087f711cf") endif() - if(WIN32) - mindspore_add_pkg(sqlite - VER 3.36.0 - LIBS sqlite3 - URL https://sqlite.org/2021/sqlite-amalgamation-3360000.zip - MD5 c5d360c74111bafae1b704721ff18fe6 - PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sqlite/sqlite.windows.patch002 - CMAKE_OPTION " " - ) - + set(REQ_URL https://sqlite.org/2021/sqlite-amalgamation-3360000.zip) + set(MD5 c5d360c74111bafae1b704721ff18fe6) + set(PATCHES ${CMAKE_SOURCE_DIR}/third_party/patch/sqlite/sqlite.windows.patch002) else() - set(sqlite_USE_STATIC_LIBS ON) - set(sqlite_CXXFLAGS) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(sqlite_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \ + set(sqlite_USE_STATIC_LIBS ON) + set(sqlite_CXXFLAGS) + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(sqlite_CFLAGS "-fstack-protector-all -Wno-uninitialized -Wno-unused-parameter -fPIC -D_FORTIFY_SOURCE=2 \ -O2") - else() - set(sqlite_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \ + else() + set(sqlite_CFLAGS "-fstack-protector-all -Wno-maybe-uninitialized -Wno-unused-parameter -fPIC \ -D_FORTIFY_SOURCE=2 -O2") - set(sqlite_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") - endif() - mindspore_add_pkg(sqlite - VER 3.36.0 - LIBS sqlite3 - URL ${REQ_URL} - MD5 ${MD5} - CONFIGURE_COMMAND ./configure --enable-shared=no --disable-tcl --disable-editline --enable-json1) + set(sqlite_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") + endif() + set(CONFIGURE_COMMAND CONFIGURE_COMMAND ./configure --enable-shared=no --disable-tcl --disable-editline + --enable-json1) endif() +mindspore_add_pkg( + sqlite + VER 3.36.0 + LIBS sqlite3 + URL ${REQ_URL} + MD5 ${MD5} ${PATCHES} ${CONFIGURE_COMMAND} + CMAKE_OPTION " " + TARGET_ALIAS mindspore::sqlite sqlite::sqlite3) include_directories(${sqlite_INC}) -add_library(mindspore::sqlite ALIAS sqlite::sqlite3) diff --git a/cmake/external_libs/tinyxml2.cmake b/cmake/external_libs/tinyxml2.cmake index e5324e62f46..40fc19045ad 100644 --- a/cmake/external_libs/tinyxml2.cmake +++ b/cmake/external_libs/tinyxml2.cmake @@ -2,23 +2,23 @@ set(tinyxml2_CXXFLAGS "-fstack-protector -D_FORTIFY_SOURCE=2 -O2 -Wno-unused-res set(tinyxml2_CFLAGS "-fstack-protector -D_FORTIFY_SOURCE=2 -O2") if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/tinyxml2/repository/archive/8.0.0.tar.gz") - set(MD5 "5dc535c8b34ee621fe2128f072d275b5") + set(REQ_URL "https://gitee.com/mirrors/tinyxml2/repository/archive/8.0.0.tar.gz") + set(MD5 "5dc535c8b34ee621fe2128f072d275b5") else() - set(REQ_URL "https://github.com/leethomason/tinyxml2/archive/8.0.0.tar.gz") - set(MD5 "5dc535c8b34ee621fe2128f072d275b5") + set(REQ_URL "https://github.com/leethomason/tinyxml2/archive/8.0.0.tar.gz") + set(MD5 "5dc535c8b34ee621fe2128f072d275b5") endif() - if(NOT WIN32 AND NOT APPLE) - set(tinyxml2_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") + set(tinyxml2_LDFLAGS "-Wl,-z,relro,-z,now,-z,noexecstack") endif() -mindspore_add_pkg(tinyxml2 - VER 8.0.0 - LIBS tinyxml2 - URL ${REQ_URL} - CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release - MD5 ${MD5}) +mindspore_add_pkg( + tinyxml2 + VER 8.0.0 + LIBS tinyxml2 + URL ${REQ_URL} + CMAKE_OPTION -DCMAKE_BUILD_TYPE=Release + MD5 ${MD5} + TARGET_ALIAS mindspore::tinyxml2 tinyxml2::tinyxml2) include_directories(${tinyxml2_INC}) -add_library(mindspore::tinyxml2 ALIAS tinyxml2::tinyxml2) diff --git a/cmake/external_libs/zlib.cmake b/cmake/external_libs/zlib.cmake index e8fa2b0c5b2..08d98e59fc1 100644 --- a/cmake/external_libs/zlib.cmake +++ b/cmake/external_libs/zlib.cmake @@ -1,17 +1,18 @@ if(ENABLE_GITEE) - set(REQ_URL "https://gitee.com/mirrors/zlib/repository/archive/v1.2.11.tar.gz") - set(MD5 "b0ecd8eda7c5d6ed9b4a4187363482fe") + set(REQ_URL "https://gitee.com/mirrors/zlib/repository/archive/v1.2.11.tar.gz") + set(MD5 "b0ecd8eda7c5d6ed9b4a4187363482fe") else() - set(REQ_URL "https://github.com/madler/zlib/archive/v1.2.11.tar.gz") - set(MD5 "0095d2d2d1f3442ce1318336637b695f") + set(REQ_URL "https://github.com/madler/zlib/archive/v1.2.11.tar.gz") + set(MD5 "0095d2d2d1f3442ce1318336637b695f") endif() -mindspore_add_pkg(zlib - VER 1.2.11 - LIBS z - URL ${REQ_URL} - MD5 ${MD5} - CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release) +mindspore_add_pkg( + zlib + VER 1.2.11 + LIBS z + URL ${REQ_URL} + MD5 ${MD5} + CMAKE_OPTION -DCMAKE_BUILD_TYPE:STRING=Release + TARGET_ALIAS mindspore::z zlib::z) include_directories(${zlib_INC}) -add_library(mindspore::z ALIAS zlib::z) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index a03eba9986b..848ad7d3615 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -2,436 +2,636 @@ include(FetchContent) set(FETCHCONTENT_QUIET OFF) if(CMAKE_SYSTEM_NAME MATCHES "Windows" AND ${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.17.0) - set(CMAKE_FIND_LIBRARY_SUFFIXES .dll ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES .dll ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif() function(mindspore_add_submodule_obj des_submodule_objs sub_dir submodule_name_obj) - add_subdirectory(${sub_dir}) + add_subdirectory(${sub_dir}) - if(NOT TARGET ${submodule_name_obj}) - message(FATAL_ERROR "Can not find submodule '${submodule_name_obj}'. in ${CMAKE_CURRENT_LIST_FILE}") - endif() - if("$" IN_LIST ${des_submodule_objs}) - message(FATAL_ERROR "submodule '${submodule_name_obj}' added more than once. in ${CMAKE_CURRENT_LIST_FILE}") - endif() + if(NOT TARGET ${submodule_name_obj}) + message(FATAL_ERROR "Can not find submodule '${submodule_name_obj}'. in ${CMAKE_CURRENT_LIST_FILE}") + endif() + if("$" IN_LIST ${des_submodule_objs}) + message(FATAL_ERROR "submodule '${submodule_name_obj}' added more than once. in ${CMAKE_CURRENT_LIST_FILE}") + endif() - set(${des_submodule_objs} ${${des_submodule_objs}} $ PARENT_SCOPE) + set(${des_submodule_objs} + ${${des_submodule_objs}} $ + PARENT_SCOPE) endfunction() if(DEFINED ENV{MSLIBS_CACHE_PATH}) - set(_MS_LIB_CACHE $ENV{MSLIBS_CACHE_PATH}) + set(_MS_LIB_CACHE $ENV{MSLIBS_CACHE_PATH}) else() - set(_MS_LIB_CACHE ${CMAKE_BINARY_DIR}/.mslib) + set(_MS_LIB_CACHE ${CMAKE_BINARY_DIR}/.mslib) endif() message("MS LIBS CACHE PATH: ${_MS_LIB_CACHE}") if(NOT EXISTS ${_MS_LIB_CACHE}) - file(MAKE_DIRECTORY ${_MS_LIB_CACHE}) + file(MAKE_DIRECTORY ${_MS_LIB_CACHE}) endif() if(DEFINED ENV{MSLIBS_SERVER} AND NOT ENABLE_GITEE) - set(LOCAL_LIBS_SERVER $ENV{MSLIBS_SERVER}) - message("LOCAL_LIBS_SERVER: ${LOCAL_LIBS_SERVER}") + set(LOCAL_LIBS_SERVER $ENV{MSLIBS_SERVER}) + message("LOCAL_LIBS_SERVER: ${LOCAL_LIBS_SERVER}") endif() include(ProcessorCount) ProcessorCount(N) if(JOBS) - set(THNUM ${JOBS}) + set(THNUM ${JOBS}) else() - set(JOBS 8) - if(${JOBS} GREATER ${N}) - set(THNUM ${N}) - else() - set(THNUM ${JOBS}) - endif() + set(JOBS 8) + if(${JOBS} GREATER ${N}) + set(THNUM ${N}) + else() + set(THNUM ${JOBS}) + endif() endif() message("set make thread num: ${THNUM}") if(LOCAL_LIBS_SERVER) - if(NOT ENV{no_proxy}) - set(ENV{no_proxy} "${LOCAL_LIBS_SERVER}") - else() - string(FIND $ENV{no_proxy} ${LOCAL_LIBS_SERVER} IP_POS) - if(${IP_POS} EQUAL -1) - set(ENV{no_proxy} "$ENV{no_proxy},${LOCAL_LIBS_SERVER}") - endif() + if(NOT ENV{no_proxy}) + set(ENV{no_proxy} "${LOCAL_LIBS_SERVER}") + else() + string(FIND $ENV{no_proxy} ${LOCAL_LIBS_SERVER} IP_POS) + if(${IP_POS} EQUAL -1) + set(ENV{no_proxy} "$ENV{no_proxy},${LOCAL_LIBS_SERVER}") endif() + endif() endif() function(__download_pkg pkg_name pkg_url pkg_md5) - if(LOCAL_LIBS_SERVER) - get_filename_component(_URL_FILE_NAME ${pkg_url} NAME) - set(pkg_url "http://${LOCAL_LIBS_SERVER}:8081/libs/${pkg_name}/${_URL_FILE_NAME}" ${pkg_url}) - endif() + if(LOCAL_LIBS_SERVER) + get_filename_component(_URL_FILE_NAME ${pkg_url} NAME) + set(pkg_url "http://${LOCAL_LIBS_SERVER}:8081/libs/${pkg_name}/${_URL_FILE_NAME}" ${pkg_url}) + endif() - FetchContent_Declare( - ${pkg_name} - URL ${pkg_url} - URL_HASH MD5=${pkg_md5} - ) - FetchContent_GetProperties(${pkg_name}) - message("download: ${${pkg_name}_SOURCE_DIR} , ${pkg_name} , ${pkg_url}") - if(NOT ${pkg_name}_POPULATED) - FetchContent_Populate(${pkg_name}) - set(${pkg_name}_SOURCE_DIR ${${pkg_name}_SOURCE_DIR} PARENT_SCOPE) - endif() + FetchContent_Declare( + ${pkg_name} + URL ${pkg_url} + URL_HASH MD5=${pkg_md5}) + FetchContent_GetProperties(${pkg_name}) + message("download: ${${pkg_name}_SOURCE_DIR} , ${pkg_name} , ${pkg_url}") + if(NOT ${pkg_name}_POPULATED) + FetchContent_Populate(${pkg_name}) + set(${pkg_name}_SOURCE_DIR + ${${pkg_name}_SOURCE_DIR} + PARENT_SCOPE) + endif() endfunction() function(__download_pkg_with_git pkg_name pkg_url pkg_git_commit pkg_md5) - if(LOCAL_LIBS_SERVER) - set(pkg_url "http://${LOCAL_LIBS_SERVER}:8081/libs/${pkg_name}/${pkg_git_commit}") - FetchContent_Declare( - ${pkg_name} - URL ${pkg_url} - URL_HASH MD5=${pkg_md5} - ) - else() + if(LOCAL_LIBS_SERVER) + set(pkg_url "http://${LOCAL_LIBS_SERVER}:8081/libs/${pkg_name}/${pkg_git_commit}") FetchContent_Declare( - ${pkg_name} - GIT_REPOSITORY ${pkg_url} - GIT_TAG ${pkg_git_commit}) - endif() - FetchContent_GetProperties(${pkg_name}) - message("download: ${${pkg_name}_SOURCE_DIR} , ${pkg_name} , ${pkg_url}") - if(NOT ${pkg_name}_POPULATED) - FetchContent_Populate(${pkg_name}) - set(${pkg_name}_SOURCE_DIR ${${pkg_name}_SOURCE_DIR} PARENT_SCOPE) - endif() + ${pkg_name} + URL ${pkg_url} + URL_HASH MD5=${pkg_md5}) + else() + FetchContent_Declare( + ${pkg_name} + GIT_REPOSITORY ${pkg_url} + GIT_TAG ${pkg_git_commit}) + endif() + FetchContent_GetProperties(${pkg_name}) + message("download: ${${pkg_name}_SOURCE_DIR} , ${pkg_name} , ${pkg_url}") + if(NOT ${pkg_name}_POPULATED) + FetchContent_Populate(${pkg_name}) + set(${pkg_name}_SOURCE_DIR + ${${pkg_name}_SOURCE_DIR} + PARENT_SCOPE) + endif() endfunction() - function(__find_pkg_then_add_target pkg_name pkg_exe lib_path) - unset(${pkg_name}_LIBS) + unset(${pkg_name}_LIBS) - message("_FIND:${${pkg_name}_BASE_DIR}") + message("_FIND:${${pkg_name}_BASE_DIR}") - if(pkg_exe) - find_program(${pkg_exe}_EXE ${pkg_exe} PATHS ${${pkg_name}_BASE_DIR}/bin NO_DEFAULT_PATH) - if(NOT ${pkg_exe}_EXE) - return() - endif() - add_executable(${pkg_name}::${pkg_exe} IMPORTED GLOBAL) - set_target_properties(${pkg_name}::${pkg_exe} PROPERTIES - IMPORTED_LOCATION ${${pkg_exe}_EXE} - ) - message("found ${${pkg_exe}_EXE}") + if(pkg_exe) + find_program( + ${pkg_exe}_EXE ${pkg_exe} + PATHS ${${pkg_name}_BASE_DIR}/bin + NO_DEFAULT_PATH) + if(NOT ${pkg_exe}_EXE) + return() + endif() + if(NOT TARGET ${pkg_name}::${pkg_exe}) + add_executable(${pkg_name}::${pkg_exe} IMPORTED GLOBAL) + set_target_properties(${pkg_name}::${pkg_exe} PROPERTIES IMPORTED_LOCATION ${${pkg_exe}_EXE}) + endif() + message("found ${${pkg_exe}_EXE}") + endif() + + foreach(_LIB_NAME ${ARGN}) + set(_LIB_SEARCH_NAME ${_LIB_NAME}) + set(_LIB_TYPE SHARED) + if(${pkg_name}_USE_STATIC_LIBS) + set(_LIB_SEARCH_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}${_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(_LIB_TYPE STATIC) + endif() + set(${_LIB_NAME}_LIB ${_LIB_NAME}_LIB-NOTFOUND) + if(APPLE) + find_library( + ${_LIB_NAME}_LIB ${_LIB_SEARCH_NAME} + PATHS ${${pkg_name}_BASE_DIR}/${lib_path} + NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) + else() + find_library( + ${_LIB_NAME}_LIB ${_LIB_SEARCH_NAME} + PATHS ${${pkg_name}_BASE_DIR}/${lib_path} + NO_DEFAULT_PATH) + endif() + if(NOT ${_LIB_NAME}_LIB) + return() endif() - foreach(_LIB_NAME ${ARGN}) - set(_LIB_SEARCH_NAME ${_LIB_NAME}) - set(_LIB_TYPE SHARED) - if(${pkg_name}_USE_STATIC_LIBS) - set(_LIB_SEARCH_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}${_LIB_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}") - set(_LIB_TYPE STATIC) - endif() - set(${_LIB_NAME}_LIB ${_LIB_NAME}_LIB-NOTFOUND) - if(APPLE) - find_library(${_LIB_NAME}_LIB ${_LIB_SEARCH_NAME} PATHS ${${pkg_name}_BASE_DIR}/${lib_path} - NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) - else() - find_library(${_LIB_NAME}_LIB ${_LIB_SEARCH_NAME} PATHS ${${pkg_name}_BASE_DIR}/${lib_path} - NO_DEFAULT_PATH) - endif() - if(NOT ${_LIB_NAME}_LIB) - return() - endif() + add_library(${pkg_name}::${_LIB_NAME} ${_LIB_TYPE} IMPORTED GLOBAL) + if(WIN32 AND ${_LIB_TYPE} STREQUAL "SHARED") + set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_IMPLIB_RELEASE ${${_LIB_NAME}_LIB}) + else() + set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_LOCATION ${${_LIB_NAME}_LIB}) + endif() - add_library(${pkg_name}::${_LIB_NAME} ${_LIB_TYPE} IMPORTED GLOBAL) - if(WIN32 AND ${_LIB_TYPE} STREQUAL "SHARED") - set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_IMPLIB_RELEASE ${${_LIB_NAME}_LIB}) - else() - set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES IMPORTED_LOCATION ${${_LIB_NAME}_LIB}) - endif() + if(EXISTS ${${pkg_name}_BASE_DIR}/include) + set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES + "${${pkg_name}_BASE_DIR}/include") + endif() - if(EXISTS ${${pkg_name}_BASE_DIR}/include) - set_target_properties(${pkg_name}::${_LIB_NAME} PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${${pkg_name}_BASE_DIR}/include") - endif() + list(APPEND ${pkg_name}_LIBS ${pkg_name}::${_LIB_NAME}) + message("found ${${_LIB_NAME}_LIB}") + string(REGEX REPLACE "(.+)/(.+)" "\\1" LIBPATH ${${_LIB_NAME}_LIB}) + set(${pkg_name}_LIBPATH + ${LIBPATH} + CACHE STRING INTERNAL) + endforeach() - list(APPEND ${pkg_name}_LIBS ${pkg_name}::${_LIB_NAME}) - message("found ${${_LIB_NAME}_LIB}") - STRING(REGEX REPLACE "(.+)/(.+)" "\\1" LIBPATH ${${_LIB_NAME}_LIB}) - set(${pkg_name}_LIBPATH ${LIBPATH} CACHE STRING INTERNAL) - endforeach() - - set(${pkg_name}_LIBS ${${pkg_name}_LIBS} PARENT_SCOPE) + set(${pkg_name}_LIBS + ${${pkg_name}_LIBS} + PARENT_SCOPE) endfunction() function(__exec_cmd) - set(options) - set(oneValueArgs WORKING_DIRECTORY) - set(multiValueArgs COMMAND) + set(options) + set(oneValueArgs WORKING_DIRECTORY) + set(multiValueArgs COMMAND) - cmake_parse_arguments(EXEC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + cmake_parse_arguments(EXEC "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - execute_process(COMMAND ${EXEC_COMMAND} - WORKING_DIRECTORY ${EXEC_WORKING_DIRECTORY} - RESULT_VARIABLE RESULT) - if(NOT RESULT EQUAL "0") - message(FATAL_ERROR "error! when ${EXEC_COMMAND} in ${EXEC_WORKING_DIRECTORY}") - endif() + execute_process( + COMMAND ${EXEC_COMMAND} + WORKING_DIRECTORY ${EXEC_WORKING_DIRECTORY} + RESULT_VARIABLE RESULT) + if(NOT RESULT EQUAL "0") + message(FATAL_ERROR "error! when ${EXEC_COMMAND} in ${EXEC_WORKING_DIRECTORY}") + endif() endfunction() function(__check_patches pkg_patches) - # check patches - if(PKG_PATCHES) - file(TOUCH ${_MS_LIB_CACHE}/${pkg_name}_patch.md5) - file(READ ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${pkg_name}_PATCHES_MD5) + # check patches + if(PKG_PATCHES) + file(TOUCH ${_MS_LIB_CACHE}/${pkg_name}_patch.md5) + file(READ ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${pkg_name}_PATCHES_MD5) - message("patches md5:${${pkg_name}_PATCHES_MD5}") + message("patches md5:${${pkg_name}_PATCHES_MD5}") - set(${pkg_name}_PATCHES_NEW_MD5) - foreach(_PATCH ${PKG_PATCHES}) - file(MD5 ${_PATCH} _PF_MD5) - set(${pkg_name}_PATCHES_NEW_MD5 "${${pkg_name}_PATCHES_NEW_MD5},${_PF_MD5}") - endforeach() + set(${pkg_name}_PATCHES_NEW_MD5) + foreach(_PATCH ${PKG_PATCHES}) + file(MD5 ${_PATCH} _PF_MD5) + set(${pkg_name}_PATCHES_NEW_MD5 "${${pkg_name}_PATCHES_NEW_MD5},${_PF_MD5}") + endforeach() - if(NOT ${pkg_name}_PATCHES_MD5 STREQUAL ${pkg_name}_PATCHES_NEW_MD5) - set(${pkg_name}_PATCHES ${PKG_PATCHES}) - file(REMOVE_RECURSE "${_MS_LIB_CACHE}/${pkg_name}-subbuild") - file(WRITE ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${${pkg_name}_PATCHES_NEW_MD5}) - message("patches changed : ${${pkg_name}_PATCHES_NEW_MD5}") - endif() + if(NOT ${pkg_name}_PATCHES_MD5 STREQUAL ${pkg_name}_PATCHES_NEW_MD5) + set(${pkg_name}_PATCHES ${PKG_PATCHES}) + file(REMOVE_RECURSE "${_MS_LIB_CACHE}/${pkg_name}-subbuild") + file(WRITE ${_MS_LIB_CACHE}/${pkg_name}_patch.md5 ${${pkg_name}_PATCHES_NEW_MD5}) + message("patches changed : ${${pkg_name}_PATCHES_NEW_MD5}") endif() + endif() endfunction() -set(MS_FIND_NO_DEFAULT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH - NO_CMAKE_BUILDS_PATH NO_CMAKE_PACKAGE_REGISTRY NO_CMAKE_SYSTEM_PATH - NO_CMAKE_SYSTEM_PACKAGE_REGISTRY) -set(MS_FIND_NO_DEFAULT_PATH ${MS_FIND_NO_DEFAULT_PATH} PARENT_SCOPE) +# ~~~ +# Create target aliases based on a list of key-value pairs where: +# - key: target alias name +# - value: target to alias +# +# __create_target_aliases([[, ]...]) +# ~~~ +function(__create_target_aliases) + list(LENGTH ARGN n_args) + if(NOT n_args) + return() + endif() + math(EXPR is_error_length "${n_args} % 2") + if(is_error_length) + message(FATAL_ERROR "Invalid number of arguments (key-value pairs)") + endif() + + math(EXPR stop "${n_args} - 1") + foreach(idx RANGE 0 ${stop} 2) + math(EXPR idx_1 "${idx} + 1") + list(GET ARGN ${idx} tgt_alias) + list(GET ARGN ${idx_1} tgt_name) + + if(NOT TARGET ${tgt_name}) + message(FATAL_ERROR "Target ${tgt_name} cannot be found!") + endif() + + get_target_property(_aliased ${tgt_name} ALIASED_TARGET) + if(_aliased) + set(tgt_name ${_aliased}) + endif() + + get_target_property(_imported ${tgt_name} IMPORTED) + get_target_property(_imported_global ${tgt_name} IMPORTED_GLOBAL) + if(_imported AND NOT _imported_global) + set_property(TARGET ${tgt_name} PROPERTY IMPORTED_GLOBAL TRUE) + endif() + + get_target_property(_type ${tgt_name} TYPE) + if(_type STREQUAL "EXECUTABLE") + message(STATUS "add_executable(${tgt_alias} ALIAS ${tgt_name})") + add_executable(${tgt_alias} ALIAS ${tgt_name}) + else() + message(STATUS "add_library(${tgt_alias} ALIAS ${tgt_name})") + add_library(${tgt_alias} ALIAS ${tgt_name}) + endif() + endforeach() +endfunction() + +set(MS_FIND_NO_DEFAULT_PATH + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_BUILDS_PATH + NO_CMAKE_PACKAGE_REGISTRY + NO_CMAKE_SYSTEM_PATH + NO_CMAKE_SYSTEM_PACKAGE_REGISTRY) +set(MS_FIND_NO_DEFAULT_PATH + ${MS_FIND_NO_DEFAULT_PATH} + PARENT_SCOPE) function(mindspore_add_pkg pkg_name) + set(options) + set(oneValueArgs + URL + MD5 + GIT_REPOSITORY + GIT_TAG + VER + EXE + DIR + HEAD_ONLY + CMAKE_PATH + RELEASE + LIB_PATH + CUSTOM_CMAKE) + set(multiValueArgs + CMAKE_OPTION + LIBS + PRE_CONFIGURE_COMMAND + CONFIGURE_COMMAND + BUILD_OPTION + INSTALL_INCS + INSTALL_LIBS + PATCHES + SUBMODULES + SOURCEMODULES + ONLY_MAKE + ONLY_MAKE_INCS + ONLY_MAKE_LIBS + TARGET_ALIAS) + cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - set(options) - set(oneValueArgs URL MD5 GIT_REPOSITORY GIT_TAG VER EXE DIR HEAD_ONLY CMAKE_PATH RELEASE LIB_PATH CUSTOM_CMAKE) - set(multiValueArgs - CMAKE_OPTION LIBS PRE_CONFIGURE_COMMAND CONFIGURE_COMMAND BUILD_OPTION INSTALL_INCS - INSTALL_LIBS PATCHES SUBMODULES SOURCEMODULES ONLY_MAKE ONLY_MAKE_INCS ONLY_MAKE_LIBS) - cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if(NOT PKG_LIB_PATH) + set(PKG_LIB_PATH lib) + endif() - if(NOT PKG_LIB_PATH) - set(PKG_LIB_PATH lib) - endif() + if(NOT PKG_EXE) + set(PKG_EXE 0) + endif() - if(NOT PKG_EXE) - set(PKG_EXE 0) - endif() + set(__FIND_PKG_NAME ${pkg_name}) + string(TOUPPER ${pkg_name} PKG_NAME) + string(TOLOWER ${pkg_name} pkg_name) + message(CHECK_START "Looking for ${__FIND_PKG_NAME},${pkg_name}") - set(__FIND_PKG_NAME ${pkg_name}) - string(TOLOWER ${pkg_name} pkg_name) - message("pkg name:${__FIND_PKG_NAME},${pkg_name}") + if(MS_PREFER_LOCAL_PKG OR MS_${PKG_NAME}_PREFER_LOCAL) + # Prefer system installed libraries instead of compiling everything from source - set(${pkg_name}_PATCHES_HASH) - foreach(_PATCH ${PKG_PATCHES}) - file(MD5 ${_PATCH} _PF_MD5) - set(${pkg_name}_PATCHES_HASH "${${pkg_name}_PATCHES_HASH},${_PF_MD5}") - endforeach() + # TODO(dnguyen): Is this really required? # check options set(${pkg_name}_CONFIG_TXT - "${CMAKE_CXX_COMPILER_VERSION}-${CMAKE_C_COMPILER_VERSION} + "${CMAKE_CXX_COMPILER_VERSION}-${CMAKE_C_COMPILER_VERSION} ${ARGN} - ${${pkg_name}_USE_STATIC_LIBS}- ${${pkg_name}_PATCHES_HASH} ${${pkg_name}_CXXFLAGS}--${${pkg_name}_CFLAGS}--${${pkg_name}_LDFLAGS}") string(REPLACE ";" "-" ${pkg_name}_CONFIG_TXT ${${pkg_name}_CONFIG_TXT}) string(MD5 ${pkg_name}_CONFIG_HASH ${${pkg_name}_CONFIG_TXT}) - message("${pkg_name} config hash: ${${pkg_name}_CONFIG_HASH}") + if(PKG_HEAD_ONLY) + # ~~~ + # 1. Find package using CMake discovery + # 2. Set target aliases + # ~~~ + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} + PARENT_SCOPE) + add_library(${pkg_name} INTERFACE) + target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC}) + if(${PKG_RELEASE}) + __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) + endif() + else() + file(WRITE ${${pkg_name}_BASE_DIR}/options.txt ${${pkg_name}_CONFIG_TXT}) + message("${pkg_name}_SOURCE_DIR : ${${pkg_name}_SOURCE_DIR}") + endif() - set(${pkg_name}_BASE_DIR ${_MS_LIB_CACHE}/${pkg_name}_${PKG_VER}_${${pkg_name}_CONFIG_HASH}) - set(${pkg_name}_DIRPATH ${${pkg_name}_BASE_DIR} CACHE STRING INTERNAL) + __create_target_aliases(${PKG_TARGET_ALIAS}) + return() + endif() - if(EXISTS ${${pkg_name}_BASE_DIR}/options.txt AND PKG_HEAD_ONLY) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} PARENT_SCOPE) + # ============================================================================== + # Ignore system installed libraries and compile a local version instead + + set(${pkg_name}_PATCHES_HASH) + foreach(_PATCH ${PKG_PATCHES}) + file(MD5 ${_PATCH} _PF_MD5) + set(${pkg_name}_PATCHES_HASH "${${pkg_name}_PATCHES_HASH},${_PF_MD5}") + endforeach() + + # check options + set(${pkg_name}_CONFIG_TXT + "${CMAKE_CXX_COMPILER_VERSION}-${CMAKE_C_COMPILER_VERSION} + ${ARGN} - ${${pkg_name}_USE_STATIC_LIBS}- ${${pkg_name}_PATCHES_HASH} + ${${pkg_name}_CXXFLAGS}--${${pkg_name}_CFLAGS}--${${pkg_name}_LDFLAGS}") + string(REPLACE ";" "-" ${pkg_name}_CONFIG_TXT ${${pkg_name}_CONFIG_TXT}) + string(MD5 ${pkg_name}_CONFIG_HASH ${${pkg_name}_CONFIG_TXT}) + + message(STATUS "${pkg_name} config hash: ${${pkg_name}_CONFIG_HASH}") + + set(${pkg_name}_BASE_DIR ${_MS_LIB_CACHE}/${pkg_name}_${PKG_VER}_${${pkg_name}_CONFIG_HASH}) + set(${pkg_name}_DIRPATH + ${${pkg_name}_BASE_DIR} + CACHE STRING INTERNAL) + + if(EXISTS ${${pkg_name}_BASE_DIR}/options.txt AND PKG_HEAD_ONLY) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} + PARENT_SCOPE) + add_library(${pkg_name} INTERFACE) + target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC}) + if(${PKG_RELEASE}) + __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) + endif() + __create_target_aliases(${PKG_TARGET_ALIAS}) + return() + endif() + + set(${__FIND_PKG_NAME}_ROOT ${${pkg_name}_BASE_DIR}) + set(${__FIND_PKG_NAME}_ROOT + ${${pkg_name}_BASE_DIR} + PARENT_SCOPE) + + if(PKG_LIBS) + __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) + if(${pkg_name}_LIBS) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/include + PARENT_SCOPE) + message("Found libs: ${${pkg_name}_LIBS}") + __create_target_aliases(${PKG_TARGET_ALIAS}) + return() + endif() + elseif(NOT PKG_HEAD_ONLY) + find_package(${__FIND_PKG_NAME} ${PKG_VER} ${MS_FIND_NO_DEFAULT_PATH}) + if(${__FIND_PKG_NAME}_FOUND) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/include + PARENT_SCOPE) + message("Found pkg: ${__FIND_PKG_NAME}") + __create_target_aliases(${PKG_TARGET_ALIAS}) + return() + endif() + endif() + + if(NOT PKG_DIR) + if(PKG_GIT_REPOSITORY) + __download_pkg_with_git(${pkg_name} ${PKG_GIT_REPOSITORY} ${PKG_GIT_TAG} ${PKG_MD5}) + else() + __download_pkg(${pkg_name} ${PKG_URL} ${PKG_MD5}) + endif() + foreach(_SUBMODULE_FILE ${PKG_SUBMODULES}) + string(REGEX REPLACE "(.+)_(.+)" "\\1" _SUBMODEPATH ${_SUBMODULE_FILE}) + string(REGEX REPLACE "(.+)/(.+)" "\\2" _SUBMODENAME ${_SUBMODEPATH}) + file(GLOB ${pkg_name}_INSTALL_SUBMODULE ${_SUBMODULE_FILE}/*) + file(COPY ${${pkg_name}_INSTALL_SUBMODULE} DESTINATION ${${pkg_name}_SOURCE_DIR}/3rdparty/${_SUBMODENAME}) + endforeach() + else() + set(${pkg_name}_SOURCE_DIR ${PKG_DIR}) + endif() + file(WRITE ${${pkg_name}_BASE_DIR}/options.txt ${${pkg_name}_CONFIG_TXT}) + message("${pkg_name}_SOURCE_DIR : ${${pkg_name}_SOURCE_DIR}") + + foreach(_PATCH_FILE ${PKG_PATCHES}) + get_filename_component(_PATCH_FILE_NAME ${_PATCH_FILE} NAME) + set(_LF_PATCH_FILE ${CMAKE_BINARY_DIR}/_ms_patch/${_PATCH_FILE_NAME}) + configure_file( + ${_PATCH_FILE} ${_LF_PATCH_FILE} + NEWLINE_STYLE LF + @ONLY) + + message("patching ${${pkg_name}_SOURCE_DIR} -p1 < ${_LF_PATCH_FILE}") + execute_process( + COMMAND ${Patch_EXECUTABLE} -p1 + INPUT_FILE ${_LF_PATCH_FILE} + WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR} + RESULT_VARIABLE Result) + if(NOT Result EQUAL "0") + message(FATAL_ERROR "Failed patch: ${_LF_PATCH_FILE}") + endif() + endforeach() + foreach(_SOURCE_DIR ${PKG_SOURCEMODULES}) + file(GLOB ${pkg_name}_INSTALL_SOURCE ${${pkg_name}_SOURCE_DIR}/${_SOURCE_DIR}/*) + file(COPY ${${pkg_name}_INSTALL_SOURCE} DESTINATION ${${pkg_name}_BASE_DIR}/${_SOURCE_DIR}/) + endforeach() + file( + LOCK ${${pkg_name}_BASE_DIR} DIRECTORY + GUARD FUNCTION + RESULT_VARIABLE ${pkg_name}_LOCK_RET + TIMEOUT 600) + if(NOT ${pkg_name}_LOCK_RET EQUAL "0") + message(FATAL_ERROR "error! when try lock ${${pkg_name}_BASE_DIR} : ${${pkg_name}_LOCK_RET}") + endif() + + if(PKG_CUSTOM_CMAKE) + file(GLOB ${pkg_name}_cmake ${PKG_CUSTOM_CMAKE}/CMakeLists.txt) + file(COPY ${${pkg_name}_cmake} DESTINATION ${${pkg_name}_SOURCE_DIR}) + endif() + + if(${pkg_name}_SOURCE_DIR) + if(PKG_HEAD_ONLY) + file(GLOB ${pkg_name}_SOURCE_SUBDIRS ${${pkg_name}_SOURCE_DIR}/*) + file(COPY ${${pkg_name}_SOURCE_SUBDIRS} DESTINATION ${${pkg_name}_BASE_DIR}) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} + PARENT_SCOPE) + if(NOT PKG_RELEASE) add_library(${pkg_name} INTERFACE) target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC}) - if(${PKG_RELEASE}) - __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) - endif() - return() - endif() + endif() - set(${__FIND_PKG_NAME}_ROOT ${${pkg_name}_BASE_DIR}) - set(${__FIND_PKG_NAME}_ROOT ${${pkg_name}_BASE_DIR} PARENT_SCOPE) + elseif(PKG_ONLY_MAKE) + __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_CXXFLAGS} -j${THNUM} WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}) + set(PKG_INSTALL_INCS ${PKG_ONLY_MAKE_INCS}) + set(PKG_INSTALL_LIBS ${PKG_ONLY_MAKE_LIBS}) + file(GLOB ${pkg_name}_INSTALL_INCS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_INCS}) + file(GLOB ${pkg_name}_INSTALL_LIBS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_LIBS}) + file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include) + file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib) - if(PKG_LIBS) - __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) - if(${pkg_name}_LIBS) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE) - message("Found libs: ${${pkg_name}_LIBS}") - return() - endif() - elseif(NOT PKG_HEAD_ONLY) - find_package(${__FIND_PKG_NAME} ${PKG_VER} ${MS_FIND_NO_DEFAULT_PATH}) - if(${__FIND_PKG_NAME}_FOUND) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE) - message("Found pkg: ${__FIND_PKG_NAME}") - return() - endif() - endif() + elseif(PKG_CMAKE_OPTION) + # in cmake + file(MAKE_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) + if(${pkg_name}_CFLAGS) + set(${pkg_name}_CMAKE_CFLAGS "-DCMAKE_C_FLAGS=${${pkg_name}_CFLAGS}") + endif() + if(${pkg_name}_CXXFLAGS) + set(${pkg_name}_CMAKE_CXXFLAGS "-DCMAKE_CXX_FLAGS=${${pkg_name}_CXXFLAGS}") + endif() - if(NOT PKG_DIR) - if(PKG_GIT_REPOSITORY) - __download_pkg_with_git(${pkg_name} ${PKG_GIT_REPOSITORY} ${PKG_GIT_TAG} ${PKG_MD5}) + if(${pkg_name}_LDFLAGS) + if(${pkg_name}_USE_STATIC_LIBS) + # set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_STATIC_LINKER_FLAGS=${${pkg_name}_LDFLAGS}") else() - __download_pkg(${pkg_name} ${PKG_URL} ${PKG_MD5}) + set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_SHARED_LINKER_FLAGS=${${pkg_name}_LDFLAGS}") endif() - foreach(_SUBMODULE_FILE ${PKG_SUBMODULES}) - STRING(REGEX REPLACE "(.+)_(.+)" "\\1" _SUBMODEPATH ${_SUBMODULE_FILE}) - STRING(REGEX REPLACE "(.+)/(.+)" "\\2" _SUBMODENAME ${_SUBMODEPATH}) - file(GLOB ${pkg_name}_INSTALL_SUBMODULE ${_SUBMODULE_FILE}/*) - file(COPY ${${pkg_name}_INSTALL_SUBMODULE} DESTINATION ${${pkg_name}_SOURCE_DIR}/3rdparty/${_SUBMODENAME}) - endforeach() + endif() + if(APPLE) + __exec_cmd( + COMMAND + ${CMAKE_COMMAND} + ${PKG_CMAKE_OPTION} + ${${pkg_name}_CMAKE_CFLAGS} + ${${pkg_name}_CMAKE_CXXFLAGS} + ${${pkg_name}_CMAKE_LDFLAGS} + -DCMAKE_INSTALL_PREFIX=${${pkg_name}_BASE_DIR} + ${${pkg_name}_SOURCE_DIR}/${PKG_CMAKE_PATH} + WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}/_build) + __exec_cmd( + COMMAND + ${CMAKE_COMMAND} + --build + . + --target + install + -- + WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}/_build) + else() + __exec_cmd( + COMMAND + ${CMAKE_COMMAND} + ${PKG_CMAKE_OPTION} + -G + ${CMAKE_GENERATOR} + ${${pkg_name}_CMAKE_CFLAGS} + ${${pkg_name}_CMAKE_CXXFLAGS} + ${${pkg_name}_CMAKE_LDFLAGS} + -DCMAKE_INSTALL_PREFIX=${${pkg_name}_BASE_DIR} + ${${pkg_name}_SOURCE_DIR}/${PKG_CMAKE_PATH} + WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}/_build) + __exec_cmd( + COMMAND + ${CMAKE_COMMAND} + --build + . + --target + install + -- + -j${THNUM} + WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}/_build) + endif() else() - set(${pkg_name}_SOURCE_DIR ${PKG_DIR}) + if(${pkg_name}_CFLAGS) + set(${pkg_name}_MAKE_CFLAGS "CFLAGS=${${pkg_name}_CFLAGS}") + endif() + if(${pkg_name}_CXXFLAGS) + set(${pkg_name}_MAKE_CXXFLAGS "CXXFLAGS=${${pkg_name}_CXXFLAGS}") + endif() + if(${pkg_name}_LDFLAGS) + set(${pkg_name}_MAKE_LDFLAGS "LDFLAGS=${${pkg_name}_LDFLAGS}") + endif() + # in configure && make + if(PKG_PRE_CONFIGURE_COMMAND) + __exec_cmd(COMMAND ${PKG_PRE_CONFIGURE_COMMAND} WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) + endif() + + if(PKG_CONFIGURE_COMMAND) + __exec_cmd( + COMMAND + ${PKG_CONFIGURE_COMMAND} + ${${pkg_name}_MAKE_CFLAGS} + ${${pkg_name}_MAKE_CXXFLAGS} + ${${pkg_name}_MAKE_LDFLAGS} + --prefix=${${pkg_name}_BASE_DIR} + WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}) + endif() + set(${pkg_name}_BUILD_OPTION ${PKG_BUILD_OPTION}) + if(NOT PKG_CONFIGURE_COMMAND) + set(${pkg_name}_BUILD_OPTION ${${pkg_name}_BUILD_OPTION} ${${pkg_name}_MAKE_CFLAGS} + ${${pkg_name}_MAKE_CXXFLAGS} ${${pkg_name}_MAKE_LDFLAGS}) + endif() + # build + if(APPLE) + __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}) + else() + __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} -j${THNUM} WORKING_DIRECTORY + ${${pkg_name}_SOURCE_DIR}) + endif() + + if(PKG_INSTALL_INCS OR PKG_INSTALL_LIBS) + file(GLOB ${pkg_name}_INSTALL_INCS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_INCS}) + file(GLOB ${pkg_name}_INSTALL_LIBS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_LIBS}) + file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include) + file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib) + else() + __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} install WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) + endif() endif() - file(WRITE ${${pkg_name}_BASE_DIR}/options.txt ${${pkg_name}_CONFIG_TXT}) - message("${pkg_name}_SOURCE_DIR : ${${pkg_name}_SOURCE_DIR}") + endif() - foreach(_PATCH_FILE ${PKG_PATCHES}) - get_filename_component(_PATCH_FILE_NAME ${_PATCH_FILE} NAME) - set(_LF_PATCH_FILE ${CMAKE_BINARY_DIR}/_ms_patch/${_PATCH_FILE_NAME}) - configure_file(${_PATCH_FILE} ${_LF_PATCH_FILE} NEWLINE_STYLE LF @ONLY) - - message("patching ${${pkg_name}_SOURCE_DIR} -p1 < ${_LF_PATCH_FILE}") - execute_process(COMMAND ${Patch_EXECUTABLE} -p1 INPUT_FILE ${_LF_PATCH_FILE} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR} - RESULT_VARIABLE Result) - if(NOT Result EQUAL "0") - message(FATAL_ERROR "Failed patch: ${_LF_PATCH_FILE}") - endif() - endforeach() - foreach(_SOURCE_DIR ${PKG_SOURCEMODULES}) - file(GLOB ${pkg_name}_INSTALL_SOURCE ${${pkg_name}_SOURCE_DIR}/${_SOURCE_DIR}/*) - file(COPY ${${pkg_name}_INSTALL_SOURCE} DESTINATION ${${pkg_name}_BASE_DIR}/${_SOURCE_DIR}/) - endforeach() - file(LOCK ${${pkg_name}_BASE_DIR} DIRECTORY GUARD FUNCTION RESULT_VARIABLE ${pkg_name}_LOCK_RET TIMEOUT 600) - if(NOT ${pkg_name}_LOCK_RET EQUAL "0") - message(FATAL_ERROR "error! when try lock ${${pkg_name}_BASE_DIR} : ${${pkg_name}_LOCK_RET}") + if(PKG_LIBS) + __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/include + PARENT_SCOPE) + if(NOT ${pkg_name}_LIBS) + message(FATAL_ERROR "Can not find pkg: ${pkg_name}") endif() - - if(PKG_CUSTOM_CMAKE) - file(GLOB ${pkg_name}_cmake ${PKG_CUSTOM_CMAKE}/CMakeLists.txt) - file(COPY ${${pkg_name}_cmake} DESTINATION ${${pkg_name}_SOURCE_DIR}) - endif() - - if(${pkg_name}_SOURCE_DIR) - if(PKG_HEAD_ONLY) - file(GLOB ${pkg_name}_SOURCE_SUBDIRS ${${pkg_name}_SOURCE_DIR}/*) - file(COPY ${${pkg_name}_SOURCE_SUBDIRS} DESTINATION ${${pkg_name}_BASE_DIR}) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/${PKG_HEAD_ONLY} PARENT_SCOPE) - if(NOT PKG_RELEASE) - add_library(${pkg_name} INTERFACE) - target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC}) - endif() - - elseif(PKG_ONLY_MAKE) - __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_CXXFLAGS} -j${THNUM} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - set(PKG_INSTALL_INCS ${PKG_ONLY_MAKE_INCS}) - set(PKG_INSTALL_LIBS ${PKG_ONLY_MAKE_LIBS}) - file(GLOB ${pkg_name}_INSTALL_INCS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_INCS}) - file(GLOB ${pkg_name}_INSTALL_LIBS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_LIBS}) - file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include) - file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib) - - elseif(PKG_CMAKE_OPTION) - # in cmake - file(MAKE_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) - if(${pkg_name}_CFLAGS) - set(${pkg_name}_CMAKE_CFLAGS "-DCMAKE_C_FLAGS=${${pkg_name}_CFLAGS}") - endif() - if(${pkg_name}_CXXFLAGS) - set(${pkg_name}_CMAKE_CXXFLAGS "-DCMAKE_CXX_FLAGS=${${pkg_name}_CXXFLAGS}") - endif() - - if(${pkg_name}_LDFLAGS) - if(${pkg_name}_USE_STATIC_LIBS) - #set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_STATIC_LINKER_FLAGS=${${pkg_name}_LDFLAGS}") - else() - set(${pkg_name}_CMAKE_LDFLAGS "-DCMAKE_SHARED_LINKER_FLAGS=${${pkg_name}_LDFLAGS}") - endif() - endif() - if(APPLE) - __exec_cmd(COMMAND ${CMAKE_COMMAND} ${PKG_CMAKE_OPTION} - ${${pkg_name}_CMAKE_CFLAGS} ${${pkg_name}_CMAKE_CXXFLAGS} ${${pkg_name}_CMAKE_LDFLAGS} - -DCMAKE_INSTALL_PREFIX=${${pkg_name}_BASE_DIR} ${${pkg_name}_SOURCE_DIR}/${PKG_CMAKE_PATH} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) - __exec_cmd(COMMAND ${CMAKE_COMMAND} --build . --target install -- - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) - else() - __exec_cmd(COMMAND ${CMAKE_COMMAND} ${PKG_CMAKE_OPTION} -G ${CMAKE_GENERATOR} - ${${pkg_name}_CMAKE_CFLAGS} ${${pkg_name}_CMAKE_CXXFLAGS} ${${pkg_name}_CMAKE_LDFLAGS} - -DCMAKE_INSTALL_PREFIX=${${pkg_name}_BASE_DIR} ${${pkg_name}_SOURCE_DIR}/${PKG_CMAKE_PATH} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) - __exec_cmd(COMMAND ${CMAKE_COMMAND} --build . --target install -- -j${THNUM} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}/_build) - endif() - else() - if(${pkg_name}_CFLAGS) - set(${pkg_name}_MAKE_CFLAGS "CFLAGS=${${pkg_name}_CFLAGS}") - endif() - if(${pkg_name}_CXXFLAGS) - set(${pkg_name}_MAKE_CXXFLAGS "CXXFLAGS=${${pkg_name}_CXXFLAGS}") - endif() - if(${pkg_name}_LDFLAGS) - set(${pkg_name}_MAKE_LDFLAGS "LDFLAGS=${${pkg_name}_LDFLAGS}") - endif() - # in configure && make - if(PKG_PRE_CONFIGURE_COMMAND) - __exec_cmd(COMMAND ${PKG_PRE_CONFIGURE_COMMAND} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - endif() - - if(PKG_CONFIGURE_COMMAND) - __exec_cmd(COMMAND ${PKG_CONFIGURE_COMMAND} - ${${pkg_name}_MAKE_CFLAGS} ${${pkg_name}_MAKE_CXXFLAGS} ${${pkg_name}_MAKE_LDFLAGS} - --prefix=${${pkg_name}_BASE_DIR} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - endif() - set(${pkg_name}_BUILD_OPTION ${PKG_BUILD_OPTION}) - if(NOT PKG_CONFIGURE_COMMAND) - set(${pkg_name}_BUILD_OPTION ${${pkg_name}_BUILD_OPTION} - ${${pkg_name}_MAKE_CFLAGS} ${${pkg_name}_MAKE_CXXFLAGS} ${${pkg_name}_MAKE_LDFLAGS}) - endif() - # build - if(APPLE) - __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - else() - __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} ${${pkg_name}_BUILD_OPTION} -j${THNUM} - WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - endif() - - if(PKG_INSTALL_INCS OR PKG_INSTALL_LIBS) - file(GLOB ${pkg_name}_INSTALL_INCS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_INCS}) - file(GLOB ${pkg_name}_INSTALL_LIBS ${${pkg_name}_SOURCE_DIR}/${PKG_INSTALL_LIBS}) - file(COPY ${${pkg_name}_INSTALL_INCS} DESTINATION ${${pkg_name}_BASE_DIR}/include) - file(COPY ${${pkg_name}_INSTALL_LIBS} DESTINATION ${${pkg_name}_BASE_DIR}/lib) - else() - __exec_cmd(COMMAND ${CMAKE_MAKE_PROGRAM} install WORKING_DIRECTORY ${${pkg_name}_SOURCE_DIR}) - endif() - endif() - endif() - - if(PKG_LIBS) - __find_pkg_then_add_target(${pkg_name} ${PKG_EXE} ${PKG_LIB_PATH} ${PKG_LIBS}) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE) - if(NOT ${pkg_name}_LIBS) - message(FATAL_ERROR "Can not find pkg: ${pkg_name}") - endif() - else() - find_package(${__FIND_PKG_NAME} ${PKG_VER} QUIET ${MS_FIND_NO_DEFAULT_PATH}) - if(${__FIND_PKG_NAME}_FOUND) - set(${pkg_name}_INC ${${pkg_name}_BASE_DIR}/include PARENT_SCOPE) - message("Found pkg: ${${__FIND_PKG_NAME}_LIBRARIES}") - return() - endif() + else() + find_package(${__FIND_PKG_NAME} ${PKG_VER} QUIET ${MS_FIND_NO_DEFAULT_PATH}) + if(${__FIND_PKG_NAME}_FOUND) + set(${pkg_name}_INC + ${${pkg_name}_BASE_DIR}/include + PARENT_SCOPE) + message("Found pkg: ${${__FIND_PKG_NAME}_LIBRARIES}") + __create_target_aliases(${PKG_TARGET_ALIAS}) + return() endif() + endif() + __create_target_aliases(${PKG_TARGET_ALIAS}) endfunction()