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
@@ -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") | |||||
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() | |||||
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) | |||||
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) | ||||
@@ -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() { | |||||
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}) | |||||
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) | |||||
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 | ||||
@@ -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>" | ||||