From cdc3d169c30729043e5b8e76419332ff19804ad4 Mon Sep 17 00:00:00 2001 From: wenfangpei Date: Fri, 10 Jul 2020 16:36:02 +0800 Subject: [PATCH] Modify reason:when downloading gtest supporting "MSLIBS_SERVER" Modify content: Submitter:p00355434 Reviewer: --- .gitmodules | 3 - CMakeLists.txt | 17 ++--- cmake/external_libs/gtest.cmake | 15 +++++ cmake/external_libs/isl.cmake | 2 +- cmake/utils.cmake | 106 ++++++++++++++++++++++++++++-- tests/unittest_cpp/CMakeLists.txt | 16 +++-- third_party/googletest | 1 - 7 files changed, 131 insertions(+), 29 deletions(-) delete mode 100644 .gitmodules create mode 100644 cmake/external_libs/gtest.cmake delete mode 160000 third_party/googletest diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 5a4e85a..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "third_party/googletest"] - path = third_party/googletest - url = https://github.com/google/googletest.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 37a627f..b19926e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ project(akg C CXX) set(AKG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +include(cmake/RT.cmake) include(cmake/utils.cmake) include(cmake/external_libs/isl.cmake) if(ENABLE_AKG) @@ -35,6 +36,11 @@ else() message("-- Build akg alone") execute_process(COMMAND bash ${AKG_SOURCE_DIR}/third_party/apply_patches.sh ${CMAKE_CURRENT_BINARY_DIR} "akg") set(TVM_DIR "${CMAKE_BINARY_DIR}/incubator-tvm") + + include(cmake/external_libs/gtest.cmake) + add_subdirectory(${AKG_SOURCE_DIR}/tests/unittest_cpp) + set(GTEST_DIR "${CMAKE_CURRENT_BINARY_DIR}/_deps/gtest-src") + set(UNITTEST_DIR "${AKG_SOURCE_DIR}/tests/unittest_cpp") endif() set(ISL_DIR "${CMAKE_BINARY_DIR}/isl") @@ -86,8 +92,6 @@ add_subdirectory(${AKG_SOURCE_DIR}/third_party/isl_wrap isl_fixed) # initial variables set(TVM_LINKER_LIBS isl_fixed) -# lib contain dlopen and dlclose -set(TVM_RUNTIME_LINKER_LIBS ${CMAKE_DL_LIBS}) add_definitions(-DPICOJSON_USE_INT64=1) add_definitions(-DDMLC_LOG_CUSTOMIZE=1) @@ -95,9 +99,6 @@ if(USE_AKG_LOG) add_definitions(-DUSE_AKG_LOG=1) endif() -include(cmake/RT.cmake) - - # Generic compilation options include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-std=c++11" SUPPORT_CXX11) @@ -241,7 +242,6 @@ target_include_directories(akg PRIVATE "${TVM_DIR}/topi/include") # Installation rules install(TARGETS akg DESTINATION lib${LIB_SUFFIX}) - if(ENABLE_AKG) install( DIRECTORY @@ -253,8 +253,3 @@ if(ENABLE_AKG) #file(COPY ${CMAKE_CURRENT_BINARY_DIR}/libakg.so DESTINATION "${AKG_SOURCE_DIR}/output") endif() -# unittest_cpp -add_subdirectory(${AKG_SOURCE_DIR}/third_party/googletest) -add_subdirectory(${AKG_SOURCE_DIR}/tests/unittest_cpp) -set(GTEST_DIR "${AKG_SOURCE_DIR}/third_party/googletest") -set(UNITTEST_CPP_DIR "${AKG_SOURCE_DIR}/tests/unittest_cpp") diff --git a/cmake/external_libs/gtest.cmake b/cmake/external_libs/gtest.cmake new file mode 100644 index 0000000..d7e0d33 --- /dev/null +++ b/cmake/external_libs/gtest.cmake @@ -0,0 +1,15 @@ +set(gtest_CXXFLAGS "-D_FORTIFY_SOURCE=2 -O2 -fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack") +set(gtest_CFLAGS "-D_FORTIFY_SOURCE=2 -O2 -fstack-protector-all -Wl,-z,relro,-z,now,-z,noexecstack") + +akg_add_pkg(gtest + VER 1.8.0 + LIBS gtest + URL https://github.com/google/googletest/archive/release-1.8.0.tar.gz + MD5 16877098823401d1bf2ed7891d7dce36 + CMAKE_OPTION -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF + -DCMAKE_MACOSX_RPATH=TRUE -Dgtest_disable_pthreads=ON) +include_directories(${gtest_INC}) +add_library(akg::gtest ALIAS gtest::gtest) + +file(COPY ${gtest_LIBPATH}/libgtest.a DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) +file(COPY ${gtest_LIBPATH}/libgtest_main.a DESTINATION ${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) diff --git a/cmake/external_libs/isl.cmake b/cmake/external_libs/isl.cmake index a46f336..e9075f7 100644 --- a/cmake/external_libs/isl.cmake +++ b/cmake/external_libs/isl.cmake @@ -1,4 +1,4 @@ -mindspore_add_pkg(isl +akg_add_pkg(isl VER 0.22 URL http://isl.gforge.inria.fr/isl-0.22.tar.gz MD5 671d0a5e10467a5c6db0893255278845 diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 26ef3a6..a9bd5e0 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -5,7 +5,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "Windows" AND ${CMAKE_VERSION} VERSION_GREATER_EQU set(CMAKE_FIND_LIBRARY_SUFFIXES .dll ${CMAKE_FIND_LIBRARY_SUFFIXES}) endif () -function(mindspore_add_submodule_obj des_submodule_objs sub_dir submodule_name_obj) +function(akg_add_submodule_obj des_submodule_objs sub_dir submodule_name_obj) add_subdirectory(${sub_dir}) @@ -198,16 +198,21 @@ function(__check_patches pkg_patches) endif () endfunction() -set(MS_FIND_NO_DEFAULT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_SYSTEM_ENVIRONMENT_PATH +set(AKG_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) -function(mindspore_add_pkg pkg_name ) +function(akg_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) + set(oneValueArgs URL MD5 GIT_REPOSITORY GIT_TAG VER EXE DIR HEAD_ONLY CMAKE_PATH) + set(multiValueArgs CMAKE_OPTION LIBS PRE_CONFIGURE_COMMAND CONFIGURE_COMMAND BUILD_OPTION INSTALL_INCS INSTALL_LIBS PATCHES) cmake_parse_arguments(PKG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + if (NOT PKG_LIB_PATH) + set(PKG_LIB_PATH lib) + endif () + + set(__FIND_PKG_NAME ${pkg_name}) string(TOLOWER ${pkg_name} pkg_name) message("pkg name:${__FIND_PKG_NAME},${pkg_name}") @@ -228,9 +233,39 @@ function(mindspore_add_pkg pkg_name ) message("${pkg_name} config hash: ${${pkg_name}_CONFIG_HASH}") - set(${pkg_name}_BASE_DIR ${_MS_LIB_CACHE}/${pkg_name}) + set(${pkg_name}_BASE_DIR ${_MS_LIB_CACHE}/${pkg_name}_${${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}) + return() + endif () + + if(NOT PKG_EXE) + set(PKG_EXE 0) + 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}") + return() + endif() + elseif(NOT PKG_HEAD_ONLY) + find_package(${__FIND_PKG_NAME} ${PKG_VER} ${AKG_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 () + if (NOT PKG_DIR) if (PKG_GIT_REPOSITORY) __download_pkg_with_git(${pkg_name} ${PKG_GIT_REPOSITORY} ${PKG_GIT_TAG} ${PKG_MD5}) @@ -251,11 +286,13 @@ function(mindspore_add_pkg pkg_name ) set(${pkg_name}_PATCHED_DIR ${CMAKE_BINARY_DIR}/${pkg_name}) if(EXISTS ${${pkg_name}_PATCHED_DIR}) - file(REMOVE_RECURSE ${${pkg_name}_PATCHED_DIR}) + file(REMOVE_RECURSE ${${pkg_name}_PATCHED_DIR}) endif() file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${pkg_name}") file(COPY ${${pkg_name}_SOURCE_DIR}/ DESTINATION ${${pkg_name}_PATCHED_DIR}) message("${pkg_name}_PATCHED_DIR : ${${pkg_name}_PATCHED_DIR}") + set(${pkg_name}_SOURCE_DIR ${${pkg_name}_PATCHED_DIR}) + message("${pkg_name}_SOURCE_DIR : ${${pkg_name}_SOURCE_DIR}") foreach(_PATCH_FILE ${PKG_PATCHES}) get_filename_component(_PATCH_FILE_NAME ${_PATCH_FILE} NAME) @@ -275,4 +312,59 @@ function(mindspore_add_pkg pkg_name ) 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) + add_library(${pkg_name} INTERFACE) + target_include_directories(${pkg_name} INTERFACE ${${pkg_name}_INC}) + + 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 () + + __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 () + 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) + 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 () + endif () endfunction() diff --git a/tests/unittest_cpp/CMakeLists.txt b/tests/unittest_cpp/CMakeLists.txt index b28ab09..efc5752 100644 --- a/tests/unittest_cpp/CMakeLists.txt +++ b/tests/unittest_cpp/CMakeLists.txt @@ -1,8 +1,14 @@ include_directories(${GTEST_DIR}/googletest/include) -include_directories(${UNITTEST_CPP_SRC}include) +include_directories(${UNITTEST_DIR}include) + include_directories(${AKG_SOURCE_DIR}/src) +include_directories(${AKG_SOURCE_DIR}/src/include) + include_directories(${TVM_DIR}/include) +include_directories(${TVM_DIR}/src) include_directories(${TVM_DIR}/topi/include) +include_directories(AFTER "${TVM_DIR}/3rdparty/dmlc-core/include") +include_directories(AFTER "${TVM_DIR}/3rdparty/dlpack/include") file( GLOB @@ -12,10 +18,8 @@ file( src/base_test/*.cc src/pass_test/*.cc) +link_directories(${CMAKE_BINARY_DIR}/googletest/googlemock/gtest) + add_executable(unittest_main ${UT_CPP_SRC}) -if (CMAKE_SYSTEM_NAME MATCHES "Linux") - target_link_libraries(unittest_main PRIVATE gtest akg ${TVM_RUNTIME_LINKER_LIBS} pthread util dl) -else() - target_link_libraries(unittest_main PRIVATE gtest akg ${TVM_RUNTIME_LINKER_LIBS}) -endif() +target_link_libraries(unittest_main PRIVATE akg akg::gtest ${TVM_RUNTIME_LINKER_LIBS} rt dl pthread) diff --git a/third_party/googletest b/third_party/googletest deleted file mode 160000 index 2fe3bd9..0000000 --- a/third_party/googletest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2fe3bd994b3189899d93f1d5a881e725e046fdc2 -- GitLab