fix(cmake/cuda): fix build at cuda `copy` env caused by b278a69e1
`copy` env vs `normal` env:
case a:`normal` env install CUDNN/TRT by package tool, eg, apt/yum, which
will put include file(cudnn.h/NvInfer.h) to /usr/include etc.
case b: self copy env after export CPATH with cudnn/trt include dir
case c: just copy libs, not export CPATH, only export
TRT_ROOT_DIR/CUDNN_ROOT_DIR
at case a and case b, BUILD system can find cudnn/trt headers, but
at case c, can not find. `FIX` it!
what`s more, recommend install CUDA env by case a and case c, NOT
recommend install by case b, which caused by CUDA SDK CPATH not
friendly to split c env, for example Android AOSP build env
GitOrigin-RevId: cb92123f9e58d730893fff45602d3e487b38d32c
4 years ago |
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- set(LIBMEGDNN_DEF)
- file(GLOB_RECURSE SOURCES common/*.cpp naive/*.cpp)
-
- # Build configure
- list(APPEND SOURCES ${PROJECT_BINARY_DIR}/genfiles/megbrain_build_config.h)
-
- if(NOT ${MGE_ARCH} STREQUAL "naive")
- file(GLOB_RECURSE SOURCES_ fallback/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- if(${MGE_ARCH} STREQUAL "fallback")
- message(WARNING "build only with fallback")
- elseif(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386")
- file(GLOB_RECURSE SOURCES_ x86/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- if(NOT MSVC)
- file(GLOB_RECURSE SOURCES_ x86/*.S)
- set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
- list(APPEND SOURCES ${SOURCES_})
- endif()
- elseif(${MGE_ARCH} STREQUAL "armv7")
- file(GLOB_RECURSE SOURCES_ armv7/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- file(GLOB_RECURSE SOURCES_ arm_common/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- file(GLOB_RECURSE SOURCES_ armv7/*.S)
- set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
- list(APPEND SOURCES ${SOURCES_})
- elseif(${MGE_ARCH} STREQUAL "aarch64")
- file(GLOB_RECURSE SOURCES_ aarch64/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- file(GLOB_RECURSE SOURCES_ arm_common/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- file(GLOB_RECURSE SOURCES_ aarch64/*.S)
- set_source_files_properties(${SOURCES_} PROPERTIES LANGUAGE C)
- list(APPEND SOURCES ${SOURCES_})
- endif()
- endif()
-
- if(MGE_WITH_MIDOUT_PROFILE)
- list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/third_party/midout/src/midout.cpp)
- endif()
-
- ###############################################################################
- # HIP_COMPILE
- ###############################################################################
- macro (HIP_COMPILE _hip_target _hip_objs)
- # Separate the sources from the options
- HIP_GET_SOURCES_AND_OPTIONS(_sources
- _cmake_options
- _hipcc_options
- _hcc_options
- _nvcc_options
- ${ARGN})
- HIP_PREPARE_TARGET_COMMANDS(${_hip_target}
- OBJ _generated_files _source_files ${_sources} ${_cmake_options}
- HIPCC_OPTIONS ${_hipcc_options}
- HCC_OPTIONS ${_hcc_options}
- NVCC_OPTIONS ${_nvcc_options})
- if(_source_files)
- list(REMOVE_ITEM _sources ${_source_files})
- endif()
-
- add_custom_target(${_hip_target})
-
- # set return value
- set(${_hip_objs} ${_generated_files})
- endmacro()
-
- if (MGE_WITH_ROCM)
- file (GLOB_RECURSE SOURCES_ rocm/*.cpp)
- list (APPEND SOURCES ${SOURCES_})
-
- # FIXME rocm may lost the first hip file, so currently we just create an
- # empty file to bypass this error.
- file(GLOB start.cpp.hip "" )
- list(APPEND HIP_SOURCES start.cpp.hip)
- configure_file(
- ${PROJECT_SOURCE_DIR}/dnn/include/hcc_detail/hcc_defs_prologue.h.in
- ${PROJECT_BINARY_DIR}/dnn/include/hcc_detail/hcc_defs_prologue.h)
-
- configure_file(
- ${PROJECT_SOURCE_DIR}/dnn/include/hcc_detail/hcc_defs_epilogue.h.in
- ${PROJECT_BINARY_DIR}/dnn/include/hcc_detail/hcc_defs_epilogue.h)
-
- file(GLOB_RECURSE HIP_SOURCES_ rocm/*.cpp.hip)
- set(HIP_TARGET_NAME megdnn_hip_kernel)
- set(_HIPCC_OPTIONS "-fPIC")
- set(_HCC_OPTIONS "-fPIC")
- set(_NVCC_OPTIONS "-fPIC")
-
- list(APPEND HIP_SOURCES ${HIP_SOURCES_})
- set_source_files_properties(${HIP_SOURCES} PROPERTIES HIP_SOURCE_PROPERTY_FORMAT 1)
- HIP_INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/dnn
- ${PROJECT_SOURCE_DIR}/dnn/include
- ${PROJECT_BINARY_DIR}/dnn
- ${PROJECT_BINARY_DIR}/genfiles
- ${PROJECT_BINARY_DIR}/dnn/include
- ${HIP_INCLUDE_DIR}
- ${MIOPEN_INCLUDE_DIR}
- ${ROCBLAS_INCLUDE_DIR}
- ${ROCRAND_INCLUDE_DIR}
- ${AMDOCL_INCLUDE_DIR})
- hip_compile(
- ${HIP_TARGET_NAME} HIPOBJS ${HIP_SOURCES}
- HIPCC_OPTIONS ${_HIPCC_OPTIONS}
- HCC_OPTIONS ${_HCC_OPTIONS}
- NVCC_OPTIONS ${_NVCC_OPTIONS})
- list(APPEND SOURCES ${HIPOBJS})
- endif ()
-
- if(MGE_WITH_CUDA)
- file(GLOB_RECURSE SOURCES_ cuda/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
-
- file(GLOB_RECURSE CUSOURCES cuda/*.cu)
-
- set(CUTLASS_GEN_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/cutlass_generator/generator.py)
- set(CUTLASS_GEN_DIR ${CMAKE_CURRENT_BINARY_DIR}/cuda/cutlass/generated)
- function(gen_cutlass_kimpl op type)
- set(CURRENT_CUTLASS_GEN_DIR ${CUTLASS_GEN_DIR}/${op}_${type})
- file(MAKE_DIRECTORY ${CURRENT_CUTLASS_GEN_DIR})
- execute_process(
- COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${CUTLASS_GEN_SCRIPT} --operations ${op} --type ${type} ${CURRENT_CUTLASS_GEN_DIR}
- RESULT_VARIABLE gen_cutlass_result
- OUTPUT_FILE ${CURRENT_CUTLASS_GEN_DIR}/gen_cutlass.log
- ERROR_FILE ${CURRENT_CUTLASS_GEN_DIR}/gen_cutlass.log
- )
- if (NOT gen_cutlass_result EQUAL 0)
- message(FATAL_ERROR "Error generating library instances. See ${CURRENT_CUTLASS_GEN_DIR}/gen_cutlass.log")
- endif()
- endfunction()
- gen_cutlass_kimpl(gemm simt)
- gen_cutlass_kimpl(gemv simt)
- gen_cutlass_kimpl(deconv simt)
- gen_cutlass_kimpl(conv2d simt)
- gen_cutlass_kimpl(conv2d tensorop8816)
- gen_cutlass_kimpl(conv2d tensorop8832)
- file(GLOB_RECURSE CUTLASS_SOURCES ${CUTLASS_GEN_DIR}/*.cu)
- list(APPEND SOURCES ${CUTLASS_SOURCES})
- list(APPEND SOURCES ${CUSOURCES})
- endif()
-
- if(MGE_WITH_CAMBRICON)
- file(GLOB_RECURSE SOURCES_ cambricon/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
-
- file(GLOB_RECURSE BANG_SOURCES cambricon/*.mlu)
- list(APPEND MEGDNN_INCLUDES "${PROJECT_SOURCE_DIR}/dnn/include")
- list(APPEND MEGDNN_INCLUDES "${PROJECT_SOURCE_DIR}/dnn")
- list(APPEND MEGDNN_INCLUDES "${PROJECT_BINARY_DIR}/genfiles")
- bang_compile(BANG_OBJS "${BANG_SOURCES}" "${MEGDNN_INCLUDES}")
- list(APPEND SOURCES ${BANG_OBJS})
-
- endif()
-
- if(MGE_WITH_ATLAS)
- file(GLOB_RECURSE SOURCES_ atlas/*.cpp)
- list(APPEND SOURCES ${SOURCES_})
- list(APPEND LIBMEGDNN_DEF -DMEGDNN_WITH_ATLAS=1)
- endif()
-
- add_definitions(${LIBMEGDNN_DEF})
- add_library(megdnn EXCLUDE_FROM_ALL OBJECT ${SOURCES})
-
- target_link_libraries(megdnn PUBLIC opr_param_defs)
- if(MGE_WITH_CUDA)
- target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:cutlass>)
- target_include_directories(megdnn PRIVATE ${CUDNN_INCLUDE_DIR})
- endif()
-
- if(MGE_WITH_ROCM)
- target_include_directories(megdnn PUBLIC
- ${HIP_INCLUDE_DIR}
- ${MIOPEN_INCLUDE_DIR}
- ${ROCBLAS_INCLUDE_DIR}
- ${ROCRAND_INCLUDE_DIR}
- ${AMDOCL_INCLUDE_DIR})
- target_link_directories(megdnn PUBLIC
- ${HIP_LIBRARY_DIR}
- ${MIOPEN_LIBRARY_DIR}
- ${ROCBLAS_LIBRARY_DIR}
- ${ROCRAND_LIBRARY_DIR}
- ${AMDOCL_LIBRARY_DIR})
- endif()
-
- if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386" OR ${MGE_ARCH} STREQUAL "armv7" OR ${MGE_ARCH} STREQUAL "aarch64")
- if(MGE_ENABLE_CPUINFO)
- target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:cpuinfo>)
- endif()
- endif()
-
- target_include_directories(megdnn
- PUBLIC
- $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/genfiles>
- $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/dnn/include>
- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
- PRIVATE
- ${PROJECT_SOURCE_DIR}/dnn
- ${PROJECT_SOURCE_DIR}/third_party/midout/src
- )
-
- install(DIRECTORY ${PROJECT_SOURCE_DIR}/dnn/include DESTINATION . FILES_MATCHING PATTERN "*.h*")
-
- if(CXX_SUPPORT_WCLASS_MEMACCESS)
- if(MGE_WITH_CUDA)
- target_compile_options(megdnn PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-Wno-class-memaccess>"
- "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-Wno-class-memaccess>")
- else()
- target_compile_options(megdnn PRIVATE "-Wno-class-memaccess")
- endif()
- endif()
- target_compile_definitions(megdnn INTERFACE ${LIBMEGDNN_DEF})
-
- if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64")
- if (BUILD_SHARED_LIBS)
- target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:dnnl>)
- else()
- target_link_libraries(megdnn PRIVATE dnnl)
- endif()
- endif()
- if (BUILD_SHARED_LIBS)
- target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_BLAS_LIBS}>)
- else()
- target_link_libraries(megdnn PRIVATE ${MGE_BLAS_LIBS})
- endif()
-
- if (MGE_WITH_ROCM)
- target_link_libraries(megdnn PRIVATE ${HIPOBJS} ${MGE_ROCM_LIBS})
- endif ()
-
- if(MGE_WITH_ATLAS)
- if (BUILD_SHARED_LIBS)
- target_link_libraries(megdnn PRIVATE $<BUILD_INTERFACE:${MGE_ATLAS_LIBS}>)
- else()
- target_link_libraries(megdnn PRIVATE ${MGE_ATLAS_LIBS})
- endif()
-
- endif()
-
- if(CMAKE_THREAD_LIBS_INIT)
- target_link_libraries(megdnn PRIVATE Threads::Threads)
- endif()
-
- if(MGE_WITH_CAMBRICON)
- target_link_libraries(megdnn PRIVATE ${BANG_OBJS} ${MGE_CAMBRICON_LIBS})
- endif()
-
- install(TARGETS megdnn EXPORT ${MGE_EXPORT_TARGETS})
|