提交 ae8b38f6 编写于 作者: M Megvii Engine Team

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: b278a69e1cdcc17cfd22da80247af3fe30f6d4e8
上级 4aaae995
...@@ -53,11 +53,9 @@ option(MGE_WITH_DISTRIBUTED "Build with distributed support" ON) ...@@ -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)
......
...@@ -184,7 +184,6 @@ if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64") ...@@ -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()
......
...@@ -48,7 +48,7 @@ endif() ...@@ -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)
......
...@@ -28,22 +28,12 @@ if (APPLE) ...@@ -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)
# 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})
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()
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)
......
...@@ -18,7 +18,8 @@ target_include_directories(imperative_test PRIVATE ${MODULE_SRC_INCLUDE} ${PYTHO ...@@ -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()
......
...@@ -34,6 +34,9 @@ function patch_elf_depend_lib() { ...@@ -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
......
...@@ -4,7 +4,7 @@ add_executable (load_and_run ${SOURCES}) ...@@ -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()
......
...@@ -92,7 +92,6 @@ if(MGE_WITH_DISTRIBUTED) ...@@ -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 ...@@ -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 ...@@ -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
......
...@@ -18,11 +18,7 @@ endif() ...@@ -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 ${MGE_CUDA_LIBS})
target_link_libraries(megbrain_test megbrain megdnn)
else()
target_link_libraries(megbrain_test megengine)
endif()
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>"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册