Browse Source

fix(cmake/whl): reduce wheel size

as some reason: some version of trt/cudnn need
-Wl,--whole-archive attribute to fix cuda issue,
target A(CMAKE OBJECT,eg megbrain/megdnn): -Wl,--whole-archive depend on trt/cudnn
target B(SHARED LIBS,eg libmegengine.so) --> A with `PUBLIC` depends
target C(SHARED LIBS,eg _impertive.so) --> B with `PUBLIC` depends,
then ld will force link fatbin section into C, which will be undesired

what`s more, attribute PUBLIC/PRIVATE do not take effect
to OBJECT library(megbrain/megdnn)

what`s more, megengine/megengine_export have to PUBLIC for
mgb/imperative target, as SRC/include depends

so we pull cudalib depend from megbrain/megdnn to
megengine/megengine_export on linux os, to finall
target at windows os, for example lar on windows

GitOrigin-RevId: b278a69e1c
tags/v1.3.0
Megvii Engine Team 4 years ago
parent
commit
ae8b38f634
9 changed files with 13 additions and 25 deletions
  1. +0
    -2
      CMakeLists.txt
  2. +0
    -1
      dnn/src/CMakeLists.txt
  3. +1
    -1
      dnn/test/CMakeLists.txt
  4. +3
    -13
      imperative/CMakeLists.txt
  5. +2
    -1
      imperative/test/CMakeLists.txt
  6. +3
    -0
      scripts/whl/manylinux2010/do_build.sh
  7. +1
    -1
      sdk/load-and-run/CMakeLists.txt
  8. +2
    -1
      src/CMakeLists.txt
  9. +1
    -5
      test/CMakeLists.txt

+ 0
- 2
CMakeLists.txt View File

@@ -53,11 +53,9 @@ option(MGE_WITH_DISTRIBUTED "Build with distributed support" ON)
option(MGE_BUILD_IMPERATIVE_RT "Build _imperative_rt Python Module " ON) option(MGE_BUILD_IMPERATIVE_RT "Build _imperative_rt Python Module " ON)
option(MGE_BUILD_SDK "Build load_and_run" ON) option(MGE_BUILD_SDK "Build load_and_run" ON)
option(MGE_INFERENCE_ONLY "Build inference only library." OFF) option(MGE_INFERENCE_ONLY "Build inference only library." OFF)
option(MGE_WITH_PYTHON_MODULE "Build MegEngine legacy Python Module." OFF)
option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON) option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON)
option(MGE_WITH_ROCM "Enable ROCM support" OFF) option(MGE_WITH_ROCM "Enable ROCM support" OFF)



if(NOT ${MGE_BIN_REDUCE} STREQUAL "") if(NOT ${MGE_BIN_REDUCE} STREQUAL "")
message(STATUS "build with BIN REDUCE") message(STATUS "build with BIN REDUCE")
if(MGE_WITH_MINIMUM_SIZE) if(MGE_WITH_MINIMUM_SIZE)


+ 0
- 1
dnn/src/CMakeLists.txt View File

@@ -184,7 +184,6 @@ if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64")
target_link_libraries(megdnn PRIVATE dnnl) target_link_libraries(megdnn PRIVATE dnnl)
endif() endif()
endif() endif()
target_link_libraries(megdnn PRIVATE ${MGE_CUDA_LIBS})
if (BUILD_SHARED_LIBS) if (BUILD_SHARED_LIBS)
target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_BLAS_LIBS}>) target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_BLAS_LIBS}>)
else() else()


+ 1
- 1
dnn/test/CMakeLists.txt View File

@@ -48,7 +48,7 @@ endif()
add_executable(megdnn_test ${SOURCES}) add_executable(megdnn_test ${SOURCES})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
target_link_libraries(megdnn_test gtest) target_link_libraries(megdnn_test gtest)
target_link_libraries(megdnn_test megdnn ${MGE_BLAS_LIBS})
target_link_libraries(megdnn_test megdnn ${MGE_BLAS_LIBS} ${MGE_CUDA_LIBS})


if (MGE_WITH_CUDA) if (MGE_WITH_CUDA)
target_link_libraries(megdnn_test cutlass) target_link_libraries(megdnn_test cutlass)


+ 3
- 13
imperative/CMakeLists.txt View File

@@ -28,22 +28,12 @@ if (APPLE)
target_link_libraries(${MODULE_NAME} PRIVATE megengine_export) target_link_libraries(${MODULE_NAME} PRIVATE megengine_export)
elseif (MSVC OR WIN32) elseif (MSVC OR WIN32)
# Windows does not support implicitly importing data members from DLL. # Windows does not support implicitly importing data members from DLL.
target_link_libraries(${MODULE_NAME} PRIVATE megbrain megdnn)
target_link_libraries(${MODULE_NAME} PRIVATE megbrain megdnn ${MGE_CUDA_LIBS})
message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}") message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}")
set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}") set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}")
else() else()
if (MGE_WITH_PYTHON_MODULE)
# use to fix runtime crash when build both mgb(MGE_WITH_PYTHON_MODULE) and imperative(MGE_BUILD_IMPERATIVE_RT)
target_link_libraries(${MODULE_NAME} PRIVATE megengine_export -Wl,--version-script=${MGE_VERSION_SCRIPT})
else()
# use to reduce whl size by depend on megbrain/dnn directly, caused by cmake create two cuda fatbin
# elf section on both megengine_export and target which depend on megengine_export
target_link_libraries(${MODULE_NAME} PRIVATE megbrain megdnn -Wl,--version-script=${MGE_VERSION_SCRIPT})
if (MGE_WITH_DISTRIBUTED)
message(VERBOSE "Imperative configured to link megray")
target_link_libraries(${MODULE_NAME} PRIVATE megray)
endif()
endif()
# use to fix runtime crash when build both mgb(MGE_WITH_PYTHON_MODULE) and imperative(MGE_BUILD_IMPERATIVE_RT)
target_link_libraries(${MODULE_NAME} PRIVATE megengine_export -Wl,--version-script=${MGE_VERSION_SCRIPT})
endif() endif()


add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/range-v3 ${PROJECT_BINARY_DIR}/third_party/range-v3) add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/range-v3 ${PROJECT_BINARY_DIR}/third_party/range-v3)


+ 2
- 1
imperative/test/CMakeLists.txt View File

@@ -18,7 +18,8 @@ target_include_directories(imperative_test PRIVATE ${MODULE_SRC_INCLUDE} ${PYTHO
target_compile_definitions(imperative_test PRIVATE MODULE_NAME=C) target_compile_definitions(imperative_test PRIVATE MODULE_NAME=C)
target_compile_options(imperative_test PRIVATE -Wno-unused-parameter) target_compile_options(imperative_test PRIVATE -Wno-unused-parameter)


set(LINK_LIBS megbrain megdnn gtest gmock pybind11::embed range-v3)
set(LINK_LIBS megbrain megdnn ${MGE_CUDA_LIBS} gtest gmock pybind11::embed range-v3)

if(MGE_WITH_CUDA) if(MGE_WITH_CUDA)
list(APPEND LINK_LIBS cudart) list(APPEND LINK_LIBS cudart)
endif() endif()


+ 3
- 0
scripts/whl/manylinux2010/do_build.sh View File

@@ -34,6 +34,9 @@ function patch_elf_depend_lib() {


patchelf --remove-rpath ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so patchelf --remove-rpath ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so
patchelf --force-rpath --set-rpath '$ORIGIN/lib' ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so patchelf --force-rpath --set-rpath '$ORIGIN/lib' ${BUILD_DIR}/staging/megengine/core/_imperative_rt.so
cp ${BUILD_DIR}/src/libmegengine_export.so ${LIBS_DIR}
patchelf --remove-rpath ${LIBS_DIR}/libmegengine_export.so
patchelf --force-rpath --set-rpath '$ORIGIN/.' ${LIBS_DIR}/libmegengine_export.so




if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then if [ ${BUILD_WHL_CPU_ONLY} = "OFF" ]; then


+ 1
- 1
sdk/load-and-run/CMakeLists.txt View File

@@ -4,7 +4,7 @@ add_executable (load_and_run ${SOURCES})


if (WIN32) if (WIN32)
# Windows does not support implicitly importing data members from DLL. # Windows does not support implicitly importing data members from DLL.
target_link_libraries(load_and_run megbrain megdnn)
target_link_libraries(load_and_run megbrain megdnn ${MGE_CUDA_LIBS})
else() else()
target_link_libraries (load_and_run megengine) target_link_libraries (load_and_run megengine)
endif() endif()


+ 2
- 1
src/CMakeLists.txt View File

@@ -92,7 +92,6 @@ if(MGE_WITH_DISTRIBUTED)
target_include_directories(megbrain PRIVATE ${CPPZMQ_INC} ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(megbrain PRIVATE ${CPPZMQ_INC} ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries (megbrain PRIVATE megray) target_link_libraries (megbrain PRIVATE megray)
endif() endif()
target_link_libraries(megbrain PRIVATE ${MGE_CUDA_LIBS})
target_link_libraries(megbrain PUBLIC ${MGE_CAMBRICON_LIBS}) target_link_libraries(megbrain PUBLIC ${MGE_CAMBRICON_LIBS})
target_link_libraries(megbrain PUBLIC ${MGE_ATLAS_LIBS}) target_link_libraries(megbrain PUBLIC ${MGE_ATLAS_LIBS})
if(MGE_WITH_JIT AND MGE_WITH_HALIDE) if(MGE_WITH_JIT AND MGE_WITH_HALIDE)
@@ -189,6 +188,7 @@ if(MGE_BUILD_IMPERATIVE_RT
message(VERBOSE "create a export SHARED lib for python use") message(VERBOSE "create a export SHARED lib for python use")
add_library(megengine_export SHARED) add_library(megengine_export SHARED)
target_link_libraries(megengine_export PUBLIC megbrain megdnn) target_link_libraries(megengine_export PUBLIC megbrain megdnn)
target_link_libraries(megengine_export PRIVATE ${MGE_CUDA_LIBS})
if (MGE_WITH_DISTRIBUTED) if (MGE_WITH_DISTRIBUTED)
message(VERBOSE "megengine_export configured to link megray") message(VERBOSE "megengine_export configured to link megray")
target_link_libraries(megengine_export PUBLIC megray) target_link_libraries(megengine_export PUBLIC megray)
@@ -196,6 +196,7 @@ if(MGE_BUILD_IMPERATIVE_RT
endif() endif()
# Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF # Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF
add_library(megengine) add_library(megengine)
target_link_libraries(megengine PRIVATE ${MGE_CUDA_LIBS})
target_link_libraries(megengine PUBLIC megbrain megdnn) target_link_libraries(megengine PUBLIC megbrain megdnn)
if (UNIX AND NOT APPLE) if (UNIX AND NOT APPLE)
# TODO: Use target_link_options after upgrading to CMake 3.13 # TODO: Use target_link_options after upgrading to CMake 3.13


+ 1
- 5
test/CMakeLists.txt View File

@@ -18,11 +18,7 @@ endif()


add_executable(megbrain_test ${SOURCES}) add_executable(megbrain_test ${SOURCES})
target_link_libraries(megbrain_test gtest gmock) target_link_libraries(megbrain_test gtest gmock)
if(MSVC OR WIN32)
target_link_libraries(megbrain_test megbrain megdnn)
else()
target_link_libraries(megbrain_test megengine)
endif()
target_link_libraries(megbrain_test megbrain megdnn ${MGE_CUDA_LIBS})
if(CXX_SUPPORT_WCLASS_MEMACCESS) if(CXX_SUPPORT_WCLASS_MEMACCESS)
if(MGE_WITH_CUDA) if(MGE_WITH_CUDA)
target_compile_options(megbrain_test PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-class-memaccess>" target_compile_options(megbrain_test PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-class-memaccess>"


Loading…
Cancel
Save