From c53cad2049d99c6ada2b0111a6a77d8682f0d83f Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Thu, 6 Jan 2022 16:52:56 +0800 Subject: [PATCH] feat(cmake): format all cmake file GitOrigin-RevId: 0a4ecab99b0251bd4c4ee5c49d155343c7759c84 --- CMakeLists.txt | 1835 +++++++++++---------- cmake/BuildFlatBuffers.cmake | 140 +- cmake/FetchMegBrainVersion.cmake | 58 +- cmake/Halide.cmake | 39 +- cmake/MKL_DNN.cmake | 36 +- cmake/Modules/FindNumPy.cmake | 47 +- cmake/OpenBLAS.cmake | 58 +- cmake/aclrt.cmake | 36 +- cmake/cndev.cmake | 75 +- cmake/cnlight.cmake | 63 +- cmake/cnml.cmake | 62 +- cmake/cnnl.cmake | 126 +- cmake/cnrt.cmake | 62 +- cmake/cpp_redis.cmake | 7 +- cmake/cpuinfo.cmake | 34 +- cmake/cudnn.cmake | 96 +- cmake/flatbuffers.cmake | 62 +- cmake/gflags.cmake | 3 +- cmake/gtest.cmake | 4 +- cmake/llvm-project.cmake | 171 +- cmake/magicmind.cmake | 78 +- cmake/mkl.cmake | 124 +- cmake/protobuf.cmake | 120 +- cmake/rocm.cmake | 101 +- cmake/tensorrt.cmake | 283 ++-- cmake/zmq.cmake | 32 +- dnn/CMakeLists.txt | 69 +- dnn/atlas-stub/CMakeLists.txt | 6 +- dnn/cuda-stub/CMakeLists.txt | 23 +- dnn/src/CMakeLists.txt | 416 ++--- dnn/test/CMakeLists.txt | 73 +- imperative/CMakeLists.txt | 139 +- imperative/tablegen/CMakeLists.txt | 10 +- imperative/test/CMakeLists.txt | 50 +- lite/CMakeLists.txt | 223 +-- lite/example/c_example/CMakeLists.txt | 48 +- lite/example/cpp_example/CMakeLists.txt | 52 +- lite/load_and_run/CMakeLists.txt | 73 +- lite/test/CMakeLists.txt | 43 +- src/CMakeLists.txt | 388 +++-- src/jit/test/mlir/CMakeLists.txt | 27 +- test/CMakeLists.txt | 65 +- toolchains/aarch64-linux-gnu.toolchain.cmake | 4 +- toolchains/aarch64-none-linux-gnu.toolchain.cmake | 4 +- toolchains/arm-linux-gnueabi.toolchain.cmake | 4 +- toolchains/arm-linux-gnueabihf.toolchain.cmake | 4 +- toolchains/ios.toolchain.cmake | 495 +++--- toolchains/riscv64-linux-gnu.toolchain.cmake | 10 +- tools/mlir/mgb-file-check/CMakeLists.txt | 12 +- tools/mlir/mgb-opt/CMakeLists.txt | 20 +- 50 files changed, 3295 insertions(+), 2715 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b7efcbf3..e025b9b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,14 @@ cmake_minimum_required(VERSION 3.15.2) -message(STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}" ) -if (NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") - message(WARNING "CMAKE_GENERATOR NOT EQUAL Ninja, which we do not recommend") +message(STATUS "CMAKE_GENERATOR: ${CMAKE_GENERATOR}") +if(NOT ${CMAKE_GENERATOR} STREQUAL "Ninja") + message(WARNING "CMAKE_GENERATOR NOT EQUAL Ninja, which we do not recommend") endif() -include (cmake/FetchMegBrainVersion.cmake) -project(MegEngine LANGUAGES C CXX VERSION ${MGB_VER_STRING}) +include(cmake/FetchMegBrainVersion.cmake) +project( + MegEngine + LANGUAGES C CXX + VERSION ${MGB_VER_STRING}) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -15,43 +18,55 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) set(CMAKE_POLICY_DEFAULT_CMP0048 NEW) -if(NOT MSVC AND NOT APPLE AND NOT WIN32) - set(CMAKE_CXX_ARCHIVE_CREATE " Dqc ") - set(CMAKE_CXX_ARCHIVE_APPEND " Dq ") - set(CMAKE_CXX_ARCHIVE_FINISH " -D ") +if(NOT MSVC + AND NOT APPLE + AND NOT WIN32) + set(CMAKE_CXX_ARCHIVE_CREATE " Dqc ") + set(CMAKE_CXX_ARCHIVE_APPEND " Dq ") + set(CMAKE_CXX_ARCHIVE_FINISH " -D ") endif() include(GNUInstallDirs) include(CheckCXXCompilerFlag) include(CheckIPOSupported) -CHECK_CXX_COMPILER_FLAG(-Wclass-memaccess CXX_SUPPORT_WCLASS_MEMACCESS) - -set(MGE_ARCH AUTO CACHE STRING "Architecture on which MegEngine to be built.") -set_property(CACHE MGE_ARCH PROPERTY STRINGS AUTO - x86_64 i386 - armv7 aarch64 - naive fallback -) -set (MGE_EXPORT_TARGETS MegEngine-targets) +check_cxx_compiler_flag(-Wclass-memaccess CXX_SUPPORT_WCLASS_MEMACCESS) + +set(MGE_ARCH + AUTO + CACHE STRING "Architecture on which MegEngine to be built.") +set_property( + CACHE MGE_ARCH + PROPERTY STRINGS + AUTO + x86_64 + i386 + armv7 + aarch64 + naive + fallback) +set(MGE_EXPORT_TARGETS MegEngine-targets) if(NOT "$ENV{LD_LIBRARY_PATH}" STREQUAL "") - string(REPLACE ":" ";" ALTER_LD_LIBRARY_PATHS $ENV{LD_LIBRARY_PATH}) + string(REPLACE ":" ";" ALTER_LD_LIBRARY_PATHS $ENV{LD_LIBRARY_PATH}) else() - set(ALTER_LD_LIBRARY_PATHS "") + set(ALTER_LD_LIBRARY_PATHS "") endif() if(NOT "$ENV{LIBRARY_PATH}" STREQUAL "") - string(REPLACE ":" ";" ALTER_LIBRARY_PATHS $ENV{LIBRARY_PATH}) + string(REPLACE ":" ";" ALTER_LIBRARY_PATHS $ENV{LIBRARY_PATH}) else() - set(ALTER_LIBRARY_PATHS "") + set(ALTER_LIBRARY_PATHS "") endif() option(MGE_WITH_JIT "Build MegEngine with JIT." ON) option(MGE_WITH_JIT_MLIR "Build MegEngine with MLIR JIT." OFF) option(MGE_WITH_HALIDE "Build MegEngine with Halide JIT" OFF) option(MGE_WITH_MIDOUT_PROFILE "Build MegEngine with Midout profile." OFF) -option(MGE_WITH_MINIMUM_SIZE "Swith off MGE_ENABLE_RTTI、MGE_ENABLE_EXCEPTIONS、MGE_ENABLE_LOGGING and switch on MGE_INFERENCE_ONLY so that compile minimum load_and_run." OFF) +option( + MGE_WITH_MINIMUM_SIZE + "Swith off MGE_ENABLE_RTTI、MGE_ENABLE_EXCEPTIONS、MGE_ENABLE_LOGGING and switch on MGE_INFERENCE_ONLY so that compile minimum load_and_run." + OFF) option(MGE_ARMV8_2_FEATURE_FP16 "Enable armv8.2-a+fp16 support" OFF) option(MGE_DISABLE_FLOAT16 "Disable MegEngine float16 support." OFF) option(MGE_WITH_CUDA "Enable MegEngine CUDA support." ON) @@ -81,781 +96,906 @@ option(MGE_WITH_LARGE_ARCHIVE "Enable big archive link support" OFF) option(MGE_BUILD_WITH_ASAN "Enable build with ASAN, need compiler support" OFF) option(MGE_WITH_CUSTOM_OP "Build with Custom op" OFF) if(MSVC OR WIN32) - # FIXME: static link Windows vc runtime with some version from Visual Studio have - # some runtime issue at some call PATH, for example: _imperative_rt.pyd --> megengine_shared.dll - # for example c api flush can not find the fd args, I have no idea about this issue - # as a Workround, dynamic link vc runtime, but at some case, we will static link vcrt - # when MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP/MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2, so please - # use lite_static_all_in_one(lite/CMakeLists.txt) in Windows XP env as possible - # How to install VC runtime if you env do not install, refer to: - # https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160 - option(MGE_STATIC_LINK_WITH_VC_RUNTIME "Enable mge static link with Windows vc runtime" OFF) - - option(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP "Enable deploy inference on Windows xp" OFF) - # special MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2 for Windows XP sp2(32bit) - # internal behavior: - # 1: will force define MGB_HAVE_THREAD=0, which means only support single thread - # 2: some Feature will be disable, eg: MGB_ENABLE_JSON and var sanity check, do - # not too many care this!!, if you want to use this Feature to 'DEBUG', you can - # run same model at NON-XP-SP2 env, eg Win7 or XP-SP3(build without MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) - # 3: we only support MegEngine(load_and_run) and MegEngineLite API work on XP SP2 - # some debug utils, eg, megbrain_test/megdnn_test not support run, most caused by gtest src code - # sdk caller: - # 1: as we remove mutex, when you use MSVC self API eg CreateThread to start several MegEngine instances - # in the same progress, please call MegEngine API(init/run) as serial as possible, also please - # do not use std::thread std::mutex/std::this_thread_id at SDK caller side!!! - # check dll/exe can deploy on Windows XP sp2 or not: - # please checkout scripts/misc/check_windows_xp_sp2_deploy.py - option(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2 "Enable deploy inference on Windows xp sp2" OFF) - - # PE file linked by LLVM lld can not run at Windows XP env, so we force use link.exe - # which always locate in Microsoft Visual Studio/*/*/VC/Tools/MSVC/*/bin/*/*/link.exe - set(CMAKE_LINKER "link.exe") - if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP OR MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) - set(MGE_STATIC_LINK_WITH_VC_RUNTIME ON) - message(STATUS "Force set MGE_STATIC_LINK_WITH_VC_RUNTIME ON when build for Windows XP") - - if(NOT ${MGE_ARCH} STREQUAL "i386") - message(FATAL_ERROR "only support 32bit when build for Windows xp") - endif() + # FIXME: static link Windows vc runtime with some version from Visual Studio have some + # runtime issue at some call PATH, for example: _imperative_rt.pyd --> + # megengine_shared.dll for example c api flush can not find the fd args, I have no + # idea about this issue as a Workround, dynamic link vc runtime, but at some case, we + # will static link vcrt when + # MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP/MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2, so please + # use lite_static_all_in_one(lite/CMakeLists.txt) in Windows XP env as possible How to + # install VC runtime if you env do not install, refer to: + # https://docs.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-160 + option(MGE_STATIC_LINK_WITH_VC_RUNTIME + "Enable mge static link with Windows vc runtime" OFF) + + option(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP "Enable deploy inference on Windows xp" OFF) + # special MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2 for Windows XP sp2(32bit) internal + # behavior: 1: will force define MGB_HAVE_THREAD=0, which means only support single + # thread 2: some Feature will be disable, eg: MGB_ENABLE_JSON and var sanity check, do + # not too many care this!!, if you want to use this Feature to 'DEBUG', you can run + # same model at NON-XP-SP2 env, eg Win7 or XP-SP3(build without + # MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) 3: we only support MegEngine(load_and_run) + # and MegEngineLite API work on XP SP2 some debug utils, eg, megbrain_test/megdnn_test + # not support run, most caused by gtest src code sdk caller: 1: as we remove mutex, + # when you use MSVC self API eg CreateThread to start several MegEngine instances in + # the same progress, please call MegEngine API(init/run) as serial as possible, also + # please do not use std::thread std::mutex/std::this_thread_id at SDK caller side!!! + # check dll/exe can deploy on Windows XP sp2 or not: please checkout + # scripts/misc/check_windows_xp_sp2_deploy.py + option(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2 + "Enable deploy inference on Windows xp sp2" OFF) + + # PE file linked by LLVM lld can not run at Windows XP env, so we force use link.exe + # which always locate in Microsoft Visual Studio/*/*/VC/Tools/MSVC/*/bin/*/*/link.exe + set(CMAKE_LINKER "link.exe") + if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP OR MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) + set(MGE_STATIC_LINK_WITH_VC_RUNTIME ON) + message( + STATUS "Force set MGE_STATIC_LINK_WITH_VC_RUNTIME ON when build for Windows XP") + + if(NOT ${MGE_ARCH} STREQUAL "i386") + message(FATAL_ERROR "only support 32bit when build for Windows xp") + endif() - if(NOT MGE_INFERENCE_ONLY) - message(FATAL_ERROR "only support inference when build for Windows xp") - endif() + if(NOT MGE_INFERENCE_ONLY) + message(FATAL_ERROR "only support inference when build for Windows xp") + endif() - if(MGE_WITH_CUDA) - message(FATAL_ERROR "do not support CUDA when build for Windows xp") - endif() + if(MGE_WITH_CUDA) + message(FATAL_ERROR "do not support CUDA when build for Windows xp") + endif() - # Windows XP sp3 have thread issue, Workround for it - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_WIN32_WINNT=0x0501 /Zc:threadSafeInit-") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D_WIN32_WINNT=0x0501 /Zc:threadSafeInit-") - # for Windows XP type - add_link_options("/SUBSYSTEM:CONSOLE,5.01") - # some old lib(for example mkl for xp) use legacy stdio, so we force link legacy_stdio_definitions - add_link_options("/DEFAULTLIB:legacy_stdio_definitions.lib") - - if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__DEPLOY_ON_XP_SP2__=1") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__DEPLOY_ON_XP_SP2__=1") - endif() - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_WIN32_WINNT=0x0601") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D_WIN32_WINNT=0x0601") + # Windows XP sp3 have thread issue, Workround for it + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_WIN32_WINNT=0x0501 /Zc:threadSafeInit-") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D_WIN32_WINNT=0x0501 /Zc:threadSafeInit-") + # for Windows XP type + add_link_options("/SUBSYSTEM:CONSOLE,5.01") + # some old lib(for example mkl for xp) use legacy stdio, so we force link + # legacy_stdio_definitions + add_link_options("/DEFAULTLIB:legacy_stdio_definitions.lib") + + if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__DEPLOY_ON_XP_SP2__=1") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__DEPLOY_ON_XP_SP2__=1") endif() + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_WIN32_WINNT=0x0601") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /D_WIN32_WINNT=0x0601") + endif() endif() if(MSVC OR WIN32) - message(STATUS "windows force cudnn static link") - set(MGE_WITH_CUDNN_SHARED OFF) + message(STATUS "windows force cudnn static link") + set(MGE_WITH_CUDNN_SHARED OFF) endif() if(MGE_WITH_NVRTC_STUB OR MGE_WITH_CUDA_STUB) - set(MGE_WITH_ANY_CUDA_STUB ON) + set(MGE_WITH_ANY_CUDA_STUB ON) else() - set(MGE_WITH_ANY_CUDA_STUB OFF) + set(MGE_WITH_ANY_CUDA_STUB OFF) endif() if(MGE_WITH_MIDOUT_PROFILE) - message(STATUS "build with MIDOUT PROFILE and force set MGE_WITH_MINIMUM_SIZE off and force rtti ON") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMIDOUT_PROFILING") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMIDOUT_PROFILING") - set(MGE_WITH_MINIMUM_SIZE OFF) - set(MGE_ENABLE_RTTI ON) - if(WIN32) - message(FATAL_ERROR "do not support midout at WIN32") - endif() + message( + STATUS + "build with MIDOUT PROFILE and force set MGE_WITH_MINIMUM_SIZE off and force rtti ON" + ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMIDOUT_PROFILING") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DMIDOUT_PROFILING") + set(MGE_WITH_MINIMUM_SIZE OFF) + set(MGE_ENABLE_RTTI ON) + if(WIN32) + message(FATAL_ERROR "do not support midout at WIN32") + endif() endif() set(BIN_REDUCE ${PROJECT_SOURCE_DIR}/src/bin_reduce_cmake.h) if(MGE_WITH_MINIMUM_SIZE) - message(STATUS "build with MGE_WITH_MINIMUM_SIZE bin_reduce header is: ${BIN_REDUCE}") - set(MGE_ENABLE_RTTI OFF) - set(MGE_ENABLE_LOGGING OFF) - set(MGE_ENABLE_EXCEPTIONS OFF) - set(MGE_INFERENCE_ONLY ON) - # MGE_WITH_MINIMUM_SIZE will triger unused-parameter - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") + message(STATUS "build with MGE_WITH_MINIMUM_SIZE bin_reduce header is: ${BIN_REDUCE}") + set(MGE_ENABLE_RTTI OFF) + set(MGE_ENABLE_LOGGING OFF) + set(MGE_ENABLE_EXCEPTIONS OFF) + set(MGE_INFERENCE_ONLY ON) + # MGE_WITH_MINIMUM_SIZE will triger unused-parameter + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") endif() if(NOT MGE_WITH_MIDOUT_PROFILE AND NOT WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${BIN_REDUCE}") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${BIN_REDUCE}") -endif() - -if (NOT APPLE) - # check CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT on APPLE will leak cmake crash - CHECK_CXX_COMPILER_FLAG("-ffunction-sections -fdata-sections -Wl,--gc-sections" CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) - if(CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections") - endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include ${BIN_REDUCE}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${BIN_REDUCE}") +endif() + +if(NOT APPLE) + # check CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT on APPLE will leak cmake crash + check_cxx_compiler_flag("-ffunction-sections -fdata-sections -Wl,--gc-sections" + CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) + if(CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections") + endif() endif() check_ipo_supported(RESULT IS_LTO_SUPPORT OUTPUT output_info) # LLVM on Windows report support LTO, but do not support -flto=full at link stage if(IS_LTO_SUPPORT AND NOT WIN32) - message(STATUS "lto is supported in this compiler") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto=full") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto=full") + message(STATUS "lto is supported in this compiler") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto=full") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto=full") else() - message(STATUS "lto is not supported in this compiler") + message(STATUS "lto is not supported in this compiler") endif() -if (APPLE) - set (BUILD_SHARED_LIBS OFF) - message(STATUS "build static for xcode framework require") +if(APPLE) + set(BUILD_SHARED_LIBS OFF) + message(STATUS "build static for xcode framework require") endif() -if (MGE_USE_SYSTEM_LIB) - set (MGE_CUDA_USE_STATIC OFF) +if(MGE_USE_SYSTEM_LIB) + set(MGE_CUDA_USE_STATIC OFF) endif() -if (MGB_WITH_FLATBUFFERS) - set(MGB_ENABLE_FBS_SERIALIZATION ON) +if(MGB_WITH_FLATBUFFERS) + set(MGB_ENABLE_FBS_SERIALIZATION ON) endif() if(CMAKE_TOOLCHAIN_FILE) - message(STATUS "We are cross compiling.") - message(STATUS "config FLATBUFFERS_FLATC_EXECUTABLE to: ${PROJECT_SOURCE_DIR}/build_dir/host_flatc/install/bin/flatc") - set(FLATBUFFERS_FLATC_EXECUTABLE "${PROJECT_SOURCE_DIR}/build_dir/host_flatc/install/bin/flatc") - if(ANDROID_TOOLCHAIN_ROOT) - if(NOT "${ANDROID_ARCH_NAME}" STREQUAL "") - set(ANDROID_ARCH ${ANDROID_ARCH_NAME}) - endif() - if(${ANDROID_ARCH} STREQUAL "arm") - set(MGE_ARCH "armv7") - elseif(${ANDROID_ARCH} STREQUAL "arm64") - set(MGE_ARCH "aarch64") - else() - message(FATAL_ERROR "DO NOT SUPPORT ANDROID ARCH NOW") - endif() - elseif(IOS_TOOLCHAIN_ROOT) - if(${IOS_ARCH} STREQUAL "armv7") - set(MGE_ARCH "armv7") - elseif(${IOS_ARCH} STREQUAL "arm64") - set(MGE_ARCH "aarch64") - elseif(${IOS_ARCH} STREQUAL "armv7k") - set(MGE_ARCH "armv7") - elseif(${IOS_ARCH} STREQUAL "arm64e") - set(MGE_ARCH "aarch64") - elseif(${IOS_ARCH} STREQUAL "armv7s") - set(MGE_ARCH "armv7") - else() - message(FATAL_ERROR "Unsupported IOS_ARCH.") - endif() - elseif(RISCV_TOOLCHAIN_ROOT) - set(MGE_ARCH "riscv64") - elseif(NOT "${ARM_CROSS_BUILD_ARCH}" STREQUAL "") - set(MGE_ARCH ${ARM_CROSS_BUILD_ARCH}) + message(STATUS "We are cross compiling.") + message( + STATUS + "config FLATBUFFERS_FLATC_EXECUTABLE to: ${PROJECT_SOURCE_DIR}/build_dir/host_flatc/install/bin/flatc" + ) + set(FLATBUFFERS_FLATC_EXECUTABLE + "${PROJECT_SOURCE_DIR}/build_dir/host_flatc/install/bin/flatc") + if(ANDROID_TOOLCHAIN_ROOT) + if(NOT "${ANDROID_ARCH_NAME}" STREQUAL "") + set(ANDROID_ARCH ${ANDROID_ARCH_NAME}) + endif() + if(${ANDROID_ARCH} STREQUAL "arm") + set(MGE_ARCH "armv7") + elseif(${ANDROID_ARCH} STREQUAL "arm64") + set(MGE_ARCH "aarch64") + else() + message(FATAL_ERROR "DO NOT SUPPORT ANDROID ARCH NOW") + endif() + elseif(IOS_TOOLCHAIN_ROOT) + if(${IOS_ARCH} STREQUAL "armv7") + set(MGE_ARCH "armv7") + elseif(${IOS_ARCH} STREQUAL "arm64") + set(MGE_ARCH "aarch64") + elseif(${IOS_ARCH} STREQUAL "armv7k") + set(MGE_ARCH "armv7") + elseif(${IOS_ARCH} STREQUAL "arm64e") + set(MGE_ARCH "aarch64") + elseif(${IOS_ARCH} STREQUAL "armv7s") + set(MGE_ARCH "armv7") else() - message(FATAL_ERROR "Unknown cross-compiling settings.") + message(FATAL_ERROR "Unsupported IOS_ARCH.") endif() - message(STATUS "CONFIG MGE_ARCH TO ${MGE_ARCH}") + elseif(RISCV_TOOLCHAIN_ROOT) + set(MGE_ARCH "riscv64") + elseif(NOT "${ARM_CROSS_BUILD_ARCH}" STREQUAL "") + set(MGE_ARCH ${ARM_CROSS_BUILD_ARCH}) + else() + message(FATAL_ERROR "Unknown cross-compiling settings.") + endif() + message(STATUS "CONFIG MGE_ARCH TO ${MGE_ARCH}") endif() if(${MGE_ARCH} STREQUAL "AUTO") - if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64") - set(MGE_ARCH "x86_64") - elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686") - set(MGE_ARCH "i386") - elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm64") - set(MGE_ARCH "aarch64") - elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm") - set(MGE_ARCH "armv7") - else() - message(FATAL_ERROR "Unknown machine architecture for MegEngine.") - endif() + if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL + "AMD64") + set(MGE_ARCH "x86_64") + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} + STREQUAL "i686") + set(MGE_ARCH "i386") + elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64" OR ${CMAKE_SYSTEM_PROCESSOR} + STREQUAL "arm64") + set(MGE_ARCH "aarch64") + elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm") + set(MGE_ARCH "armv7") + else() + message(FATAL_ERROR "Unknown machine architecture for MegEngine.") + endif() endif() if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) - message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") - set(CMAKE_BUILD_TYPE RelWithDebInfo) + message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") + set(CMAKE_BUILD_TYPE RelWithDebInfo) endif() -if(${CMAKE_BUILD_TYPE} STREQUAL "Release" AND NOT MGE_WITH_TEST AND NOT ${MGE_ARCH} STREQUAL "x86_64" AND NOT MGE_WITH_MIDOUT_PROFILE) - set(MGE_ENABLE_RTTI OFF) - message(STATUS "disable MGE_ENABLE_RTTI when Release/NON-x86_64/NON-MGE_WITH_MIDOUT_PROFILE mode!!") +if(${CMAKE_BUILD_TYPE} STREQUAL "Release" + AND NOT MGE_WITH_TEST + AND NOT ${MGE_ARCH} STREQUAL "x86_64" + AND NOT MGE_WITH_MIDOUT_PROFILE) + set(MGE_ENABLE_RTTI OFF) + message( + STATUS + "disable MGE_ENABLE_RTTI when Release/NON-x86_64/NON-MGE_WITH_MIDOUT_PROFILE mode!!" + ) endif() if(MSVC OR WIN32) - # for cmake after 3.15.2 - cmake_policy(SET CMP0091 NEW) - set(CMAKE_OBJECT_PATH_MAX 300) - if(MGE_BUILD_WITH_ASAN) - set(MGE_STATIC_LINK_WITH_VC_RUNTIME ON) - message(STATUS "Force set MGE_STATIC_LINK_WITH_VC_RUNTIME ON when build for Windows MGE_BUILD_WITH_ASAN") - endif() - if(MGE_STATIC_LINK_WITH_VC_RUNTIME) - if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") - else() - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") - endif() + # for cmake after 3.15.2 + cmake_policy(SET CMP0091 NEW) + set(CMAKE_OBJECT_PATH_MAX 300) + if(MGE_BUILD_WITH_ASAN) + set(MGE_STATIC_LINK_WITH_VC_RUNTIME ON) + message( + STATUS + "Force set MGE_STATIC_LINK_WITH_VC_RUNTIME ON when build for Windows MGE_BUILD_WITH_ASAN" + ) + endif() + if(MGE_STATIC_LINK_WITH_VC_RUNTIME) + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebug") else() - if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") - else() - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") - endif() + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") endif() - - add_compile_definitions(NOMINMAX=1 _USE_MATH_DEFINES=1 WIN32=1) - message(STATUS "into windows build CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}") - if (NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang-cl") - message(FATAL_ERROR "only support clang-cl for windows build, pls check detail: scripts/cmake-build/BUILD_README.md") - endif() - # on windows need append VS_PATH/VC/Tools/Llvm/x64/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows - # and VS_PATH/VC/Tools/Llvm/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows to PATH env - if (MGE_BUILD_WITH_ASAN) - message(WARNING "please do (set)export ASAN_OPTIONS=windows_hook_rtl_allocators=true when run test after build finish, caused by we link asan dll!!") - if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - message(WARNING "Windows AddressSanitizer doesn't support linking with debug runtime libraries yet, which means do not support CMAKE_BUILD_TYPE=Debug") - message(FATAL_ERROR "Please build with RelWithDebInfo or Release by : EXTRA_CMAKE_ARGS=\"-DMGE_BUILD_WITH_ASAN=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ...\"") - endif() - if("$ENV{VS_PATH}" STREQUAL "") - message(FATAL_ERROR "can not find VS_PATH, please export Visual Studio root dir to VS_PATH env") - endif() - if(${MGE_ARCH} STREQUAL "x86_64") - set(WINDOWS_ASAN_DLL_NAME "clang_rt.asan_dynamic-x86_64.lib") - set(WINDOWS_ASAN_RUNTIME_THUNK_NAME "clang_rt.asan_dynamic_runtime_thunk-x86_64") - set(WINDOWS_ASAN_PATH_SUFFIXES "VC/Tools/Llvm/x64/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows") - elseif(${MGE_ARCH} STREQUAL "i386") - set(WINDOWS_ASAN_DLL_NAME "clang_rt.asan_dynamic-i386.lib") - set(WINDOWS_ASAN_RUNTIME_THUNK_NAME "clang_rt.asan_dynamic_runtime_thunk-i386.lib") - set(WINDOWS_ASAN_PATH_SUFFIXES "VC/Tools/Llvm/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows") - else() - message(FATAL_ERROR "unsupport asan ARCH: ${MGE_ARCH} on Windows") - endif() - find_path(ASAN_DLL_PATH - NAMES ${WINDOWS_ASAN_DLL_NAME} - HINTS $ENV{VS_PATH} - PATH_SUFFIXES ${WINDOWS_ASAN_PATH_SUFFIXES} - DOC "Windows asan library path" ) - if(ASAN_DLL_PATH STREQUAL "ASAN_DLL_PATH-NOTFOUND") - message(FATAL_ERROR "can not find asan dll, please upgrade you LLVM") - endif() - - message(STATUS "Windows asan dll path: ${ASAN_DLL_PATH}") - link_directories(${ASAN_DLL_PATH}) - link_libraries(${WINDOWS_ASAN_DLL_NAME}) - link_libraries(${WINDOWS_ASAN_RUNTIME_THUNK_NAME}) - set(WIN_FLAGS "/Od -DNDEBUG -fsanitize=address") - # windows Llvm asan do not take effect when /O2 - # RELWITHDEBINFO default value is /O2, so override it - set(CMAKE_C_FLAGS_RELWITHDEBINFO "/Zi /Od /Ob1 /DNDEBUG") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Zi /Od /Ob1 /DNDEBUG") - set(CMAKE_C_FLAGS_RELEASE "/Zi /Od /Ob1 /DNDEBUG") - set(CMAKE_CXX_FLAGS_RELEASE "/Zi /Od /Ob1 /DNDEBUG") + else() + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDebugDLL") else() - set(WIN_FLAGS "/O2") + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL") endif() - # add flags for enable sse instruction optimize for X86, enable avx header to compile avx code - set(WIN_FLAGS "${WIN_FLAGS} -msse4.2 -D_AVX_ -D_AVX2_ -D__AVX__ -D__AVX2__ -D__FMA__") - # if u CPU is cascadelake series, u can enable for performance - # set(WIN_FLAGS "{WIN_FLAGS} -march=cascadelake -mtune=cascadelake") - # set(WIN_FLAGS "{WIN_FLAGS} -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vnni") - - # for windows build - set(WIN_FLAGS "${WIN_FLAGS} -Wno-error=implicit-int-conversion -Wno-error=double-promotion") - set(WIN_FLAGS "${WIN_FLAGS} -Wno-error=zero-as-null-pointer-constant -Wno-error=implicit-int-conversion") - set(WIN_FLAGS "${WIN_FLAGS} -Wno-error=float-conversion -Wno-error=shadow-field -Wno-error=covered-switch-default") - set(WIN_FLAGS "${WIN_FLAGS} -Wno-error=deprecated -Wno-error=documentation -Wno-error=unreachable-code-break") - set(WIN_FLAGS "${WIN_FLAGS} /DWIN32 -Wno-macro-redefined /wd4819") - set(WIN_FLAGS "${WIN_FLAGS} /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /DNOGDI /D_USE_MATH_DEFINES /bigobj") - set(WIN_FLAGS "${WIN_FLAGS} /Zm500 /EHs /wd4351 /wd4291 /wd4250 /wd4996 /wd4819 -Wno-inconsistent-dllimport") - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WIN_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WIN_FLAGS}") - - #FIXME: fix halide JIT on windows - message(STATUS "disable jit, halide and mlir on windows host build...") - set(MGE_WITH_HALIDE OFF) - set(MGE_WITH_JIT OFF) - set(MGE_WITH_JIT_MLIR OFF) - #FIXME: fix MegRay on windows - message(STATUS "Disable distributed build on windows host build...") - set(MGE_WITH_DISTRIBUTED OFF) -else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") - - # NONE windows DEBUG general flags - if(MGE_BUILD_WITH_ASAN) - set(CMAKE_C_FLAGS_DEBUG "-O0 -g -fsanitize=address -fno-omit-frame-pointer") - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fsanitize=address -fno-omit-frame-pointer") - else() - set(CMAKE_C_FLAGS_DEBUG "-O0 -g") - set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") + endif() + + add_compile_definitions(NOMINMAX=1 _USE_MATH_DEFINES=1 WIN32=1) + message(STATUS "into windows build CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}") + if(NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND NOT ${CMAKE_C_COMPILER_ID} + STREQUAL "Clang-cl") + message( + FATAL_ERROR + "only support clang-cl for windows build, pls check detail: scripts/cmake-build/BUILD_README.md" + ) + endif() + # on windows need append + # VS_PATH/VC/Tools/Llvm/x64/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows and + # VS_PATH/VC/Tools/Llvm/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows to PATH + # env + if(MGE_BUILD_WITH_ASAN) + message( + WARNING + "please do (set)export ASAN_OPTIONS=windows_hook_rtl_allocators=true when run test after build finish, caused by we link asan dll!!" + ) + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + message( + WARNING + "Windows AddressSanitizer doesn't support linking with debug runtime libraries yet, which means do not support CMAKE_BUILD_TYPE=Debug" + ) + message( + FATAL_ERROR + "Please build with RelWithDebInfo or Release by : EXTRA_CMAKE_ARGS=\"-DMGE_BUILD_WITH_ASAN=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ...\"" + ) endif() - - # NONE windows opt general flags - if (MGE_BUILD_WITH_ASAN) - set(OPTIMIZE_LEVEL "-g -O0 -DNDEBUG -fsanitize=address -fno-omit-frame-pointer") - elseif(ANDROID) - set(OPTIMIZE_LEVEL "-g -Ofast -DNDEBUG") - else() - set(OPTIMIZE_LEVEL "-g -O3 -DNDEBUG") + if("$ENV{VS_PATH}" STREQUAL "") + message( + FATAL_ERROR + "can not find VS_PATH, please export Visual Studio root dir to VS_PATH env") endif() - #remove finite-math-only opt from Ofast, caused by clang have a different - #runtime finite math logic, this issue do not find at g++, but as a unity - #build flags, we force add -fno-finite-math-only when compiler support - CHECK_CXX_COMPILER_FLAG("-fno-finite-math-only" CXX_NO_FINITE_MATH_ONLY_SUPPORT) - if(CXX_NO_FINITE_MATH_ONLY_SUPPORT) - message(STATUS "force add -fno-finite-math-only for this compiler") - set(OPTIMIZE_LEVEL "${OPTIMIZE_LEVEL} -fno-finite-math-only") + if(${MGE_ARCH} STREQUAL "x86_64") + set(WINDOWS_ASAN_DLL_NAME "clang_rt.asan_dynamic-x86_64.lib") + set(WINDOWS_ASAN_RUNTIME_THUNK_NAME "clang_rt.asan_dynamic_runtime_thunk-x86_64") + set(WINDOWS_ASAN_PATH_SUFFIXES + "VC/Tools/Llvm/x64/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows") + elseif(${MGE_ARCH} STREQUAL "i386") + set(WINDOWS_ASAN_DLL_NAME "clang_rt.asan_dynamic-i386.lib") + set(WINDOWS_ASAN_RUNTIME_THUNK_NAME + "clang_rt.asan_dynamic_runtime_thunk-i386.lib") + set(WINDOWS_ASAN_PATH_SUFFIXES + "VC/Tools/Llvm/lib/clang/${CMAKE_CXX_COMPILER_VERSION}/lib/windows") + else() + message(FATAL_ERROR "unsupport asan ARCH: ${MGE_ARCH} on Windows") endif() - set(CMAKE_C_FLAGS_RELEASE "${OPTIMIZE_LEVEL}") - set(CMAKE_CXX_FLAGS_RELEASE "${OPTIMIZE_LEVEL}") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LEVEL}") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LEVEL}") - #some gnu(gcc) compiler use -static -libasan have runtime issue - #also, when target is big, clang ld will take a long long long - #time when use -static-libsan, so we use dynamic asan by default - #ANDROID asan.so depends on log, so broadcast log link_libraries - #for megengine depends target, for example flatc target - if (MGE_BUILD_WITH_ASAN AND ANDROID) - link_libraries(log) + find_path( + ASAN_DLL_PATH + NAMES ${WINDOWS_ASAN_DLL_NAME} + HINTS $ENV{VS_PATH} + PATH_SUFFIXES ${WINDOWS_ASAN_PATH_SUFFIXES} + DOC "Windows asan library path") + if(ASAN_DLL_PATH STREQUAL "ASAN_DLL_PATH-NOTFOUND") + message(FATAL_ERROR "can not find asan dll, please upgrade you LLVM") endif() + + message(STATUS "Windows asan dll path: ${ASAN_DLL_PATH}") + link_directories(${ASAN_DLL_PATH}) + link_libraries(${WINDOWS_ASAN_DLL_NAME}) + link_libraries(${WINDOWS_ASAN_RUNTIME_THUNK_NAME}) + set(WIN_FLAGS "/Od -DNDEBUG -fsanitize=address") + # windows Llvm asan do not take effect when /O2 RELWITHDEBINFO default value is /O2, + # so override it + set(CMAKE_C_FLAGS_RELWITHDEBINFO "/Zi /Od /Ob1 /DNDEBUG") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/Zi /Od /Ob1 /DNDEBUG") + set(CMAKE_C_FLAGS_RELEASE "/Zi /Od /Ob1 /DNDEBUG") + set(CMAKE_CXX_FLAGS_RELEASE "/Zi /Od /Ob1 /DNDEBUG") + else() + set(WIN_FLAGS "/O2") + endif() + # add flags for enable sse instruction optimize for X86, enable avx header to compile + # avx code + set(WIN_FLAGS "${WIN_FLAGS} -msse4.2 -D_AVX_ -D_AVX2_ -D__AVX__ -D__AVX2__ -D__FMA__") + # if u CPU is cascadelake series, u can enable for performance set(WIN_FLAGS + # "{WIN_FLAGS} -march=cascadelake -mtune=cascadelake") set(WIN_FLAGS "{WIN_FLAGS} + # -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vnni") + + # for windows build + set(WIN_FLAGS + "${WIN_FLAGS} -Wno-error=implicit-int-conversion -Wno-error=double-promotion") + set(WIN_FLAGS + "${WIN_FLAGS} -Wno-error=zero-as-null-pointer-constant -Wno-error=implicit-int-conversion" + ) + set(WIN_FLAGS + "${WIN_FLAGS} -Wno-error=float-conversion -Wno-error=shadow-field -Wno-error=covered-switch-default" + ) + set(WIN_FLAGS + "${WIN_FLAGS} -Wno-error=deprecated -Wno-error=documentation -Wno-error=unreachable-code-break" + ) + set(WIN_FLAGS "${WIN_FLAGS} /DWIN32 -Wno-macro-redefined /wd4819") + set(WIN_FLAGS + "${WIN_FLAGS} /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /DNOGDI /D_USE_MATH_DEFINES /bigobj" + ) + set(WIN_FLAGS + "${WIN_FLAGS} /Zm500 /EHs /wd4351 /wd4291 /wd4250 /wd4996 /wd4819 -Wno-inconsistent-dllimport" + ) + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WIN_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WIN_FLAGS}") + + # FIXME: fix halide JIT on windows + message(STATUS "disable jit, halide and mlir on windows host build...") + set(MGE_WITH_HALIDE OFF) + set(MGE_WITH_JIT OFF) + set(MGE_WITH_JIT_MLIR OFF) + # FIXME: fix MegRay on windows + message(STATUS "Disable distributed build on windows host build...") + set(MGE_WITH_DISTRIBUTED OFF) +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") + + # NONE windows DEBUG general flags + if(MGE_BUILD_WITH_ASAN) + set(CMAKE_C_FLAGS_DEBUG "-O0 -g -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fsanitize=address -fno-omit-frame-pointer") + else() + set(CMAKE_C_FLAGS_DEBUG "-O0 -g") + set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") + endif() + + # NONE windows opt general flags + if(MGE_BUILD_WITH_ASAN) + set(OPTIMIZE_LEVEL "-g -O0 -DNDEBUG -fsanitize=address -fno-omit-frame-pointer") + elseif(ANDROID) + set(OPTIMIZE_LEVEL "-g -Ofast -DNDEBUG") + else() + set(OPTIMIZE_LEVEL "-g -O3 -DNDEBUG") + endif() + # remove finite-math-only opt from Ofast, caused by clang have a different runtime + # finite math logic, this issue do not find at g++, but as a unity build flags, we + # force add -fno-finite-math-only when compiler support + check_cxx_compiler_flag("-fno-finite-math-only" CXX_NO_FINITE_MATH_ONLY_SUPPORT) + if(CXX_NO_FINITE_MATH_ONLY_SUPPORT) + message(STATUS "force add -fno-finite-math-only for this compiler") + set(OPTIMIZE_LEVEL "${OPTIMIZE_LEVEL} -fno-finite-math-only") + endif() + set(CMAKE_C_FLAGS_RELEASE "${OPTIMIZE_LEVEL}") + set(CMAKE_CXX_FLAGS_RELEASE "${OPTIMIZE_LEVEL}") + set(CMAKE_C_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LEVEL}") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${OPTIMIZE_LEVEL}") + # some gnu(gcc) compiler use -static -libasan have runtime issue also, when target is + # big, clang ld will take a long long long time when use -static-libsan, so we use + # dynamic asan by default ANDROID asan.so depends on log, so broadcast log + # link_libraries for megengine depends target, for example flatc target + if(MGE_BUILD_WITH_ASAN AND ANDROID) + link_libraries(log) + endif() endif() if(MGE_WITH_CUDA) -include(cmake/cudnn.cmake) - if(MGE_CUDA_USE_STATIC AND ("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" VERSION_EQUAL "8.0.0") AND (NOT MGE_WITH_CUDNN_SHARED)) - message(WARNING "Static link CUDNN8 will auto enable MGE_WITH_LARGE_ARCHIVE=ON") - set(MGE_WITH_LARGE_ARCHIVE ON) - endif() -endif() -CHECK_CXX_COMPILER_FLAG(-fuse-ld=gold CXX_SUPPORT_GOLD) + include(cmake/cudnn.cmake) + if(MGE_CUDA_USE_STATIC + AND ("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" VERSION_EQUAL + "8.0.0") + AND (NOT MGE_WITH_CUDNN_SHARED)) + message(WARNING "Static link CUDNN8 will auto enable MGE_WITH_LARGE_ARCHIVE=ON") + set(MGE_WITH_LARGE_ARCHIVE ON) + endif() +endif() +check_cxx_compiler_flag(-fuse-ld=gold CXX_SUPPORT_GOLD) if(MGE_WITH_LARGE_ARCHIVE) - message(STATUS "Set -mcmodel=large and disable -fuse-ld=gold") - set(MGE_COMMON_LINKER_FLAGS "-mcmodel=large") -elseif(CXX_SUPPORT_GOLD AND NOT ANDROID AND NOT APPLE AND NOT MSVC AND NOT WIN32 AND NOT MGE_WITH_LARGE_ARCHIVE) - message(STATUS "Using GNU gold linker.") - set(MGE_COMMON_LINKER_FLAGS "-fuse-ld=gold") + message(STATUS "Set -mcmodel=large and disable -fuse-ld=gold") + set(MGE_COMMON_LINKER_FLAGS "-mcmodel=large") +elseif( + CXX_SUPPORT_GOLD + AND NOT ANDROID + AND NOT APPLE + AND NOT MSVC + AND NOT WIN32 + AND NOT MGE_WITH_LARGE_ARCHIVE) + message(STATUS "Using GNU gold linker.") + set(MGE_COMMON_LINKER_FLAGS "-fuse-ld=gold") endif() set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MGE_COMMON_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${MGE_COMMON_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MGE_COMMON_LINKER_FLAGS}") if(NOT MGE_WITH_JIT) - if(MGE_WITH_HALIDE) - message(WARNING "MGE_WITH_HALIDE is set to OFF with MGE_WITH_JIT disabled") - set(MGE_WITH_HALIDE OFF) - endif() - if(MGE_WITH_JIT_MLIR) - message(WARNING "MGE_WITH_JIT_MLIR is set to OFF with MGE_WITH_JIT disabled") - set(MGE_WITH_JIT_MLIR OFF) - endif() + if(MGE_WITH_HALIDE) + message(WARNING "MGE_WITH_HALIDE is set to OFF with MGE_WITH_JIT disabled") + set(MGE_WITH_HALIDE OFF) + endif() + if(MGE_WITH_JIT_MLIR) + message(WARNING "MGE_WITH_JIT_MLIR is set to OFF with MGE_WITH_JIT disabled") + set(MGE_WITH_JIT_MLIR OFF) + endif() endif() -# FIXME At present, there are some conflicts between the LLVM that halide -# depends on and the LLVM that MLIR depends on. Should be fixed in subsequent -# versions. +# FIXME At present, there are some conflicts between the LLVM that halide depends on and +# the LLVM that MLIR depends on. Should be fixed in subsequent versions. if(MGE_BUILD_IMPERATIVE_RT AND MGE_WITH_HALIDE) - message(FATAL_ERROR "cannot use HALIDE when building IMPERATIVE_RT") + message(FATAL_ERROR "cannot use HALIDE when building IMPERATIVE_RT") endif() if(MGE_WITH_JIT_MLIR AND MGE_WITH_HALIDE) - message(FATAL_ERROR "cannot use HALIDE with MGE_WITH_JIT_MLIR enabled") + message(FATAL_ERROR "cannot use HALIDE with MGE_WITH_JIT_MLIR enabled") endif() if(MGE_WITH_CUDA) - # FIXME: check_language(CUDA) failed when sbsa mode! - # detail: https://gitlab.kitware.com/cmake/cmake/-/issues/20676 - if(CMAKE_TOOLCHAIN_FILE) - set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER}) - message(WARNING "force set CMAKE_CUDA_HOST_COMPILER to CMAKE_CXX_COMPILER when nvcc sbsa mode!!") - endif() + # FIXME: check_language(CUDA) failed when sbsa mode! detail: + # https://gitlab.kitware.com/cmake/cmake/-/issues/20676 + if(CMAKE_TOOLCHAIN_FILE) + set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER}) + message( + WARNING + "force set CMAKE_CUDA_HOST_COMPILER to CMAKE_CXX_COMPILER when nvcc sbsa mode!!" + ) + endif() - include(CheckLanguage) - check_language(CUDA) - if(NOT CMAKE_CUDA_COMPILER AND NOT CMAKE_TOOLCHAIN_FILE) - message(FATAL_ERROR "CUDA compiler not found in PATH") - endif() + include(CheckLanguage) + check_language(CUDA) + if(NOT CMAKE_CUDA_COMPILER AND NOT CMAKE_TOOLCHAIN_FILE) + message(FATAL_ERROR "CUDA compiler not found in PATH") + endif() - # remove this after CMAKE fix nvcc sbsa - if(NOT CMAKE_CUDA_COMPILER AND CMAKE_TOOLCHAIN_FILE) - set(CMAKE_CUDA_COMPILER "nvcc") - message(WARNING "force set CMAKE_CUDA_COMPILER to nvcc when nvcc sbsa mode!!") - endif() + # remove this after CMAKE fix nvcc sbsa + if(NOT CMAKE_CUDA_COMPILER AND CMAKE_TOOLCHAIN_FILE) + set(CMAKE_CUDA_COMPILER "nvcc") + message(WARNING "force set CMAKE_CUDA_COMPILER to nvcc when nvcc sbsa mode!!") + endif() - enable_language(CUDA) - set(CMAKE_CUDA_STANDARD 14) - set(CMAKE_CUDA_STANDARD_REQUIRED ON) + enable_language(CUDA) + set(CMAKE_CUDA_STANDARD 14) + set(CMAKE_CUDA_STANDARD_REQUIRED ON) endif() if(NOT MGE_WITH_CUDA) - if(NOT MGE_ARCH STREQUAL "x86_64" AND NOT MGE_ARCH STREQUAL "i386") - message(STATUS "Disable JIT support, as the MGE_ARCH is not X86 and CUDA is not enabled.") - set(MGE_WITH_JIT OFF) - set(MGE_WITH_JIT_MLIR OFF) - endif() - set(MGE_WITH_HALIDE OFF) - message(STATUS "Disable TensorRT support, as CUDA is not enabled.") - set(MGE_WITH_TRT OFF) + if(NOT MGE_ARCH STREQUAL "x86_64" AND NOT MGE_ARCH STREQUAL "i386") + message( + STATUS "Disable JIT support, as the MGE_ARCH is not X86 and CUDA is not enabled.") + set(MGE_WITH_JIT OFF) + set(MGE_WITH_JIT_MLIR OFF) + endif() + set(MGE_WITH_HALIDE OFF) + message(STATUS "Disable TensorRT support, as CUDA is not enabled.") + set(MGE_WITH_TRT OFF) endif() find_package(PythonInterp 3 REQUIRED) -# NOTICE: just use for target, which do not depend on python api -# PURPOSE: reuse target obj when switch python3 version -# will fallback to PYTHON_EXECUTABLE if can not find in PATH env +# NOTICE: just use for target, which do not depend on python api PURPOSE: reuse target +# obj when switch python3 version will fallback to PYTHON_EXECUTABLE if can not find in +# PATH env set(PYTHON3_IN_ENV "python3") find_program(PYTHON3_EXECUTABLE_WITHOUT_VERSION ${PYTHON3_IN_ENV}) -if (PYTHON3_EXECUTABLE_WITHOUT_VERSION) - message(STATUS "use ${PYTHON3_IN_ENV} as PYTHON3_EXECUTABLE_WITHOUT_VERSION") - set(PYTHON3_EXECUTABLE_WITHOUT_VERSION ${PYTHON3_IN_ENV}) +if(PYTHON3_EXECUTABLE_WITHOUT_VERSION) + message(STATUS "use ${PYTHON3_IN_ENV} as PYTHON3_EXECUTABLE_WITHOUT_VERSION") + set(PYTHON3_EXECUTABLE_WITHOUT_VERSION ${PYTHON3_IN_ENV}) else() - message(STATUS "fallback ${PYTHON_EXECUTABLE} as PYTHON3_EXECUTABLE_WITHOUT_VERSION,\ - target which depend on PYTHON3_EXECUTABLE_WITHOUT_VERSION will be rebuild when switch python3") - set(PYTHON3_EXECUTABLE_WITHOUT_VERSION ${PYTHON_EXECUTABLE}) + message( + STATUS + "fallback ${PYTHON_EXECUTABLE} as PYTHON3_EXECUTABLE_WITHOUT_VERSION,\ + target which depend on PYTHON3_EXECUTABLE_WITHOUT_VERSION will be rebuild when switch python3" + ) + set(PYTHON3_EXECUTABLE_WITHOUT_VERSION ${PYTHON_EXECUTABLE}) endif() set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads) if(NOT "${CMAKE_THREAD_LIBS_INIT}" STREQUAL "") - if(${CMAKE_THREAD_LIBS_INIT} STREQUAL "-pthread" AND MGE_WITH_CUDA) - set_property(TARGET Threads::Threads - PROPERTY INTERFACE_COMPILE_OPTIONS "$<$:-Xcompiler=-pthread>" - "$<$>:-pthread>") - endif() -endif() - -set(MGE_BLAS MKL CACHE STRING "BLAS implementaion used by MegEngine.") + if(${CMAKE_THREAD_LIBS_INIT} STREQUAL "-pthread" AND MGE_WITH_CUDA) + set_property( + TARGET Threads::Threads + PROPERTY INTERFACE_COMPILE_OPTIONS + "$<$:-Xcompiler=-pthread>" + "$<$>:-pthread>") + endif() +endif() + +set(MGE_BLAS + MKL + CACHE STRING "BLAS implementaion used by MegEngine.") set_property(CACHE MGE_BLAS PROPERTY STRINGS MKL OpenBLAS) -set(MGE_CUDA_GENCODE "" CACHE STRING "Overwrite -gencode specifications for CUDA") +set(MGE_CUDA_GENCODE + "" + CACHE STRING "Overwrite -gencode specifications for CUDA") if(NOT CMAKE_CUDA_HOST_COMPILER) - set(CMAKE_CUDA_HOST_COMPILER $(CMAKE_CXX_COMPILER)) + set(CMAKE_CUDA_HOST_COMPILER $(CMAKE_CXX_COMPILER)) endif() if(NOT MGE_ENABLE_RTTI) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") endif() if(NOT MGE_ENABLE_EXCEPTIONS) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") endif() if(MGE_WITH_TEST) - include(cmake/gtest.cmake) + include(cmake/gtest.cmake) endif() include(cmake/gflags.cmake) if(MGE_BUILD_IMPERATIVE_RT) - set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD 17) endif() if(NOT ${MGE_WITH_CUDA} AND NOT ${MGE_WITH_ROCM}) - message(STATUS "Disable distributed support, as both CUDA and ROCm are disabled.") - set(MGE_WITH_DISTRIBUTED OFF) + message(STATUS "Disable distributed support, as both CUDA and ROCm are disabled.") + set(MGE_WITH_DISTRIBUTED OFF) endif() if(MGE_INFERENCE_ONLY) - message(STATUS "Disable distributed support for inference only build.") - set(MGE_WITH_DISTRIBUTED OFF) - message(STATUS "Disable imperative_rt python module for inference only build.") - set(MGE_BUILD_IMPERATIVE_RT OFF) + message(STATUS "Disable distributed support for inference only build.") + set(MGE_WITH_DISTRIBUTED OFF) + message(STATUS "Disable imperative_rt python module for inference only build.") + set(MGE_BUILD_IMPERATIVE_RT OFF) endif() if(MGE_WITH_JIT_MLIR OR MGE_BUILD_IMPERATIVE_RT) - include(cmake/llvm-project.cmake) + include(cmake/llvm-project.cmake) endif() if(MGE_WITH_DISTRIBUTED) - include(cmake/protobuf.cmake) - include(cmake/zmq.cmake) + include(cmake/protobuf.cmake) + include(cmake/zmq.cmake) endif() if(MGB_WITH_FLATBUFFERS) - include(cmake/flatbuffers.cmake) + include(cmake/flatbuffers.cmake) endif() if(MGE_WITH_CUDA) - include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) - foreach(path ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}) - get_filename_component(_NAME ${path} NAME) - if(NOT ${_NAME} STREQUAL "stubs") - list(APPEND CUDA_LINK_DIRECTORIES ${path}) - endif() - endforeach() - link_directories(${CUDA_LINK_DIRECTORIES}) - - set(CMAKE_CUDA_FLAGS_DEBUG "-O0 -g") - set(CMAKE_CUDA_FLAGS_RELEASE "-O3") - set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "-O3 -g") - set(CMAKE_CUDA_FLAGS_MINSIZEREL "-Os") - if(MSVC OR WIN32) - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xfatbin -compress-all") - set(CCBIN_FLAG "${CCBIN_FLAG} /wd4819 /wd4334 /wd4267 /wd4002 /wd4244 /wd4068 /std:c++14 /bigobj") - if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set(CCBIN_FLAG "${CCBIN_FLAG} -D_ITERATOR_DEBUG_LEVEL=2 -MTd") - endif() - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-options \" ${CCBIN_FLAG} \" ") - else() - set(CMAKE_CUDA_FLAGS "-Xcompiler -Wall,-Wextra -Xfatbin -compress-all") - endif() - - if(NOT MGE_ENABLE_RTTI) - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-rtti") + include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) + foreach(path ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}) + get_filename_component(_NAME ${path} NAME) + if(NOT ${_NAME} STREQUAL "stubs") + list(APPEND CUDA_LINK_DIRECTORIES ${path}) endif() - if(NOT MGE_ENABLE_EXCEPTIONS) - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-exceptions") + endforeach() + link_directories(${CUDA_LINK_DIRECTORIES}) + + set(CMAKE_CUDA_FLAGS_DEBUG "-O0 -g") + set(CMAKE_CUDA_FLAGS_RELEASE "-O3") + set(CMAKE_CUDA_FLAGS_RELWITHDEBINFO "-O3 -g") + set(CMAKE_CUDA_FLAGS_MINSIZEREL "-Os") + if(MSVC OR WIN32) + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xfatbin -compress-all") + set(CCBIN_FLAG + "${CCBIN_FLAG} /wd4819 /wd4334 /wd4267 /wd4002 /wd4244 /wd4068 /std:c++14 /bigobj" + ) + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") + set(CCBIN_FLAG "${CCBIN_FLAG} -D_ITERATOR_DEBUG_LEVEL=2 -MTd") endif() - if(NOT MGE_CUDA_GENCODE) - if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386" OR ${MGE_ARCH} STREQUAL "aarch64") - set(MEGDNN_THREADS_512 0) - if(MGE_WITH_CUDA AND MGE_CUDA_USE_STATIC AND ("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" VERSION_EQUAL "8.0.0") AND (NOT MGE_WITH_CUDNN_SHARED)) - message(WARNING "Static link CUDNN8 with many sm is unworkable, we only enable sm61 sm70 sm75 by default, and enable MGE_WITH_LARGE_ARCHIVE=ON") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") - elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "11.1.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "11.1.0") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=sm_80") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_86,code=sm_86") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_86,code=compute_86") - elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "11.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "11.0.0") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=sm_80") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=compute_80") - elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=compute_75") - elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "9.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "9.0.0") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=compute_70") - else() - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_35,code=sm_35") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") - set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=compute_61") - endif() - else() - message(FATAL_ERROR "Unsupported CUDA host arch.") - endif() + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-options \" ${CCBIN_FLAG} \" ") + else() + set(CMAKE_CUDA_FLAGS "-Xcompiler -Wall,-Wextra -Xfatbin -compress-all") + endif() + + if(NOT MGE_ENABLE_RTTI) + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-rtti") + endif() + if(NOT MGE_ENABLE_EXCEPTIONS) + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler -fno-exceptions") + endif() + if(NOT MGE_CUDA_GENCODE) + if(${MGE_ARCH} STREQUAL "x86_64" + OR ${MGE_ARCH} STREQUAL "i386" + OR ${MGE_ARCH} STREQUAL "aarch64") + set(MEGDNN_THREADS_512 0) + if(MGE_WITH_CUDA + AND MGE_CUDA_USE_STATIC + AND ("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" + VERSION_EQUAL "8.0.0") + AND (NOT MGE_WITH_CUDNN_SHARED)) + message( + WARNING + "Static link CUDNN8 with many sm is unworkable, we only enable sm61 sm70 sm75 by default, and enable MGE_WITH_LARGE_ARCHIVE=ON" + ) + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") + elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "11.1.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "11.1.0") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=sm_80") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_86,code=sm_86") + set(MGE_CUDA_GENCODE + "${MGE_CUDA_GENCODE} -gencode arch=compute_86,code=compute_86") + elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "11.0.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "11.0.0") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=sm_80") + set(MGE_CUDA_GENCODE + "${MGE_CUDA_GENCODE} -gencode arch=compute_80,code=compute_80") + elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=sm_75") + set(MGE_CUDA_GENCODE + "${MGE_CUDA_GENCODE} -gencode arch=compute_75,code=compute_75") + elseif(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "9.0.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "9.0.0") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=sm_70") + set(MGE_CUDA_GENCODE + "${MGE_CUDA_GENCODE} -gencode arch=compute_70,code=compute_70") + else() + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_35,code=sm_35") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_52,code=sm_52") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_60,code=sm_60") + set(MGE_CUDA_GENCODE "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=sm_61") + set(MGE_CUDA_GENCODE + "${MGE_CUDA_GENCODE} -gencode arch=compute_61,code=compute_61") + endif() else() - set(MEGDNN_THREADS_512 1) + message(FATAL_ERROR "Unsupported CUDA host arch.") endif() - - set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${MGE_CUDA_GENCODE}") + else() + set(MEGDNN_THREADS_512 1) + endif() + + set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} ${MGE_CUDA_GENCODE}") + if(MGE_WITH_TRT) + include(cmake/tensorrt.cmake) + endif() + if(MGE_CUDA_USE_STATIC) if(MGE_WITH_TRT) - include(cmake/tensorrt.cmake) + if(MSVC OR WIN32) + message(STATUS "windows TRT_LIBRARY: ${TRT_LIBRARY}") + list(APPEND MGE_CUDA_LIBS ${TRT_LIBRARY} ${TRT_PLUGIN_LIBRARY}) + else() + list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libnvinfer libnvinfer_plugin + -Wl,--no-whole-archive) + endif() + if(TensorRT_VERSION_MAJOR GREATER_EQUAL 7) + message(STATUS "handle trt myelin lib after trt7") + list(APPEND MGE_CUDA_LIBS libmyelin_compiler libmyelin_executor + libmyelin_pattern_runtime libmyelin_pattern_library) + endif() endif() - if(MGE_CUDA_USE_STATIC) - if(MGE_WITH_TRT) - if(MSVC OR WIN32) - message(STATUS "windows TRT_LIBRARY: ${TRT_LIBRARY}") - list(APPEND MGE_CUDA_LIBS ${TRT_LIBRARY} ${TRT_PLUGIN_LIBRARY}) - else() - list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libnvinfer libnvinfer_plugin -Wl,--no-whole-archive) - endif() - if(TensorRT_VERSION_MAJOR GREATER_EQUAL 7) - message(STATUS "handle trt myelin lib after trt7") - list(APPEND MGE_CUDA_LIBS libmyelin_compiler libmyelin_executor libmyelin_pattern_runtime libmyelin_pattern_library) - endif() - endif() - - if("${CUDNN_VERSION}" STREQUAL "7.5.0") - if(MSVC OR WIN32) - message(STATUS "windows CUDNN_LIBRARY: ${CUDNN_LIBRARY}") - list(APPEND MGE_CUDA_LIBS ${CUDNN_LIBRARY}) - else() - message(STATUS "cudnn 7.5.0 has bug in cudnnConvolutionBiasActivationForward, need --whole-archive to workaround, ref https://docs.nvidia.com/deeplearning/cudnn/release-notes/rel_7xx.html") - list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libcudnn -Wl,--no-whole-archive) - endif() - else() - if(MSVC OR WIN32) - message(STATUS "windows CUDNN_LIBRARY: ${CUDNN_LIBRARY}") - list(APPEND MGE_CUDA_LIBS ${CUDNN_LIBRARY}) - else() - list(APPEND MGE_CUDA_LIBS libcudnn) - endif() - endif() - if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS cusolver.lib curand.lib cudart_static.lib cusparse.lib) - else() - list(APPEND MGE_CUDA_LIBS cusolver_static curand_static culibos cudart_static cusparse_static) - endif() - if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS cublas.lib) - else() - if(MGE_WITH_CUBLAS_SHARED) - list(APPEND MGE_CUDA_LIBS cublas) - else() - list(APPEND MGE_CUDA_LIBS cublas_static) - endif() - endif() - if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0") - if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS cublasLt.lib) - else() - if(MGE_WITH_CUBLAS_SHARED) - list(APPEND MGE_CUDA_LIBS cublasLt) - else() - list(APPEND MGE_CUDA_LIBS cublasLt_static culibos) - endif() - endif() - endif() - if((${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0") AND NOT MSVC AND NOT WIN32) - # mark all symbols from liblapack_static.a as weak to avoid - # duplicated definition with mkl - find_library( - LAPACK_STATIC_PATH lapack_static - HINTS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}) - if(NOT LAPACK_STATIC_PATH) - message(FATAL_ERROR "liblapack_static.a not found") - endif() - set(LAPACK_STATIC_COPY_PATH ${CMAKE_CURRENT_BINARY_DIR}/liblapack_static_copy.a) - - # add a target that run objcopy - add_custom_command( - OUTPUT ${LAPACK_STATIC_COPY_PATH} - COMMAND ${CMAKE_OBJCOPY} -w -W* ${LAPACK_STATIC_PATH} ${LAPACK_STATIC_COPY_PATH} - VERBATIM) - add_custom_target(lapack_static_weak_target DEPENDS ${LAPACK_STATIC_COPY_PATH}) - - # create a library named "lapack_static_weak" - add_library(lapack_static_weak STATIC IMPORTED GLOBAL) - add_dependencies(lapack_static_weak lapack_static_weak_target) - set_target_properties( - lapack_static_weak PROPERTIES - IMPORTED_LOCATION ${LAPACK_STATIC_COPY_PATH}) - list(APPEND MGE_CUDA_LIBS lapack_static_weak ${LAPACK_STATIC_COPY_PATH}) - endif() + + if("${CUDNN_VERSION}" STREQUAL "7.5.0") + if(MSVC OR WIN32) + message(STATUS "windows CUDNN_LIBRARY: ${CUDNN_LIBRARY}") + list(APPEND MGE_CUDA_LIBS ${CUDNN_LIBRARY}) + else() + message( + STATUS + "cudnn 7.5.0 has bug in cudnnConvolutionBiasActivationForward, need --whole-archive to workaround, ref https://docs.nvidia.com/deeplearning/cudnn/release-notes/rel_7xx.html" + ) + list(APPEND MGE_CUDA_LIBS -Wl,--whole-archive libcudnn -Wl,--no-whole-archive) + endif() else() - if(MGE_WITH_TRT) - list(APPEND MGE_CUDA_LIBS libnvinfer libnvinfer_plugin) - if(TensorRT_VERSION_MAJOR GREATER_EQUAL 7) - message(STATUS "handle trt myelin lib after trt7") - list(APPEND MGE_CUDA_LIBS libmyelin) - endif() - endif() + if(MSVC OR WIN32) + message(STATUS "windows CUDNN_LIBRARY: ${CUDNN_LIBRARY}") + list(APPEND MGE_CUDA_LIBS ${CUDNN_LIBRARY}) + else() list(APPEND MGE_CUDA_LIBS libcudnn) - if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0") - list(APPEND MGE_CUDA_LIBS cublasLt cusolver cublas curand) - endif() - list(APPEND MGE_CUDA_LIBS cudart) + endif() endif() - - if(NOT MGE_WITH_CUDA_STUB) - if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS cuda.lib) - else() - list(APPEND MGE_CUDA_LIBS cuda) - endif() + if(MSVC OR WIN32) + list(APPEND MGE_CUDA_LIBS cusolver.lib curand.lib cudart_static.lib cusparse.lib) + else() + list( + APPEND + MGE_CUDA_LIBS + cusolver_static + curand_static + culibos + cudart_static + cusparse_static) endif() - - if(NOT MGE_WITH_NVRTC_STUB) - if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS nvrtc.lib) + if(MSVC OR WIN32) + list(APPEND MGE_CUDA_LIBS cublas.lib) + else() + if(MGE_WITH_CUBLAS_SHARED) + list(APPEND MGE_CUDA_LIBS cublas) + else() + list(APPEND MGE_CUDA_LIBS cublas_static) + endif() + endif() + if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0") + if(MSVC OR WIN32) + list(APPEND MGE_CUDA_LIBS cublasLt.lib) + else() + if(MGE_WITH_CUBLAS_SHARED) + list(APPEND MGE_CUDA_LIBS cublasLt) else() - list(APPEND MGE_CUDA_LIBS nvrtc) + list(APPEND MGE_CUDA_LIBS cublasLt_static culibos) endif() + endif() endif() - - if(MGE_WITH_ANY_CUDA_STUB) - add_subdirectory(dnn/cuda-stub) - list(APPEND MGE_CUDA_LIBS cuda-stub) + if((${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.0.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.0.0") + AND NOT MSVC + AND NOT WIN32) + # mark all symbols from liblapack_static.a as weak to avoid duplicated definition + # with mkl + find_library(LAPACK_STATIC_PATH lapack_static + HINTS ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}) + if(NOT LAPACK_STATIC_PATH) + message(FATAL_ERROR "liblapack_static.a not found") + endif() + set(LAPACK_STATIC_COPY_PATH ${CMAKE_CURRENT_BINARY_DIR}/liblapack_static_copy.a) + + # add a target that run objcopy + add_custom_command( + OUTPUT ${LAPACK_STATIC_COPY_PATH} + COMMAND ${CMAKE_OBJCOPY} -w -W* ${LAPACK_STATIC_PATH} ${LAPACK_STATIC_COPY_PATH} + VERBATIM) + add_custom_target(lapack_static_weak_target DEPENDS ${LAPACK_STATIC_COPY_PATH}) + + # create a library named "lapack_static_weak" + add_library(lapack_static_weak STATIC IMPORTED GLOBAL) + add_dependencies(lapack_static_weak lapack_static_weak_target) + set_target_properties(lapack_static_weak PROPERTIES IMPORTED_LOCATION + ${LAPACK_STATIC_COPY_PATH}) + list(APPEND MGE_CUDA_LIBS lapack_static_weak ${LAPACK_STATIC_COPY_PATH}) endif() + else() + if(MGE_WITH_TRT) + list(APPEND MGE_CUDA_LIBS libnvinfer libnvinfer_plugin) + if(TensorRT_VERSION_MAJOR GREATER_EQUAL 7) + message(STATUS "handle trt myelin lib after trt7") + list(APPEND MGE_CUDA_LIBS libmyelin) + endif() + endif() + list(APPEND MGE_CUDA_LIBS libcudnn) + if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER "10.1.0" + OR ${CMAKE_CUDA_COMPILER_VERSION} VERSION_EQUAL "10.1.0") + list(APPEND MGE_CUDA_LIBS cublasLt cusolver cublas curand) + endif() + list(APPEND MGE_CUDA_LIBS cudart) + endif() + if(NOT MGE_WITH_CUDA_STUB) if(MSVC OR WIN32) - list(APPEND MGE_CUDA_LIBS nvrtc.lib) + list(APPEND MGE_CUDA_LIBS cuda.lib) else() - list(APPEND MGE_CUDA_LIBS nvToolsExt) - endif() - - set(MGE_CUDA_LIBS "${MGE_CUDA_LIBS} -lrt") - if(UNIX) - set(MGE_CUDA_LIBS "${MGE_CUDA_LIBS} -ldl") + list(APPEND MGE_CUDA_LIBS cuda) endif() + endif() -endif() - -###########please add_subdirectory from here############### -if((${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386" OR ${MGE_ARCH} STREQUAL "armv7" OR ${MGE_ARCH} STREQUAL "aarch64") AND NOT APPLE AND NOT MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) - option(MGE_ENABLE_CPUINFO "Build cpuinfo library for check runtime." ON) - if(MGE_ENABLE_CPUINFO) - message(STATUS "Enable cpuinfo runtime check and little kernel optimize.") - add_definitions(-DMGB_ENABLE_CPUINFO_CHECK) - include(cmake/cpuinfo.cmake) + if(NOT MGE_WITH_NVRTC_STUB) + if(MSVC OR WIN32) + list(APPEND MGE_CUDA_LIBS nvrtc.lib) + else() + list(APPEND MGE_CUDA_LIBS nvrtc) endif() + endif() + + if(MGE_WITH_ANY_CUDA_STUB) + add_subdirectory(dnn/cuda-stub) + list(APPEND MGE_CUDA_LIBS cuda-stub) + endif() + + if(MSVC OR WIN32) + list(APPEND MGE_CUDA_LIBS nvrtc.lib) + else() + list(APPEND MGE_CUDA_LIBS nvToolsExt) + endif() + + set(MGE_CUDA_LIBS "${MGE_CUDA_LIBS} -lrt") + if(UNIX) + set(MGE_CUDA_LIBS "${MGE_CUDA_LIBS} -ldl") + endif() + +endif() + +# ##########please add_subdirectory from here############### +if((${MGE_ARCH} STREQUAL "x86_64" + OR ${MGE_ARCH} STREQUAL "i386" + OR ${MGE_ARCH} STREQUAL "armv7" + OR ${MGE_ARCH} STREQUAL "aarch64" + ) + AND NOT APPLE + AND NOT MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) + option(MGE_ENABLE_CPUINFO "Build cpuinfo library for check runtime." ON) + if(MGE_ENABLE_CPUINFO) + message(STATUS "Enable cpuinfo runtime check and little kernel optimize.") + add_definitions(-DMGB_ENABLE_CPUINFO_CHECK) + include(cmake/cpuinfo.cmake) + endif() endif() if(MGE_WITH_CAMBRICON) - include_directories("$ENV{NEUWARE_HOME}/include") - link_directories("$ENV{NEUWARE_HOME}/lib64") - list(APPEND MGE_CAMBRICON_LIBS libcnrt libcndev) - if (CNRT_VERSION_STRING VERSION_GREATER "5.0.0") - include(cmake/cnnl.cmake) - include(cmake/cnlight.cmake) - include(cmake/magicmind.cmake) - list(APPEND MGE_CAMBRICON_LIBS libcnnl libcnnl_extra libcnlight libmagicmind libmagicmind_runtime) - else() - include(cmake/cnml.cmake) - list(APPEND MGE_CAMBRICON_LIBS libcnml) - endif() - set(MGE_CAMBRICON_LIBS "${MGE_CAMBRICON_LIBS}") + include_directories("$ENV{NEUWARE_HOME}/include") + link_directories("$ENV{NEUWARE_HOME}/lib64") + list(APPEND MGE_CAMBRICON_LIBS libcnrt libcndev) + if(CNRT_VERSION_STRING VERSION_GREATER "5.0.0") + include(cmake/cnnl.cmake) + include(cmake/cnlight.cmake) + include(cmake/magicmind.cmake) + list( + APPEND + MGE_CAMBRICON_LIBS + libcnnl + libcnnl_extra + libcnlight + libmagicmind + libmagicmind_runtime) + else() + include(cmake/cnml.cmake) + list(APPEND MGE_CAMBRICON_LIBS libcnml) + endif() + set(MGE_CAMBRICON_LIBS "${MGE_CAMBRICON_LIBS}") +endif() + +if(MGE_WITH_ROCM) + include(cmake/rocm.cmake) endif() -if (MGE_WITH_ROCM) - include(cmake/rocm.cmake) -endif () - if(MGE_WITH_ATLAS) - add_subdirectory(dnn/atlas-stub) - list(APPEND MGE_ATLAS_LIBS atlas-stub) - set(MGE_ATLAS_LIBS "${MGE_ATLAS_LIBS}") - set(MGB_ATLAS ${MGE_WITH_ATLAS}) + add_subdirectory(dnn/atlas-stub) + list(APPEND MGE_ATLAS_LIBS atlas-stub) + set(MGE_ATLAS_LIBS "${MGE_ATLAS_LIBS}") + set(MGB_ATLAS ${MGE_WITH_ATLAS}) endif() find_program(CCACHE_BIN ccache) if(CCACHE_BIN) - set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BIN}) - if(MGE_WITH_CUDA AND NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") - message(STATUS "Using ccache as CMAKE_CUDA_COMPILER_LAUNCHER") - set(CMAKE_CUDA_COMPILER_LAUNCHER ${CCACHE_BIN}) - endif() + set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BIN}) + if(MGE_WITH_CUDA AND NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") + message(STATUS "Using ccache as CMAKE_CUDA_COMPILER_LAUNCHER") + set(CMAKE_CUDA_COMPILER_LAUNCHER ${CCACHE_BIN}) + endif() endif() if(${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386") - if(${MGE_BLAS} STREQUAL "MKL") - include(cmake/mkl.cmake) - set(MGE_BLAS_LIBS libmkl) - elseif(${MGE_BLAS} STREQUAL "OpenBLAS") - include(cmake/OpenBLAS.cmake) - set(MGE_BLAS_LIBS libopenblas) - else() - message(FATAL_ERROR "Unknown BLAS implementation ${MGE_BLAS}") - endif() + if(${MGE_BLAS} STREQUAL "MKL") + include(cmake/mkl.cmake) + set(MGE_BLAS_LIBS libmkl) + elseif(${MGE_BLAS} STREQUAL "OpenBLAS") + include(cmake/OpenBLAS.cmake) + set(MGE_BLAS_LIBS libopenblas) + else() + message(FATAL_ERROR "Unknown BLAS implementation ${MGE_BLAS}") + endif() endif() # MKLDNN build if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64") - include(cmake/MKL_DNN.cmake) - set(MEGDNN_X86_WITH_MKL_DNN 1) + include(cmake/MKL_DNN.cmake) + set(MEGDNN_X86_WITH_MKL_DNN 1) endif() # RTTI if(MGE_ENABLE_RTTI) - set(MEGDNN_ENABLE_MANGLING 0) - set(MEGDNN_ENABLE_RTTI 1) + set(MEGDNN_ENABLE_MANGLING 0) + set(MEGDNN_ENABLE_RTTI 1) else() - set(MEGDNN_ENABLE_MANGLING 1) - set(MEGDNN_ENABLE_RTTI 0) + set(MEGDNN_ENABLE_MANGLING 1) + set(MEGDNN_ENABLE_RTTI 0) endif() set(MGB_VERBOSE_TYPEINFO_NAME ${MGE_ENABLE_RTTI}) @@ -866,72 +1006,79 @@ set(MGB_ENABLE_JSON ${MGE_ENABLE_LOGGING}) # Exception if(NOT MGE_ENABLE_EXCEPTIONS) - message(STATUS "Exceptions disabled; MegEngine would kill itself when it is supposed to throw an exception.") + message( + STATUS + "Exceptions disabled; MegEngine would kill itself when it is supposed to throw an exception." + ) endif() set(MGB_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS}) set(MEGDNN_ENABLE_EXCEPTIONS ${MGE_ENABLE_EXCEPTIONS}) # JIT if(MGE_WITH_JIT AND MGE_WITH_HALIDE) - set(HALIDE_SHARED_LIBRARY OFF CACHE BOOL "Build as a shared library") - include(cmake/Halide.cmake) + set(HALIDE_SHARED_LIBRARY + OFF + CACHE BOOL "Build as a shared library") + include(cmake/Halide.cmake) endif() include(cmake/cpp_redis.cmake) # Thread -IF(APPLE) - set(CMAKE_THREAD_LIBS_INIT "-lpthread") - set(CMAKE_HAVE_THREADS_LIBRARY 1) - set(CMAKE_USE_WIN32_THREADS_INIT 0) - set(CMAKE_USE_PTHREADS_INIT 1) - set(THREADS_PREFER_PTHREAD_FLAG ON) - message(STATUS "disable jit, halide and mlir on macos host build...") - set(MGE_WITH_HALIDE OFF) - set(MGE_WITH_JIT OFF) - set(MGE_WITH_JIT_MLIR OFF) -ENDIF() +if(APPLE) + set(CMAKE_THREAD_LIBS_INIT "-lpthread") + set(CMAKE_HAVE_THREADS_LIBRARY 1) + set(CMAKE_USE_WIN32_THREADS_INIT 0) + set(CMAKE_USE_PTHREADS_INIT 1) + set(THREADS_PREFER_PTHREAD_FLAG ON) + message(STATUS "disable jit, halide and mlir on macos host build...") + set(MGE_WITH_HALIDE OFF) + set(MGE_WITH_JIT OFF) + set(MGE_WITH_JIT_MLIR OFF) +endif() set(MGB_JIT ${MGE_WITH_JIT}) set(MGB_JIT_MLIR ${MGE_WITH_JIT_MLIR}) set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE}) # for consumer override MGB_C_OPR_INIT_FUNC symbol interface if(NOT "${CUSTOM_C_OPR_INIT_FUNC}" STREQUAL "") - add_compile_definitions(MGB_C_OPR_INIT_FUNC=${CUSTOM_C_OPR_INIT_FUNC}) - message(STATUS "override MGB_C_OPR_INIT_FUNC to ${CUSTOM_C_OPR_INIT_FUNC}") + add_compile_definitions(MGB_C_OPR_INIT_FUNC=${CUSTOM_C_OPR_INIT_FUNC}) + message(STATUS "override MGB_C_OPR_INIT_FUNC to ${CUSTOM_C_OPR_INIT_FUNC}") endif() set(MGB_CUSTOM_OP ${MGE_WITH_CUSTOM_OP}) if(MSVC OR WIN32) - set(CMAKE_HAVE_THREADS_LIBRARY 1) - set(CMAKE_USE_WIN32_THREADS_INIT 1) - set(CMAKE_USE_PTHREADS_INIT 1) - set(THREADS_PREFER_PTHREAD_FLAG ON) + set(CMAKE_HAVE_THREADS_LIBRARY 1) + set(CMAKE_USE_WIN32_THREADS_INIT 1) + set(CMAKE_USE_PTHREADS_INIT 1) + set(THREADS_PREFER_PTHREAD_FLAG ON) endif() -if(CMAKE_THREAD_LIBS_INIT OR CMAKE_USE_WIN32_THREADS_INIT OR ANDROID) - set(MGB_HAVE_THREAD 1) +if(CMAKE_THREAD_LIBS_INIT + OR CMAKE_USE_WIN32_THREADS_INIT + OR ANDROID) + set(MGB_HAVE_THREAD 1) endif() if(MSVC OR WIN32) - if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) - message(STATUS "disable MGB_HAVE_THREAD/MGB_ENABLE_JSON when DEPLOY ON XP SP2") - set(MGB_HAVE_THREAD 0) - set(MGB_ENABLE_JSON 0) - endif() + if(MGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2) + message(STATUS "disable MGB_HAVE_THREAD/MGB_ENABLE_JSON when DEPLOY ON XP SP2") + set(MGB_HAVE_THREAD 0) + set(MGB_ENABLE_JSON 0) + endif() endif() if(MGE_WITH_TEST) - # use intra-op multi threads - set(MEGDNN_ENABLE_MULTI_THREADS 1) + # use intra-op multi threads + set(MEGDNN_ENABLE_MULTI_THREADS 1) endif() # CUDA set(MGB_CUDA ${MGE_WITH_CUDA}) set(MEGDNN_WITH_CUDA ${MGE_WITH_CUDA}) -#ROCM +# ROCM set(MGB_ROCM ${MGE_WITH_ROCM}) set(MEGDNN_WITH_ROCM ${MGE_WITH_ROCM}) @@ -943,19 +1090,20 @@ set(MGB_ENFLAME ${MGE_WITH_ENFLAME}) set(MEGDNN_WITH_ENFLAME ${MGE_WITH_ENFLAME}) # Debug info -if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") - set(MGB_ASSERT_LOC 1) - set(MGB_ENABLE_DEBUG_UTIL 1) +if(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL + "RelWithDebInfo") + set(MGB_ASSERT_LOC 1) + set(MGB_ENABLE_DEBUG_UTIL 1) else() - set(MGB_ASSERT_LOC 0) - set(MGB_ENABLE_DEBUG_UTIL 0) + set(MGB_ASSERT_LOC 0) + set(MGB_ENABLE_DEBUG_UTIL 0) endif() if(MSVC OR WIN32) - if(${MGE_ARCH} STREQUAL "i386") - set(MGB_ENABLE_DEBUG_UTIL 0) - message(STATUS "disable MGB_ENABLE_DEBUG_UTIL at Windows i386 build") - endif() + if(${MGE_ARCH} STREQUAL "i386") + set(MGB_ENABLE_DEBUG_UTIL 0) + message(STATUS "disable MGB_ENABLE_DEBUG_UTIL at Windows i386 build") + endif() endif() # TensorRT @@ -963,11 +1111,11 @@ set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT}) # Inference only if(MGE_INFERENCE_ONLY AND NOT MGE_WITH_TEST) - set(MGB_ENABLE_GRAD 0) - set(MGB_BUILD_SLIM_SERVING 1) + set(MGB_ENABLE_GRAD 0) + set(MGB_BUILD_SLIM_SERVING 1) else() - set(MGB_ENABLE_GRAD 1) - set(MGB_BUILD_SLIM_SERVING 0) + set(MGB_ENABLE_GRAD 1) + set(MGB_BUILD_SLIM_SERVING 0) endif() # Distributed communication @@ -975,235 +1123,264 @@ set(MGB_ENABLE_OPR_MM ${MGE_WITH_DISTRIBUTED}) # MGE_ARCH related flags if(MGE_ARCH STREQUAL "x86_64" OR MGE_ARCH STREQUAL "i386") - if(MGE_BLAS STREQUAL "MKL") - set(MEGDNN_X86_WITH_MKL 1) - elseif(MGE_BLAS STREQUAL "OpenBLAS") - set(MEGDNN_X86_WITH_OPENBLAS 1) - endif() + if(MGE_BLAS STREQUAL "MKL") + set(MEGDNN_X86_WITH_MKL 1) + elseif(MGE_BLAS STREQUAL "OpenBLAS") + set(MEGDNN_X86_WITH_OPENBLAS 1) + endif() endif() # Enable Naive if(MGE_ARCH STREQUAL "naive") - set(MEGDNN_NAIVE 1) - message(STATUS "MEGDNN_NAIVE is enabled; MegDNN performance is degraded.") + set(MEGDNN_NAIVE 1) + message(STATUS "MEGDNN_NAIVE is enabled; MegDNN performance is degraded.") endif() if(MGE_ARCH STREQUAL "x86_64" OR MGE_ARCH STREQUAL "i386") - set(MEGDNN_X86 1) - if(MGE_ARCH STREQUAL "x86_64") - set(MEGDNN_X86_64 1) - set(MEGDNN_64_BIT 1) - if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") - endif() - else() - set(MEGDNN_X86_32 1) - if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") - endif() + set(MEGDNN_X86 1) + if(MGE_ARCH STREQUAL "x86_64") + set(MEGDNN_X86_64 1) + set(MEGDNN_64_BIT 1) + if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64") endif() + else() + set(MEGDNN_X86_32 1) if(NOT MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mfpmath=sse") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") endif() + endif() + if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 -mfpmath=sse") + endif() endif() # dotprod is not enable by default on APPLE, cpuinfo has some problem on APPLE if(NOT APPLE AND ${CMAKE_C_COMPILER_ID} STREQUAL "Clang") - CHECK_CXX_COMPILER_FLAG("-march=armv8.2-a+dotprod" CXX_COMPILER_SUPPORT_DOT) - if(CXX_COMPILER_SUPPORT_DOT) - message(STATUS "Enable dotprod feature in armv8.2-a using MGB_ENABLE_DOT") - set(MGB_ENABLE_DOT 1) - endif() + check_cxx_compiler_flag("-march=armv8.2-a+dotprod" CXX_COMPILER_SUPPORT_DOT) + if(CXX_COMPILER_SUPPORT_DOT) + message(STATUS "Enable dotprod feature in armv8.2-a using MGB_ENABLE_DOT") + set(MGB_ENABLE_DOT 1) + endif() endif() if(MGE_ARCH STREQUAL "armv7") - # -funsafe-math-optimizations to enable neon auto-vectorization (since neon is not fully IEEE 754 compatible, GCC does not turn on neon auto-vectorization by default. - if(ANDROID) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp -mfpu=neon") - endif() - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funsafe-math-optimizations") - set (MARCH "-march=armv7-a") - set (MEGDNN_ARMV7 1) + # -funsafe-math-optimizations to enable neon auto-vectorization (since neon is not + # fully IEEE 754 compatible, GCC does not turn on neon auto-vectorization by default. + if(ANDROID) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=softfp -mfpu=neon") + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funsafe-math-optimizations") + set(MARCH "-march=armv7-a") + set(MEGDNN_ARMV7 1) endif() if(MGE_ARCH STREQUAL "aarch64") - set(MEGDNN_AARCH64 1) - set(MEGDNN_64_BIT 1) - set(MARCH "-march=armv8-a") - set(MGB_AARCH64 1) - if(MGE_ARMV8_2_FEATURE_FP16) - message(STATUS "Enable fp16 feature support in armv8.2") - if(NOT ${MGE_DISABLE_FLOAT16}) - set(MEGDNN_ENABLE_FP16_NEON 1) - endif() - set(MARCH "-march=armv8.2-a+fp16") + set(MEGDNN_AARCH64 1) + set(MEGDNN_64_BIT 1) + set(MARCH "-march=armv8-a") + set(MGB_AARCH64 1) + if(MGE_ARMV8_2_FEATURE_FP16) + message(STATUS "Enable fp16 feature support in armv8.2") + if(NOT ${MGE_DISABLE_FLOAT16}) + set(MEGDNN_ENABLE_FP16_NEON 1) endif() + set(MARCH "-march=armv8.2-a+fp16") + endif() - if(MGE_WITH_CUDA) - message(WARNING "aarch64 ld will add -mfix-cortex-a53-843419 and -mfix-cortex-a53-835769,\ + if(MGE_WITH_CUDA) + message( + WARNING + "aarch64 ld will add -mfix-cortex-a53-843419 and -mfix-cortex-a53-835769,\ when cuda enable and CMAKE with DEBUG build type,ld will take about 14min+,\ for save link time(14min->1min), you may open below flags if not deploy on\ arm a53 platform, or just build release type!") - #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-fix-cortex-a53-843419 -mno-fix-cortex-a53-835769") - endif() + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-fix-cortex-a53-843419 + # -mno-fix-cortex-a53-835769") + endif() endif() if(MGE_ARCH STREQUAL "riscv64") - set(MEGDNN_RISCV64 1) - set(MEGDNN_64_BIT 1) + set(MEGDNN_RISCV64 1) + set(MEGDNN_64_BIT 1) endif() -set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MARCH}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MARCH}") -set(MGE_VERSION_SCRIPT ${PROJECT_SOURCE_DIR}/src/version.ld CACHE INTERNAL "Path to linker version script") +set(MGE_VERSION_SCRIPT + ${PROJECT_SOURCE_DIR}/src/version.ld + CACHE INTERNAL "Path to linker version script") -# Write out megbrain_build_config.h -# It defines macros needed by both megbrain and dnn -configure_file(src/megbrain_build_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +# Write out megbrain_build_config.h It defines macros needed by both megbrain and dnn +configure_file(src/megbrain_build_config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/megbrain_build_config.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) add_subdirectory(dnn) -list(APPEND MGB_OPR_PARAM_DEFS_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py) +list(APPEND MGB_OPR_PARAM_DEFS_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py) set(MGB_OPR_PARAM_DEFS_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/dnn/scripts/gen_param_defs.py) set(MGB_OPR_PARAM_DEFS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/opr/include/) file(MAKE_DIRECTORY ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr) add_custom_command( - OUTPUT ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${MGB_OPR_PARAM_DEFS_SCRIPT} ${MGB_OPR_PARAM_DEFS_SRCS} ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h - DEPENDS ${MGB_OPR_PARAM_DEFS_SRCS} ${MGB_OPR_PARAM_DEFS_SCRIPT} - VERBATIM -) + OUTPUT ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h + COMMAND + ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${MGB_OPR_PARAM_DEFS_SCRIPT} + ${MGB_OPR_PARAM_DEFS_SRCS} ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h + DEPENDS ${MGB_OPR_PARAM_DEFS_SRCS} ${MGB_OPR_PARAM_DEFS_SCRIPT} + VERBATIM) list(APPEND MGB_OPR_PARAM_DEFS_OUTS - ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h -) + ${MGB_OPR_PARAM_DEFS_OUT_DIR}/megbrain/opr/param_defs.h) -install(FILES ${MGB_OPR_PARAM_DEFS_OUTS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/megbrain/opr/) +install(FILES ${MGB_OPR_PARAM_DEFS_OUTS} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/megbrain/opr/) list(APPEND MGB_OPR_PARAM_DEFS_INC ${MGB_OPR_PARAM_DEFS_OUT_DIR}) add_custom_target(_mgb_opr_param_defs DEPENDS ${MGB_OPR_PARAM_DEFS_OUTS}) add_library(mgb_opr_param_defs INTERFACE) -target_include_directories(mgb_opr_param_defs - INTERFACE - $ - $ -) +target_include_directories( + mgb_opr_param_defs INTERFACE $ + $) add_dependencies(mgb_opr_param_defs _mgb_opr_param_defs) install(TARGETS mgb_opr_param_defs EXPORT ${MGE_EXPORT_TARGETS}) if(MGE_WITH_JIT_MLIR OR MGE_BUILD_IMPERATIVE_RT) - # generate param_defs.td - set(MGE_GENFILE_DIR ${PROJECT_BINARY_DIR}/src/genfiles) - set(MGE_GEN_IR_DIR ${PROJECT_BINARY_DIR}/src/core/include/megbrain/ir) - set(OPR_PARAM_DEFS_SRCS ${MGE_GENFILE_DIR}/opr_param_defs.py) - set(OPR_PARAM_DEFS_SCRIPT ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_tablegen.py) - set(OPR_PARAM_DEFS_OUT ${MGE_GEN_IR_DIR}/param_defs.td) - file(COPY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py DESTINATION ${MGE_GENFILE_DIR}) - file(READ ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py CONTENTS) - file(APPEND ${OPR_PARAM_DEFS_SRCS} ${CONTENTS}) - file(MAKE_DIRECTORY ${MGE_GEN_IR_DIR}) - add_custom_command( - OUTPUT ${OPR_PARAM_DEFS_OUT} - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_OUT} - DEPENDS ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py ${OPR_PARAM_DEFS_SCRIPT} - VERBATIM - ) - # mlir tblgen sources - set(MGE_IR_DIR ${PROJECT_SOURCE_DIR}/src/core/include/megbrain/ir) - set(MGE_IR_INCLUDE_DIRS ${MLIR_LLVM_INCLUDE_DIR} ${MGE_IR_DIR} ${MGE_GEN_IR_DIR}) - list(TRANSFORM MGE_IR_INCLUDE_DIRS PREPEND "-I") - file(GLOB_RECURSE MGE_IR_TDS ${MGE_IR_DIR}/*.td) - add_custom_target(param_defs_tblgen DEPENDS ${OPR_PARAM_DEFS_OUT}) + # generate param_defs.td + set(MGE_GENFILE_DIR ${PROJECT_BINARY_DIR}/src/genfiles) + set(MGE_GEN_IR_DIR ${PROJECT_BINARY_DIR}/src/core/include/megbrain/ir) + set(OPR_PARAM_DEFS_SRCS ${MGE_GENFILE_DIR}/opr_param_defs.py) + set(OPR_PARAM_DEFS_SCRIPT ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_tablegen.py) + set(OPR_PARAM_DEFS_OUT ${MGE_GEN_IR_DIR}/param_defs.td) + file(COPY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py + DESTINATION ${MGE_GENFILE_DIR}) + file(READ ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py CONTENTS) + file(APPEND ${OPR_PARAM_DEFS_SRCS} ${CONTENTS}) + file(MAKE_DIRECTORY ${MGE_GEN_IR_DIR}) + add_custom_command( + OUTPUT ${OPR_PARAM_DEFS_OUT} + COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} + ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_OUT} + DEPENDS ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py + ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py + ${OPR_PARAM_DEFS_SCRIPT} + VERBATIM) + # mlir tblgen sources + set(MGE_IR_DIR ${PROJECT_SOURCE_DIR}/src/core/include/megbrain/ir) + set(MGE_IR_INCLUDE_DIRS ${MLIR_LLVM_INCLUDE_DIR} ${MGE_IR_DIR} ${MGE_GEN_IR_DIR}) + list(TRANSFORM MGE_IR_INCLUDE_DIRS PREPEND "-I") + file(GLOB_RECURSE MGE_IR_TDS ${MGE_IR_DIR}/*.td) + add_custom_target(param_defs_tblgen DEPENDS ${OPR_PARAM_DEFS_OUT}) endif() if(MGE_WITH_DISTRIBUTED) - set(MEGRAY_WITH_NCCL ${MGE_WITH_CUDA} CACHE BOOL "Override MegRay option" FORCE) - set(MEGRAY_WITH_SHM ${MGE_WITH_CUDA} CACHE BOOL "Override MegRay option" FORCE) - set(MEGRAY_WITH_RCCL ${MGE_WITH_ROCM} CACHE BOOL "Override MegRay option" FORCE) - set(MEGRAY_CUDA_GENCODE ${MGE_CUDA_GENCODE} CACHE STRING "Overwrite MegRay CUDA -gencode specifications" FORCE) - add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/MegRay) + set(MEGRAY_WITH_NCCL + ${MGE_WITH_CUDA} + CACHE BOOL "Override MegRay option" FORCE) + set(MEGRAY_WITH_SHM + ${MGE_WITH_CUDA} + CACHE BOOL "Override MegRay option" FORCE) + set(MEGRAY_WITH_RCCL + ${MGE_WITH_ROCM} + CACHE BOOL "Override MegRay option" FORCE) + set(MEGRAY_CUDA_GENCODE + ${MGE_CUDA_GENCODE} + CACHE STRING "Overwrite MegRay CUDA -gencode specifications" FORCE) + add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/MegRay) endif() add_subdirectory(src) if(MGE_BUILD_IMPERATIVE_RT) - add_subdirectory(imperative) - message(STATUS "Enable imperative python wrapper runtime") + add_subdirectory(imperative) + message(STATUS "Enable imperative python wrapper runtime") endif() if(MGE_WITH_TEST AND MGE_ENABLE_RTTI) - add_subdirectory(test) + add_subdirectory(test) endif() if(TARGET _imperative_rt) - add_custom_target( - develop - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/imperative/python/${PACKAGE_NAME}/core/$ - ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/$ - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/imperative/python/${PACKAGE_NAME}/version.py - ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/version.py - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_SOURCE_DIR}/src/custom/include - ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/include - COMMAND ${CMAKE_COMMAND} -E make_directory - ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/lib - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${CMAKE_CURRENT_BINARY_DIR}/src/$ - ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/lib/$ - DEPENDS _imperative_rt - VERBATIM - ) -endif() - -# Configure and install pkg-config. -# Note that unlike the Config.cmake modules, this is not relocatable (and not -# really portable) because we have two dependencies without pkg-config -# descriptions: FlatBuffers and MKL-DNN -if (MGE_USE_SYSTEM_MKLDNN) - set (MGE_PKGCONFIG_LIBS_PRIVATE "-ldnnl") -endif() -if (MGE_USE_SYSTEM_OPENBLAS) - set (MGE_PKGCONFIG_LIBS_PRIVATE "${MGE_PKGCONFIG_LIBS_PRIVATE} -lopenblas") -endif() -configure_file(cmake/megengine.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/megengine.pc - @ONLY) + add_custom_target( + develop + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${CMAKE_CURRENT_BINARY_DIR}/imperative/python/${PACKAGE_NAME}/core/$ + ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/$ + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${CMAKE_CURRENT_BINARY_DIR}/imperative/python/${PACKAGE_NAME}/version.py + ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/version.py + COMMAND + ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/src/custom/include + ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/include + COMMAND ${CMAKE_COMMAND} -E make_directory + ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/lib + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${CMAKE_CURRENT_BINARY_DIR}/src/$ + ${CMAKE_CURRENT_SOURCE_DIR}/imperative/python/${PACKAGE_NAME}/core/lib/$ + DEPENDS _imperative_rt + VERBATIM) +endif() + +# Configure and install pkg-config. Note that unlike the Config.cmake modules, this is +# not relocatable (and not really portable) because we have two dependencies without +# pkg-config descriptions: FlatBuffers and MKL-DNN +if(MGE_USE_SYSTEM_MKLDNN) + set(MGE_PKGCONFIG_LIBS_PRIVATE "-ldnnl") +endif() +if(MGE_USE_SYSTEM_OPENBLAS) + set(MGE_PKGCONFIG_LIBS_PRIVATE "${MGE_PKGCONFIG_LIBS_PRIVATE} -lopenblas") +endif() +configure_file(cmake/megengine.pc.in ${CMAKE_CURRENT_BINARY_DIR}/megengine.pc @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/megengine.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) # Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready. -if (NOT MGE_WITH_DISTRIBUTED) - include(CMakePackageConfigHelpers) - set (MGE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/MegEngine) - configure_package_config_file(cmake/MegEngineConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfig.cmake - INSTALL_DESTINATION ${MGE_INSTALL_CMAKEDIR} - ) - write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfigVersion.cmake - VERSION ${MGB_VER_STRING} - COMPATIBILITY SameMajorVersion) - - install(EXPORT ${MGE_EXPORT_TARGETS} DESTINATION ${MGE_INSTALL_CMAKEDIR}) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfig.cmake +if(NOT MGE_WITH_DISTRIBUTED) + include(CMakePackageConfigHelpers) + set(MGE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/MegEngine) + configure_package_config_file( + cmake/MegEngineConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfig.cmake + INSTALL_DESTINATION ${MGE_INSTALL_CMAKEDIR}) + write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfigVersion.cmake + VERSION ${MGB_VER_STRING} + COMPATIBILITY SameMajorVersion) + + install(EXPORT ${MGE_EXPORT_TARGETS} DESTINATION ${MGE_INSTALL_CMAKEDIR}) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/MegEngineConfigVersion.cmake - DESTINATION ${MGE_INSTALL_CMAKEDIR}) + DESTINATION ${MGE_INSTALL_CMAKEDIR}) endif() if(MGE_WITH_JIT_MLIR) - add_subdirectory(tools/mlir/mgb-opt) - add_subdirectory(tools/mlir/mgb-file-check) -endif() - -if(MGE_WITH_CUDA AND MGE_CUDA_USE_STATIC AND("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" VERSION_EQUAL "8.0.0") AND (NOT MGE_WITH_CUDNN_SHARED)) - message(WARNING "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" ") - message(WARNING "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" ") - message(WARNING "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" ") + add_subdirectory(tools/mlir/mgb-opt) + add_subdirectory(tools/mlir/mgb-file-check) +endif() + +if(MGE_WITH_CUDA + AND MGE_CUDA_USE_STATIC + AND ("${CUDNN_VERSION}" VERSION_GREATER "8.0.0" OR "${CUDNN_VERSION}" VERSION_EQUAL + "8.0.0") + AND (NOT MGE_WITH_CUDNN_SHARED)) + message( + WARNING + "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" " + ) + message( + WARNING + "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" " + ) + message( + WARNING + "Static link CUDNN8 with many sm is unworkable, please use -DMGE_WITH_CUDNN_SHARED=ON or -DMGE_WITH_LARGE_ARCHIVE=ON -DMGE_CUDA_GENCODE=\"-gencode arch=compute_70,code=sm_70 arch=compute_75,code=sm_75\" " + ) endif() if(MGE_WITH_LITE) - add_subdirectory(lite) + add_subdirectory(lite) endif() diff --git a/cmake/BuildFlatBuffers.cmake b/cmake/BuildFlatBuffers.cmake index 91cf5f97..ea85ae99 100644 --- a/cmake/BuildFlatBuffers.cmake +++ b/cmake/BuildFlatBuffers.cmake @@ -1,59 +1,56 @@ # Copyright 2015 Google Inc. All rights reserved. # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this +# file except in compliance with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# Unless required by applicable law or agreed to in writing, software distributed under +# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF +# ANY KIND, either express or implied. See the License for the specific language +# governing permissions and limitations under the License. -# General function to create FlatBuffer build rules for the given list of -# schemas. +# General function to create FlatBuffer build rules for the given list of schemas. # # flatbuffers_schemas: A list of flatbuffer schema files to process. # -# schema_include_dirs: A list of schema file include directories, which will be -# passed to flatc via the -I parameter. +# schema_include_dirs: A list of schema file include directories, which will be passed +# to flatc via the -I parameter. # -# custom_target_name: The generated files will be added as dependencies for a -# new custom target with this name. You should add that target as a dependency -# for your main target to ensure these files are built. You can also retrieve -# various properties from this target, such as GENERATED_INCLUDES_DIR, -# BINARY_SCHEMAS_DIR, and COPY_TEXT_SCHEMAS_DIR. +# custom_target_name: The generated files will be added as dependencies for a new custom +# target with this name. You should add that target as a dependency for your main target +# to ensure these files are built. You can also retrieve various properties from this +# target, such as GENERATED_INCLUDES_DIR, BINARY_SCHEMAS_DIR, and COPY_TEXT_SCHEMAS_DIR. # -# additional_dependencies: A list of additional dependencies that you'd like -# all generated files to depend on. Pass in a blank string if you have none. +# additional_dependencies: A list of additional dependencies that you'd like all +# generated files to depend on. Pass in a blank string if you have none. # -# generated_includes_dir: Where to generate the C++ header files for these -# schemas. The generated includes directory will automatically be added to -# CMake's include directories, and will be where generated header files are -# placed. This parameter is optional; pass in empty string if you don't want to -# generate include files for these schemas. +# generated_includes_dir: Where to generate the C++ header files for these schemas. The +# generated includes directory will automatically be added to CMake's include +# directories, and will be where generated header files are placed. This parameter is +# optional; pass in empty string if you don't want to generate include files for these +# schemas. # -# binary_schemas_dir: If you specify an optional binary schema directory, binary -# schemas will be generated for these schemas as well, and placed into the given -# directory. +# binary_schemas_dir: If you specify an optional binary schema directory, binary schemas +# will be generated for these schemas as well, and placed into the given directory. # -# copy_text_schemas_dir: If you want all text schemas (including schemas from -# all schema include directories) copied into a directory (for example, if you -# need them within your project to build JSON files), you can specify that -# folder here. All text schemas will be copied to that folder. +# copy_text_schemas_dir: If you want all text schemas (including schemas from all schema +# include directories) copied into a directory (for example, if you need them within +# your project to build JSON files), you can specify that folder here. All text schemas +# will be copied to that folder. # -# IMPORTANT: Make sure you quote all list arguments you pass to this function! -# Otherwise CMake will only pass in the first element. -# Example: build_flatbuffers("${fb_files}" "${include_dirs}" target_name ...) -function(build_flatbuffers flatbuffers_schemas - schema_include_dirs - custom_target_name - additional_dependencies - generated_includes_dir - binary_schemas_dir - copy_text_schemas_dir) +# IMPORTANT: Make sure you quote all list arguments you pass to this function! Otherwise +# CMake will only pass in the first element. Example: build_flatbuffers("${fb_files}" +# "${include_dirs}" target_name ...) +function( + build_flatbuffers + flatbuffers_schemas + schema_include_dirs + custom_target_name + additional_dependencies + generated_includes_dir + binary_schemas_dir + copy_text_schemas_dir) # Test if including from FindFlatBuffers if(FLATBUFFERS_FLATC_EXECUTABLE) @@ -65,10 +62,7 @@ function(build_flatbuffers flatbuffers_schemas endif() set(FLATC_SCHEMA_ARGS --gen-mutable) if(FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS) - set(FLATC_SCHEMA_ARGS - ${FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS} - ${FLATC_SCHEMA_ARGS} - ) + set(FLATC_SCHEMA_ARGS ${FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS} ${FLATC_SCHEMA_ARGS}) endif() set(working_dir "${CMAKE_CURRENT_SOURCE_DIR}") @@ -77,12 +71,12 @@ function(build_flatbuffers flatbuffers_schemas # Generate the include files parameters. set(include_params "") set(all_generated_files "") - foreach (include_dir ${schema_include_dirs}) + foreach(include_dir ${schema_include_dirs}) set(include_params -I ${include_dir} ${include_params}) - if (NOT ${copy_text_schemas_dir} STREQUAL "") + if(NOT ${copy_text_schemas_dir} STREQUAL "") # Copy text schemas from dependent folders. file(GLOB_RECURSE dependent_schemas ${include_dir}/${schema_glob}) - foreach (dependent_schema ${dependent_schemas}) + foreach(dependent_schema ${dependent_schemas}) file(COPY ${dependent_schema} DESTINATION ${copy_text_schemas_dir}) endforeach() endif() @@ -91,62 +85,54 @@ function(build_flatbuffers flatbuffers_schemas foreach(schema ${flatbuffers_schemas}) get_filename_component(filename ${schema} NAME_WE) # For each schema, do the things we requested. - if (NOT ${generated_includes_dir} STREQUAL "") + if(NOT ${generated_includes_dir} STREQUAL "") set(generated_include ${generated_includes_dir}/${filename}_generated.h) add_custom_command( OUTPUT ${generated_include} - COMMAND ${FLATC} ${FLATC_SCHEMA_ARGS} - -o ${generated_includes_dir} - ${include_params} - -c ${schema} + COMMAND ${FLATC} ${FLATC_SCHEMA_ARGS} -o ${generated_includes_dir} + ${include_params} -c ${schema} DEPENDS ${FLATC_TARGET} ${schema} ${additional_dependencies} WORKING_DIRECTORY "${working_dir}") list(APPEND all_generated_files ${generated_include}) endif() - if (NOT ${binary_schemas_dir} STREQUAL "") + if(NOT ${binary_schemas_dir} STREQUAL "") set(binary_schema ${binary_schemas_dir}/${filename}.bfbs) add_custom_command( OUTPUT ${binary_schema} - COMMAND ${FLATC} -b --schema - -o ${binary_schemas_dir} - ${include_params} - ${schema} + COMMAND ${FLATC} -b --schema -o ${binary_schemas_dir} ${include_params} + ${schema} DEPENDS ${FLATC_TARGET} ${schema} ${additional_dependencies} WORKING_DIRECTORY "${working_dir}") list(APPEND all_generated_files ${binary_schema}) endif() - if (NOT ${copy_text_schemas_dir} STREQUAL "") + if(NOT ${copy_text_schemas_dir} STREQUAL "") file(COPY ${schema} DESTINATION ${copy_text_schemas_dir}) endif() endforeach() - # Create a custom target that depends on all the generated files. - # This is the target that you can depend on to trigger all these - # to be built. - add_custom_target(${custom_target_name} - DEPENDS ${all_generated_files} ${additional_dependencies}) + # Create a custom target that depends on all the generated files. This is the target + # that you can depend on to trigger all these to be built. + add_custom_target(${custom_target_name} DEPENDS ${all_generated_files} + ${additional_dependencies}) # Register the include directory we are using. - if (NOT ${generated_includes_dir} STREQUAL "") + if(NOT ${generated_includes_dir} STREQUAL "") include_directories(${generated_includes_dir}) - set_property(TARGET ${custom_target_name} - PROPERTY GENERATED_INCLUDES_DIR - ${generated_includes_dir}) + set_property(TARGET ${custom_target_name} PROPERTY GENERATED_INCLUDES_DIR + ${generated_includes_dir}) endif() # Register the binary schemas dir we are using. - if (NOT ${binary_schemas_dir} STREQUAL "") - set_property(TARGET ${custom_target_name} - PROPERTY BINARY_SCHEMAS_DIR - ${binary_schemas_dir}) + if(NOT ${binary_schemas_dir} STREQUAL "") + set_property(TARGET ${custom_target_name} PROPERTY BINARY_SCHEMAS_DIR + ${binary_schemas_dir}) endif() # Register the text schema copy dir we are using. - if (NOT ${copy_text_schemas_dir} STREQUAL "") - set_property(TARGET ${custom_target_name} - PROPERTY COPY_TEXT_SCHEMAS_DIR - ${copy_text_schemas_dir}) + if(NOT ${copy_text_schemas_dir} STREQUAL "") + set_property(TARGET ${custom_target_name} PROPERTY COPY_TEXT_SCHEMAS_DIR + ${copy_text_schemas_dir}) endif() endfunction() diff --git a/cmake/FetchMegBrainVersion.cmake b/cmake/FetchMegBrainVersion.cmake index 0de834ce..80d3f27a 100644 --- a/cmake/FetchMegBrainVersion.cmake +++ b/cmake/FetchMegBrainVersion.cmake @@ -1,49 +1,45 @@ -# Parses the version set in src/core/include/megbrain/version.h -# Exports the following variables: -# MGB_VER_MAJOR: Major version -# MGB_VER_MINOR: Minor version -# MGB_VER_PATCH: Patch version -# MGB_IS_DEV: Is development version -# MGB_VER_STRING: Version string +# Parses the version set in src/core/include/megbrain/version.h Exports the following +# variables: MGB_VER_MAJOR: Major version MGB_VER_MINOR: Minor version MGB_VER_PATCH: +# Patch version MGB_IS_DEV: Is development version MGB_VER_STRING: Version string option(MGB_FORCE_DEV_VERSION "Force -dev tag in version stamp" OFF) -file (READ "${CMAKE_CURRENT_SOURCE_DIR}/src/core/include/megbrain/version.h" content) +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/src/core/include/megbrain/version.h" content) -string (REGEX MATCH "MGB_MAJOR +([0-9]+)" _ ${content}) -set (MGB_VER_MAJOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGB_MAJOR +([0-9]+)" _ ${content}) +set(MGB_VER_MAJOR ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGB_MINOR +([0-9]+)" _ ${content}) -set (MGB_VER_MINOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGB_MINOR +([0-9]+)" _ ${content}) +set(MGB_VER_MINOR ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGB_PATCH *([0-9]+)" _ ${content}) -set (MGB_VER_PATCH ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGB_PATCH *([0-9]+)" _ ${content}) +set(MGB_VER_PATCH ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGE_MAJOR +([0-9]+)" _ ${content}) -set (MGE_VER_MAJOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGE_MAJOR +([0-9]+)" _ ${content}) +set(MGE_VER_MAJOR ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGE_MINOR +([0-9]+)" _ ${content}) -set (MGE_VER_MINOR ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGE_MINOR +([0-9]+)" _ ${content}) +set(MGE_VER_MINOR ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGE_PATCH *([0-9]+)" _ ${content}) -set (MGE_VER_PATCH ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGE_PATCH *([0-9]+)" _ ${content}) +set(MGE_VER_PATCH ${CMAKE_MATCH_1}) -string (REGEX MATCH "MGE_EXTRA_NAME *\"(.*)\"" _ ${content}) -set (MGE_EXTRA_NAME ${CMAKE_MATCH_1}) +string(REGEX MATCH "MGE_EXTRA_NAME *\"(.*)\"" _ ${content}) +set(MGE_EXTRA_NAME ${CMAKE_MATCH_1}) -if (MGB_FORCE_DEV_VERSION) - set (MGB_IS_DEV 1) +if(MGB_FORCE_DEV_VERSION) + set(MGB_IS_DEV 1) else() - string (REGEX MATCH "MGB_IS_DEV +([01])" _ ${content}) - set (MGB_IS_DEV ${CMAKE_MATCH_1}) + string(REGEX MATCH "MGB_IS_DEV +([01])" _ ${content}) + set(MGB_IS_DEV ${CMAKE_MATCH_1}) endif() -if (DEFINED MGB_VER_MAJOR) - set (MGB_VER_STRING "${MGB_VER_MAJOR}.${MGB_VER_MINOR}.${MGB_VER_PATCH}") +if(DEFINED MGB_VER_MAJOR) + set(MGB_VER_STRING "${MGB_VER_MAJOR}.${MGB_VER_MINOR}.${MGB_VER_PATCH}") else() - set (MGB_VER_STRING "${MGE_VER_MAJOR}.${MGE_VER_MINOR}.${MGE_VER_PATCH}") + set(MGB_VER_STRING "${MGE_VER_MAJOR}.${MGE_VER_MINOR}.${MGE_VER_PATCH}") endif(DEFINED MGB_VER_MAJOR) -if (MGB_IS_DEV) - set (MGB_VER_STRING "${MGB_VER_STRING}-dev") +if(MGB_IS_DEV) + set(MGB_VER_STRING "${MGB_VER_STRING}-dev") endif() message(STATUS "Building MegBrain ${MGB_VER_STRING}") diff --git a/cmake/Halide.cmake b/cmake/Halide.cmake index 2dc8ecab..760f2384 100644 --- a/cmake/Halide.cmake +++ b/cmake/Halide.cmake @@ -2,31 +2,40 @@ include(ExternalProject) find_package(LLVM 6.0 REQUIRED CONFIG) -STRING(REPLACE "." ";" LLVM_VERSION_LIST ${LLVM_PACKAGE_VERSION}) +string(REPLACE "." ";" LLVM_VERSION_LIST ${LLVM_PACKAGE_VERSION}) list(GET LLVM_VERSION_LIST 0 LLVM_VERSION_MAJOR) list(GET LLVM_VERSION_LIST 1 LLVM_VERSION_MINOR) -set(HALIDE_DIR "${PROJECT_SOURCE_DIR}/third_party/Halide" CACHE STRING "halide directory") +set(HALIDE_DIR + "${PROJECT_SOURCE_DIR}/third_party/Halide" + CACHE STRING "halide directory") set(HALIDE_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/Halide) set(HALIDE_LIB ${HALIDE_BUILD_DIR}/lib/libHalide.a) -ExternalProject_add( - halide - SOURCE_DIR ${HALIDE_DIR} - PREFIX ${HALIDE_BUILD_DIR} - CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_PREFIX=${HALIDE_BUILD_DIR} -DWITH_APPS=OFF -DWITH_TESTS=OFF -DWITH_TUTORIALS=OFF -DHALIDE_SHARED_LIBRARY=OFF -DHALIDE_REQUIRE_LLVM_VERSION=${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR} -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DTARGET_MIPS=OFF -DTARGET_POWERPC=OFF - BUILD_BYPRODUCTS ${HALIDE_LIB} -) +ExternalProject_Add( + halide + SOURCE_DIR ${HALIDE_DIR} + PREFIX ${HALIDE_BUILD_DIR} + CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_INSTALL_PREFIX=${HALIDE_BUILD_DIR} + -DWITH_APPS=OFF + -DWITH_TESTS=OFF + -DWITH_TUTORIALS=OFF + -DHALIDE_SHARED_LIBRARY=OFF + -DHALIDE_REQUIRE_LLVM_VERSION=${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR} + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + -DTARGET_MIPS=OFF + -DTARGET_POWERPC=OFF + BUILD_BYPRODUCTS ${HALIDE_LIB}) set(HALIDE_INC ${HALIDE_BUILD_DIR}/include) file(MAKE_DIRECTORY ${HALIDE_INC}) add_library(libhalide STATIC IMPORTED GLOBAL) add_dependencies(libhalide halide) -set_target_properties( - libhalide PROPERTIES - IMPORTED_LOCATION ${HALIDE_LIB} - INTERFACE_INCLUDE_DIRECTORIES ${HALIDE_INC} -) +set_target_properties(libhalide PROPERTIES IMPORTED_LOCATION ${HALIDE_LIB} + INTERFACE_INCLUDE_DIRECTORIES ${HALIDE_INC}) set(LLVM_COMPONENTS mcjit;bitwriter;linker;passes;X86;ARM;AArch64;Hexagon;NVPTX;AMDGPU) llvm_map_components_to_libnames(HALIDE_LLVM_LIBS ${LLVM_COMPONENTS}) - diff --git a/cmake/MKL_DNN.cmake b/cmake/MKL_DNN.cmake index bb85dc3a..ea2407a2 100644 --- a/cmake/MKL_DNN.cmake +++ b/cmake/MKL_DNN.cmake @@ -1,25 +1,31 @@ -if (MGE_USE_SYSTEM_LIB) - find_package(dnnl) - if (dnnl_FOUND) - message(STATUS "Using system provided MKL-DNN.") - set (MGE_USE_SYSTEM_MKLDNN ON) - return() - endif() +if(MGE_USE_SYSTEM_LIB) + find_package(dnnl) + if(dnnl_FOUND) + message(STATUS "Using system provided MKL-DNN.") + set(MGE_USE_SYSTEM_MKLDNN ON) + return() + endif() endif() option(DNNL_BUILD_TESTS "" OFF) option(DNNL_BUILD_EXAMPLES "" OFF) -# we do not want to use OMP now, so config to CPU mode -# if set to OMP, some dnnl algo will be more fast -set(DNNL_CPU_RUNTIME "SEQ" CACHE STRING "config dnnl to DNNL_RUNTIME_SEQ") +# we do not want to use OMP now, so config to CPU mode if set to OMP, some dnnl algo +# will be more fast +set(DNNL_CPU_RUNTIME + "SEQ" + CACHE STRING "config dnnl to DNNL_RUNTIME_SEQ") if(MGE_BLAS STREQUAL "MKL") - option(_DNNL_USE_MKL "" ON) - set(MKLROOT ${MKL_ROOT_DIR} CACHE STRING "MKL ROOT FOR DNNL") - set(MKLLIB libmkl) + option(_DNNL_USE_MKL "" ON) + set(MKLROOT + ${MKL_ROOT_DIR} + CACHE STRING "MKL ROOT FOR DNNL") + set(MKLLIB libmkl) else() - option(_DNNL_USE_MKL "" OFF) + option(_DNNL_USE_MKL "" OFF) endif() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter -Wno-extra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-extra") -set(DNNL_LIBRARY_TYPE STATIC CACHE STRING "config dnnl to STATIC") +set(DNNL_LIBRARY_TYPE + STATIC + CACHE STRING "config dnnl to STATIC") add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/intel-mkl-dnn) diff --git a/cmake/Modules/FindNumPy.cmake b/cmake/Modules/FindNumPy.cmake index 248f8c21..25c767f7 100644 --- a/cmake/Modules/FindNumPy.cmake +++ b/cmake/Modules/FindNumPy.cmake @@ -1,30 +1,28 @@ -# - Find the NumPy libraries -# This module finds if NumPy is installed, and sets the following variables -# indicating where it is. +# * Find the NumPy libraries This module finds if NumPy is installed, and sets the +# following variables indicating where it is. # # TODO: Update to provide the libraries and paths for linking npymath lib. # -# NUMPY_FOUND - was NumPy found -# NUMPY_VERSION - the version of NumPy found as a string -# NUMPY_VERSION_MAJOR - the major version number of NumPy -# NUMPY_VERSION_MINOR - the minor version number of NumPy -# NUMPY_VERSION_PATCH - the patch version number of NumPy -# NUMPY_VERSION_DECIMAL - e.g. version 1.6.1 is 10601 -# NUMPY_INCLUDE_DIR - path to the NumPy include files +# NUMPY_FOUND - was NumPy found NUMPY_VERSION - the version of +# NumPy found as a string NUMPY_VERSION_MAJOR - the major version number of NumPy +# NUMPY_VERSION_MINOR - the minor version number of NumPy NUMPY_VERSION_PATCH - +# the patch version number of NumPy NUMPY_VERSION_DECIMAL - e.g. version 1.6.1 is +# 10601 NUMPY_INCLUDE_DIR - path to the NumPy include files unset(NUMPY_VERSION) unset(NUMPY_INCLUDE_DIR) if(PYTHONINTERP_FOUND) - execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" - "import numpy as n; print(n.__version__); print(n.get_include());" + execute_process( + COMMAND "${PYTHON_EXECUTABLE}" "-c" + "import numpy as n; print(n.__version__); print(n.get_include());" RESULT_VARIABLE __result OUTPUT_VARIABLE __output OUTPUT_STRIP_TRAILING_WHITESPACE) if(__result MATCHES 0) string(REGEX REPLACE ";" "\\\\;" __values ${__output}) - string(REGEX REPLACE "\r?\n" ";" __values ${__values}) + string(REGEX REPLACE "\r?\n" ";" __values ${__values}) list(GET __values 0 NUMPY_VERSION) list(GET __values 1 NUMPY_INCLUDE_DIR) @@ -33,13 +31,18 @@ if(PYTHONINTERP_FOUND) set(NUMPY_VERSION_MAJOR ${CMAKE_MATCH_1}) set(NUMPY_VERSION_MINOR ${CMAKE_MATCH_2}) set(NUMPY_VERSION_PATCH ${CMAKE_MATCH_3}) - math(EXPR NUMPY_VERSION_DECIMAL - "(${NUMPY_VERSION_MAJOR} * 10000) + (${NUMPY_VERSION_MINOR} * 100) + ${NUMPY_VERSION_PATCH}") - string(REGEX REPLACE "\\\\" "/" NUMPY_INCLUDE_DIR ${NUMPY_INCLUDE_DIR}) + math( + EXPR + NUMPY_VERSION_DECIMAL + "(${NUMPY_VERSION_MAJOR} * 10000) + (${NUMPY_VERSION_MINOR} * 100) + ${NUMPY_VERSION_PATCH}" + ) + string(REGEX REPLACE "\\\\" "/" NUMPY_INCLUDE_DIR ${NUMPY_INCLUDE_DIR}) else() - unset(NUMPY_VERSION) - unset(NUMPY_INCLUDE_DIR) - message(STATUS "Requested NumPy version and include path, but got instead:\n${__output}\n") + unset(NUMPY_VERSION) + unset(NUMPY_INCLUDE_DIR) + message( + STATUS + "Requested NumPy version and include path, but got instead:\n${__output}\n") endif() endif() else() @@ -47,8 +50,10 @@ else() endif() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(NumPy REQUIRED_VARS NUMPY_INCLUDE_DIR NUMPY_VERSION - VERSION_VAR NUMPY_VERSION) +find_package_handle_standard_args( + NumPy + REQUIRED_VARS NUMPY_INCLUDE_DIR NUMPY_VERSION + VERSION_VAR NUMPY_VERSION) if(NUMPY_FOUND) message(STATUS "NumPy ver. ${NUMPY_VERSION} found (include: ${NUMPY_INCLUDE_DIR})") diff --git a/cmake/OpenBLAS.cmake b/cmake/OpenBLAS.cmake index 3216522f..1562f88a 100644 --- a/cmake/OpenBLAS.cmake +++ b/cmake/OpenBLAS.cmake @@ -1,48 +1,50 @@ -if (MGE_USE_SYSTEM_LIB) - find_package(OpenBLAS) - set (MGE_USE_SYSTEM_OPENBLAS ON) - - message(STATUS "Using system provided OpenBLAS ${OpenBLAS_VERSION}") - add_library(libopenblas IMPORTED GLOBAL) - set_target_properties( - libopenblas PROPERTIES - IMPORTED_LOCATION ${OpenBLAS_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${OpenBLAS_INCLUDE_DIRS} - ) - return() +if(MGE_USE_SYSTEM_LIB) + find_package(OpenBLAS) + set(MGE_USE_SYSTEM_OPENBLAS ON) + + message(STATUS "Using system provided OpenBLAS ${OpenBLAS_VERSION}") + add_library(libopenblas IMPORTED GLOBAL) + set_target_properties( + libopenblas PROPERTIES IMPORTED_LOCATION ${OpenBLAS_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${OpenBLAS_INCLUDE_DIRS}) + return() endif() include(ExternalProject) include(GNUInstallDirs) -set(OPENBLAS_DIR "${PROJECT_SOURCE_DIR}/third_party/OpenBLAS" CACHE STRING "OpenBLAS directory") +set(OPENBLAS_DIR + "${PROJECT_SOURCE_DIR}/third_party/OpenBLAS" + CACHE STRING "OpenBLAS directory") set(OPENBLAS_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/OpenBLAS) set(OPENBLAS_INC ${OPENBLAS_BUILD_DIR}/include) set(OPENBLAS_LIB ${OPENBLAS_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libopenblas.a) if(${CMAKE_GENERATOR} STREQUAL "Ninja") - set(MAKE_COMMAND make) + set(MAKE_COMMAND make) else() - set(MAKE_COMMAND "$(MAKE)") + set(MAKE_COMMAND "$(MAKE)") endif() -ExternalProject_add( - openblas - SOURCE_DIR ${OPENBLAS_DIR} - PREFIX ${OPENBLAS_BUILD_DIR} - CMAKE_GENERATOR "Unix Makefiles" - CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${OPENBLAS_BUILD_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_POSITION_INDEPENDENT_CODE=ON - BUILD_COMMAND ${MAKE_COMMAND} - BUILD_BYPRODUCTS ${OPENBLAS_LIB} ${OPENBLAS_PROTOC_EXECUTABLE} -) +ExternalProject_Add( + openblas + SOURCE_DIR ${OPENBLAS_DIR} + PREFIX ${OPENBLAS_BUILD_DIR} + CMAKE_GENERATOR "Unix Makefiles" + CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${OPENBLAS_BUILD_DIR} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + BUILD_COMMAND ${MAKE_COMMAND} + BUILD_BYPRODUCTS ${OPENBLAS_LIB} ${OPENBLAS_PROTOC_EXECUTABLE}) file(MAKE_DIRECTORY ${OPENBLAS_INC}) add_library(libopenblas STATIC IMPORTED GLOBAL) add_dependencies(libopenblas openblas) set_target_properties( - libopenblas PROPERTIES - IMPORTED_LOCATION ${OPENBLAS_LIB} - INTERFACE_INCLUDE_DIRECTORIES ${OPENBLAS_BUILD_DIR}/include -) + libopenblas PROPERTIES IMPORTED_LOCATION ${OPENBLAS_LIB} + INTERFACE_INCLUDE_DIRECTORIES ${OPENBLAS_BUILD_DIR}/include) diff --git a/cmake/aclrt.cmake b/cmake/aclrt.cmake index d9d3d190..ab2201e5 100644 --- a/cmake/aclrt.cmake +++ b/cmake/aclrt.cmake @@ -1,31 +1,31 @@ -find_library(ACLRT_LIBRARY - NAMES libascendcl.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{ACLRT_HOME}/lib64/stub" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES stub - DOC "ACL library." ) +find_library( + ACLRT_LIBRARY + NAMES libascendcl.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{ACLRT_HOME}/lib64/stub" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES stub + DOC "ACL library.") if(ACLRT_LIBRARY STREQUAL "ACLRT_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find ACLRT Library") + message(FATAL_ERROR "Can not find ACLRT Library") endif() get_filename_component(__found_aclrt_root "${ACLRT_LIBRARY}/../../../" REALPATH) -find_path(ACLRT_INCLUDE_DIR - NAMES acl/acl.h - HINTS "$ENV{ACLRT_HOME}/include" ${__found_aclrt_root} - PATH_SUFFIXES include - DOC "Path to ACLRT include directory." ) +find_path( + ACLRT_INCLUDE_DIR + NAMES acl/acl.h + HINTS "$ENV{ACLRT_HOME}/include" ${__found_aclrt_root} + PATH_SUFFIXES include + DOC "Path to ACLRT include directory.") if(ACLRT_INCLUDE_DIR STREQUAL "ACLRT_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find ACLRT Library") + message(FATAL_ERROR "Can not find ACLRT Library") endif() add_library(libascendcl SHARED IMPORTED) -set_target_properties(libascendcl PROPERTIES - IMPORTED_LOCATION ${ACLRT_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${ACLRT_INCLUDE_DIR} -) +set_target_properties( + libascendcl PROPERTIES IMPORTED_LOCATION ${ACLRT_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ACLRT_INCLUDE_DIR}) message(STATUS "Found ACLRT: ${__found_aclrt_root}") - diff --git a/cmake/cndev.cmake b/cmake/cndev.cmake index 0b85297f..e9bde247 100644 --- a/cmake/cndev.cmake +++ b/cmake/cndev.cmake @@ -1,44 +1,57 @@ -find_library(CNDEV_LIBRARY - NAMES libcndev.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNDEV library." ) +find_library( + CNDEV_LIBRARY + NAMES libcndev.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNDEV library.") if(CNDEV_LIBRARY STREQUAL "CNDEV_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNDEV Library") + message(FATAL_ERROR "Can not find CNDEV Library") endif() get_filename_component(__found_cndev_root ${CNDEV_LIBRARY}/../.. REALPATH) -find_path(CNDEV_INCLUDE_DIR - NAMES cndev.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cndev_root} - PATH_SUFFIXES include - DOC "Path to CNDEV include directory." ) +find_path( + CNDEV_INCLUDE_DIR + NAMES cndev.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cndev_root} + PATH_SUFFIXES include + DOC "Path to CNDEV include directory.") if(CNDEV_INCLUDE_DIR STREQUAL "CNDEV_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNDEV Library") + message(FATAL_ERROR "Can not find CNDEV Library") endif() -file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_1 REGEX "^#define CNDEV_VERSION_1 [0-9]+.*$") -file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_2 REGEX "^#define CNDEV_VERSION_2 [0-9]+.*$") -file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_3 REGEX "^#define CNDEV_VERSION_3 [0-9]+.*$") -file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_4 REGEX "^#define CNDEV_VERSION_4 [0-9]+.*$") -file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_5 REGEX "^#define CNDEV_VERSION_5 [0-9]+.*$") - -string(REGEX REPLACE "^#define CNDEV_VERSION_1 ([0-9]+).*$" "\\1" CNDEV_VERSION_1 "${CNDEV_1}") -string(REGEX REPLACE "^#define CNDEV_VERSION_2 ([0-9]+).*$" "\\1" CNDEV_VERSION_2 "${CNDEV_2}") -string(REGEX REPLACE "^#define CNDEV_VERSION_3 ([0-9]+).*$" "\\1" CNDEV_VERSION_3 "${CNDEV_3}") -string(REGEX REPLACE "^#define CNDEV_VERSION_4 ([0-9]+).*$" "\\1" CNDEV_VERSION_4 "${CNDEV_4}") -string(REGEX REPLACE "^#define CNDEV_VERSION_5 ([0-9]+).*$" "\\1" CNDEV_VERSION_5 "${CNDEV_5}") -set(CNDEV_VERSION_STRING "${CNDEV_VERSION_1}.${CNDEV_VERSION_2}.${CNDEV_VERSION_3}.${CNDEV_VERSION_4}.${CNDEV_VERSION_5}") +file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_1 + REGEX "^#define CNDEV_VERSION_1 [0-9]+.*$") +file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_2 + REGEX "^#define CNDEV_VERSION_2 [0-9]+.*$") +file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_3 + REGEX "^#define CNDEV_VERSION_3 [0-9]+.*$") +file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_4 + REGEX "^#define CNDEV_VERSION_4 [0-9]+.*$") +file(STRINGS "${CNDEV_INCLUDE_DIR}/cndev.h" CNDEV_5 + REGEX "^#define CNDEV_VERSION_5 [0-9]+.*$") + +string(REGEX REPLACE "^#define CNDEV_VERSION_1 ([0-9]+).*$" "\\1" CNDEV_VERSION_1 + "${CNDEV_1}") +string(REGEX REPLACE "^#define CNDEV_VERSION_2 ([0-9]+).*$" "\\1" CNDEV_VERSION_2 + "${CNDEV_2}") +string(REGEX REPLACE "^#define CNDEV_VERSION_3 ([0-9]+).*$" "\\1" CNDEV_VERSION_3 + "${CNDEV_3}") +string(REGEX REPLACE "^#define CNDEV_VERSION_4 ([0-9]+).*$" "\\1" CNDEV_VERSION_4 + "${CNDEV_4}") +string(REGEX REPLACE "^#define CNDEV_VERSION_5 ([0-9]+).*$" "\\1" CNDEV_VERSION_5 + "${CNDEV_5}") +set(CNDEV_VERSION_STRING + "${CNDEV_VERSION_1}.${CNDEV_VERSION_2}.${CNDEV_VERSION_3}.${CNDEV_VERSION_4}.${CNDEV_VERSION_5}" +) add_library(libcndev SHARED IMPORTED) -set_target_properties(libcndev PROPERTIES - IMPORTED_LOCATION ${CNDEV_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNDEV_INCLUDE_DIR} -) - -message(STATUS "Found CNDEV: ${__found_cndev_root} (found version: ${CNDEV_VERSION_STRING})") +set_target_properties( + libcndev PROPERTIES IMPORTED_LOCATION ${CNDEV_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${CNDEV_INCLUDE_DIR}) +message( + STATUS "Found CNDEV: ${__found_cndev_root} (found version: ${CNDEV_VERSION_STRING})") diff --git a/cmake/cnlight.cmake b/cmake/cnlight.cmake index 4c18c1d8..725d913d 100644 --- a/cmake/cnlight.cmake +++ b/cmake/cnlight.cmake @@ -1,40 +1,49 @@ -find_library(CNLIGHT_LIBRARY - NAMES libcnlight.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNLIGHT library." ) +find_library( + CNLIGHT_LIBRARY + NAMES libcnlight.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNLIGHT library.") if(CNLIGHT_LIBRARY STREQUAL "CNLIGHT_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNLIGHT Library") + message(FATAL_ERROR "Can not find CNLIGHT Library") endif() get_filename_component(__found_cnlight_root "${CNLIGHT_LIBRARY}/../.." REALPATH) -find_path(CNLIGHT_INCLUDE_DIR - NAMES cnlight.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnlight_root} - PATH_SUFFIXES include - DOC "Path to CNLIGHT include directory." ) +find_path( + CNLIGHT_INCLUDE_DIR + NAMES cnlight.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnlight_root} + PATH_SUFFIXES include + DOC "Path to CNLIGHT include directory.") if(CNLIGHT_INCLUDE_DIR STREQUAL "CNLIGHT_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNLIGHT Library") + message(FATAL_ERROR "Can not find CNLIGHT Library") endif() -file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_MAJOR REGEX "^#define CNLIGHT_MAJOR_VERSION [0-9]+.*$") -file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_MINOR REGEX "^#define CNLIGHT_MINOR_VERSION [0-9]+.*$") -file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_PATCH REGEX "^#define CNLIGHT_PATCH_VERSION [0-9]+.*$") - -string(REGEX REPLACE "^#define CNLIGHT_MAJOR_VERSION ([0-9]+).*$" "\\1" CNLIGHT_VERSION_MAJOR "${CNLIGHT_MAJOR}") -string(REGEX REPLACE "^#define CNLIGHT_MINOR_VERSION ([0-9]+).*$" "\\1" CNLIGHT_VERSION_MINOR "${CNLIGHT_MINOR}") -string(REGEX REPLACE "^#define CNLIGHT_PATCH_VERSION ([0-9]+).*$" "\\1" CNLIGHT_VERSION_PATCH "${CNLIGHT_PATCH}") -set(CNLIGHT_VERSION_STRING "${CNLIGHT_VERSION_MAJOR}.${CNLIGHT_VERSION_MINOR}.${CNLIGHT_VERSION_PATCH}") +file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_MAJOR + REGEX "^#define CNLIGHT_MAJOR_VERSION [0-9]+.*$") +file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_MINOR + REGEX "^#define CNLIGHT_MINOR_VERSION [0-9]+.*$") +file(STRINGS "${CNLIGHT_INCLUDE_DIR}/cnlight.h" CNLIGHT_PATCH + REGEX "^#define CNLIGHT_PATCH_VERSION [0-9]+.*$") + +string(REGEX REPLACE "^#define CNLIGHT_MAJOR_VERSION ([0-9]+).*$" "\\1" + CNLIGHT_VERSION_MAJOR "${CNLIGHT_MAJOR}") +string(REGEX REPLACE "^#define CNLIGHT_MINOR_VERSION ([0-9]+).*$" "\\1" + CNLIGHT_VERSION_MINOR "${CNLIGHT_MINOR}") +string(REGEX REPLACE "^#define CNLIGHT_PATCH_VERSION ([0-9]+).*$" "\\1" + CNLIGHT_VERSION_PATCH "${CNLIGHT_PATCH}") +set(CNLIGHT_VERSION_STRING + "${CNLIGHT_VERSION_MAJOR}.${CNLIGHT_VERSION_MINOR}.${CNLIGHT_VERSION_PATCH}") add_library(libcnlight SHARED IMPORTED) -set_target_properties(libcnlight PROPERTIES - IMPORTED_LOCATION ${CNLIGHT_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNLIGHT_INCLUDE_DIR} -) - -message(STATUS "Found CNLIGHT: ${__found_cnlight_root} (found version: ${CNLIGHT_VERSION_STRING})") +set_target_properties( + libcnlight PROPERTIES IMPORTED_LOCATION ${CNLIGHT_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${CNLIGHT_INCLUDE_DIR}) +message( + STATUS + "Found CNLIGHT: ${__found_cnlight_root} (found version: ${CNLIGHT_VERSION_STRING})") diff --git a/cmake/cnml.cmake b/cmake/cnml.cmake index 067572d1..7b0ed901 100644 --- a/cmake/cnml.cmake +++ b/cmake/cnml.cmake @@ -1,40 +1,48 @@ -find_library(CNML_LIBRARY - NAMES libcnml.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNML library." ) +find_library( + CNML_LIBRARY + NAMES libcnml.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNML library.") if(CNML_LIBRARY STREQUAL "CNML_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNML Library") + message(FATAL_ERROR "Can not find CNML Library") endif() get_filename_component(__found_cnml_root "${CNML_LIBRARY}/../.." REALPATH) -find_path(CNML_INCLUDE_DIR - NAMES cnml.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnml_root} - PATH_SUFFIXES include - DOC "Path to CNML include directory." ) +find_path( + CNML_INCLUDE_DIR + NAMES cnml.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnml_root} + PATH_SUFFIXES include + DOC "Path to CNML include directory.") if(CNML_INCLUDE_DIR STREQUAL "CNML_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNML Library") + message(FATAL_ERROR "Can not find CNML Library") endif() -file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_MAJOR REGEX "^#define CNML_MAJOR_VERSION [0-9]+.*$") -file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_MINOR REGEX "^#define CNML_MINOR_VERSION [0-9]+.*$") -file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_PATCH REGEX "^#define CNML_PATCH_VERSION [0-9]+.*$") - -string(REGEX REPLACE "^#define CNML_MAJOR_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_MAJOR "${CNML_MAJOR}") -string(REGEX REPLACE "^#define CNML_MINOR_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_MINOR "${CNML_MINOR}") -string(REGEX REPLACE "^#define CNML_PATCH_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_PATCH "${CNML_PATCH}") -set(CNML_VERSION_STRING "${CNML_VERSION_MAJOR}.${CNML_VERSION_MINOR}.${CNML_VERSION_PATCH}") +file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_MAJOR + REGEX "^#define CNML_MAJOR_VERSION [0-9]+.*$") +file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_MINOR + REGEX "^#define CNML_MINOR_VERSION [0-9]+.*$") +file(STRINGS "${CNML_INCLUDE_DIR}/cnml.h" CNML_PATCH + REGEX "^#define CNML_PATCH_VERSION [0-9]+.*$") + +string(REGEX REPLACE "^#define CNML_MAJOR_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_MAJOR + "${CNML_MAJOR}") +string(REGEX REPLACE "^#define CNML_MINOR_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_MINOR + "${CNML_MINOR}") +string(REGEX REPLACE "^#define CNML_PATCH_VERSION ([0-9]+).*$" "\\1" CNML_VERSION_PATCH + "${CNML_PATCH}") +set(CNML_VERSION_STRING + "${CNML_VERSION_MAJOR}.${CNML_VERSION_MINOR}.${CNML_VERSION_PATCH}") add_library(libcnml SHARED IMPORTED) -set_target_properties(libcnml PROPERTIES - IMPORTED_LOCATION ${CNML_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNML_INCLUDE_DIR} -) - -message(STATUS "Found CNML: ${__found_cnml_root} (found version: ${CNML_VERSION_STRING})") +set_target_properties( + libcnml PROPERTIES IMPORTED_LOCATION ${CNML_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${CNML_INCLUDE_DIR}) +message( + STATUS "Found CNML: ${__found_cnml_root} (found version: ${CNML_VERSION_STRING})") diff --git a/cmake/cnnl.cmake b/cmake/cnnl.cmake index 4d6cf973..6822adf8 100644 --- a/cmake/cnnl.cmake +++ b/cmake/cnnl.cmake @@ -1,80 +1,100 @@ -find_library(CNNL_LIBRARY - NAMES libcnnl.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNNL library." ) +find_library( + CNNL_LIBRARY + NAMES libcnnl.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNNL library.") if(CNNL_LIBRARY STREQUAL "CNNL_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNNL Library") + message(FATAL_ERROR "Can not find CNNL Library") endif() get_filename_component(__found_cnnl_root "${CNNL_LIBRARY}/../.." REALPATH) -find_path(CNNL_INCLUDE_DIR - NAMES cnnl.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnnl_root} - PATH_SUFFIXES include - DOC "Path to CNNL include directory." ) +find_path( + CNNL_INCLUDE_DIR + NAMES cnnl.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnnl_root} + PATH_SUFFIXES include + DOC "Path to CNNL include directory.") if(CNNL_INCLUDE_DIR STREQUAL "CNNL_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNNL Library") + message(FATAL_ERROR "Can not find CNNL Library") endif() -file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_MAJOR REGEX "^#define CNNL_MAJOR [0-9]+.*$") -file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_MINOR REGEX "^#define CNNL_MINOR [0-9]+.*$") -file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_PATCH REGEX "^#define CNNL_PATCHLEVEL [0-9]+.*$") - -string(REGEX REPLACE "^#define CNNL_MAJOR ([0-9]+).*$" "\\1" CNNL_VERSION_MAJOR "${CNNL_MAJOR}") -string(REGEX REPLACE "^#define CNNL_MINOR ([0-9]+).*$" "\\1" CNNL_VERSION_MINOR "${CNNL_MINOR}") -string(REGEX REPLACE "^#define CNNL_PATCHLEVEL ([0-9]+).*$" "\\1" CNNL_VERSION_PATCH "${CNNL_PATCH}") -set(CNNL_VERSION_STRING "${CNNL_VERSION_MAJOR}.${CNNL_VERSION_MINOR}.${CNNL_VERSION_PATCH}") +file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_MAJOR + REGEX "^#define CNNL_MAJOR [0-9]+.*$") +file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_MINOR + REGEX "^#define CNNL_MINOR [0-9]+.*$") +file(STRINGS "${CNNL_INCLUDE_DIR}/cnnl.h" CNNL_PATCH + REGEX "^#define CNNL_PATCHLEVEL [0-9]+.*$") + +string(REGEX REPLACE "^#define CNNL_MAJOR ([0-9]+).*$" "\\1" CNNL_VERSION_MAJOR + "${CNNL_MAJOR}") +string(REGEX REPLACE "^#define CNNL_MINOR ([0-9]+).*$" "\\1" CNNL_VERSION_MINOR + "${CNNL_MINOR}") +string(REGEX REPLACE "^#define CNNL_PATCHLEVEL ([0-9]+).*$" "\\1" CNNL_VERSION_PATCH + "${CNNL_PATCH}") +set(CNNL_VERSION_STRING + "${CNNL_VERSION_MAJOR}.${CNNL_VERSION_MINOR}.${CNNL_VERSION_PATCH}") add_library(libcnnl SHARED IMPORTED) -set_target_properties(libcnnl PROPERTIES - IMPORTED_LOCATION ${CNNL_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNNL_INCLUDE_DIR} -) +set_target_properties( + libcnnl PROPERTIES IMPORTED_LOCATION ${CNNL_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${CNNL_INCLUDE_DIR}) -message(STATUS "Found CNNL: ${__found_cnnl_root} (found version: ${CNNL_VERSION_STRING})") +message( + STATUS "Found CNNL: ${__found_cnnl_root} (found version: ${CNNL_VERSION_STRING})") -find_library(CNNL_EXTRA_LIBRARY - NAMES libcnnl_extra.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNNL_EXTRA library." ) +find_library( + CNNL_EXTRA_LIBRARY + NAMES libcnnl_extra.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNNL_EXTRA library.") if(CNNL_EXTRA_LIBRARY STREQUAL "CNNL_EXTRA_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNNL_EXTRA Library") + message(FATAL_ERROR "Can not find CNNL_EXTRA Library") endif() get_filename_component(__found_cnnl_extra_root "${CNNL_EXTRA_LIBRARY}/../.." REALPATH) -find_path(CNNL_EXTRA_INCLUDE_DIR - NAMES cnnl_extra.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnnl_extra_root} - PATH_SUFFIXES include - DOC "Path to CNNL_EXTRA include directory." ) +find_path( + CNNL_EXTRA_INCLUDE_DIR + NAMES cnnl_extra.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnnl_extra_root} + PATH_SUFFIXES include + DOC "Path to CNNL_EXTRA include directory.") if(CNNL_EXTRA_INCLUDE_DIR STREQUAL "CNNL_EXTRA_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNNL_EXTRA Library") + message(FATAL_ERROR "Can not find CNNL_EXTRA Library") endif() -file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_MAJOR REGEX "^#define CNNL_EXTRA_MAJOR [0-9]+.*$") -file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_MINOR REGEX "^#define CNNL_EXTRA_MINOR [0-9]+.*$") -file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_PATCH REGEX "^#define CNNL_EXTRA_PATCHLEVEL [0-9]+.*$") - -string(REGEX REPLACE "^#define CNNL_EXTRA_MAJOR ([0-9]+).*$" "\\1" CNNL_EXTRA_VERSION_MAJOR "${CNNL_EXTRA_MAJOR}") -string(REGEX REPLACE "^#define CNNL_EXTRA_MINOR ([0-9]+).*$" "\\1" CNNL_EXTRA_VERSION_MINOR "${CNNL_EXTRA_MINOR}") -string(REGEX REPLACE "^#define CNNL_EXTRA_PATCHLEVEL ([0-9]+).*$" "\\1" CNNL_EXTRA_VERSION_PATCH "${CNNL_EXTRA_PATCH}") -set(CNNL_EXTRA_VERSION_STRING "${CNNL_EXTRA_VERSION_MAJOR}.${CNNL_EXTRA_VERSION_MINOR}.${CNNL_EXTRA_VERSION_PATCH}") +file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_MAJOR + REGEX "^#define CNNL_EXTRA_MAJOR [0-9]+.*$") +file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_MINOR + REGEX "^#define CNNL_EXTRA_MINOR [0-9]+.*$") +file(STRINGS "${CNNL_EXTRA_INCLUDE_DIR}/cnnl_extra.h" CNNL_EXTRA_PATCH + REGEX "^#define CNNL_EXTRA_PATCHLEVEL [0-9]+.*$") + +string(REGEX REPLACE "^#define CNNL_EXTRA_MAJOR ([0-9]+).*$" "\\1" + CNNL_EXTRA_VERSION_MAJOR "${CNNL_EXTRA_MAJOR}") +string(REGEX REPLACE "^#define CNNL_EXTRA_MINOR ([0-9]+).*$" "\\1" + CNNL_EXTRA_VERSION_MINOR "${CNNL_EXTRA_MINOR}") +string(REGEX REPLACE "^#define CNNL_EXTRA_PATCHLEVEL ([0-9]+).*$" "\\1" + CNNL_EXTRA_VERSION_PATCH "${CNNL_EXTRA_PATCH}") +set(CNNL_EXTRA_VERSION_STRING + "${CNNL_EXTRA_VERSION_MAJOR}.${CNNL_EXTRA_VERSION_MINOR}.${CNNL_EXTRA_VERSION_PATCH}" +) add_library(libcnnl_extra SHARED IMPORTED) -set_target_properties(libcnnl_extra PROPERTIES - IMPORTED_LOCATION ${CNNL_EXTRA_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNNL_EXTRA_INCLUDE_DIR} -) - -message(STATUS "Found CNNL_EXTRA: ${__found_cnnl_extra_root} (found version: ${CNNL_EXTRA_VERSION_STRING})") +set_target_properties( + libcnnl_extra PROPERTIES IMPORTED_LOCATION ${CNNL_EXTRA_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${CNNL_EXTRA_INCLUDE_DIR}) +message( + STATUS + "Found CNNL_EXTRA: ${__found_cnnl_extra_root} (found version: ${CNNL_EXTRA_VERSION_STRING})" +) diff --git a/cmake/cnrt.cmake b/cmake/cnrt.cmake index fec07cce..c4b98756 100644 --- a/cmake/cnrt.cmake +++ b/cmake/cnrt.cmake @@ -1,40 +1,48 @@ -find_library(CNRT_LIBRARY - NAMES libcnrt.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CNRT library." ) +find_library( + CNRT_LIBRARY + NAMES libcnrt.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CNRT library.") if(CNRT_LIBRARY STREQUAL "CNRT_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CNRT Library") + message(FATAL_ERROR "Can not find CNRT Library") endif() get_filename_component(__found_cnrt_root ${CNRT_LIBRARY}/../../ REALPATH) -find_path(CNRT_INCLUDE_DIR - NAMES cnrt.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnrt_root} - PATH_SUFFIXES include - DOC "Path to CNRT include directory." ) +find_path( + CNRT_INCLUDE_DIR + NAMES cnrt.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_cnrt_root} + PATH_SUFFIXES include + DOC "Path to CNRT include directory.") if(CNRT_INCLUDE_DIR STREQUAL "CNRT_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CNRT Library") + message(FATAL_ERROR "Can not find CNRT Library") endif() -file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_MAJOR REGEX "^#define CNRT_MAJOR_VERSION [0-9]+.*$") -file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_MINOR REGEX "^#define CNRT_MINOR_VERSION [0-9]+.*$") -file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_PATCH REGEX "^#define CNRT_PATCH_VERSION [0-9]+.*$") - -string(REGEX REPLACE "^#define CNRT_MAJOR_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_MAJOR "${CNRT_MAJOR}") -string(REGEX REPLACE "^#define CNRT_MINOR_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_MINOR "${CNRT_MINOR}") -string(REGEX REPLACE "^#define CNRT_PATCH_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_PATCH "${CNRT_PATCH}") -set(CNRT_VERSION_STRING "${CNRT_VERSION_MAJOR}.${CNRT_VERSION_MINOR}.${CNRT_VERSION_PATCH}") +file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_MAJOR + REGEX "^#define CNRT_MAJOR_VERSION [0-9]+.*$") +file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_MINOR + REGEX "^#define CNRT_MINOR_VERSION [0-9]+.*$") +file(STRINGS "${CNRT_INCLUDE_DIR}/cnrt.h" CNRT_PATCH + REGEX "^#define CNRT_PATCH_VERSION [0-9]+.*$") + +string(REGEX REPLACE "^#define CNRT_MAJOR_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_MAJOR + "${CNRT_MAJOR}") +string(REGEX REPLACE "^#define CNRT_MINOR_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_MINOR + "${CNRT_MINOR}") +string(REGEX REPLACE "^#define CNRT_PATCH_VERSION ([0-9]+).*$" "\\1" CNRT_VERSION_PATCH + "${CNRT_PATCH}") +set(CNRT_VERSION_STRING + "${CNRT_VERSION_MAJOR}.${CNRT_VERSION_MINOR}.${CNRT_VERSION_PATCH}") add_library(libcnrt SHARED IMPORTED) -set_target_properties(libcnrt PROPERTIES - IMPORTED_LOCATION ${CNRT_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CNRT_INCLUDE_DIR} -) - -message(STATUS "Found CNRT: ${__found_cnrt_root} (found version: ${CNRT_VERSION_STRING})") +set_target_properties( + libcnrt PROPERTIES IMPORTED_LOCATION ${CNRT_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${CNRT_INCLUDE_DIR}) +message( + STATUS "Found CNRT: ${__found_cnrt_root} (found version: ${CNRT_VERSION_STRING})") diff --git a/cmake/cpp_redis.cmake b/cmake/cpp_redis.cmake index d7b642e4..f4a88758 100644 --- a/cmake/cpp_redis.cmake +++ b/cmake/cpp_redis.cmake @@ -1,2 +1,5 @@ -file(GLOB_RECURSE CPP_REDIS_SRCS ${PROJECT_SOURCE_DIR}/third_party/cpp_redis/sources/*.cpp ${PROJECT_SOURCE_DIR}/third_party/tacopie/sources/*.cpp) -set(CPP_REDIS_INCLUDES ${PROJECT_SOURCE_DIR}/third_party/cpp_redis/includes ${PROJECT_SOURCE_DIR}/third_party/tacopie/includes) \ No newline at end of file +file(GLOB_RECURSE CPP_REDIS_SRCS + ${PROJECT_SOURCE_DIR}/third_party/cpp_redis/sources/*.cpp + ${PROJECT_SOURCE_DIR}/third_party/tacopie/sources/*.cpp) +set(CPP_REDIS_INCLUDES ${PROJECT_SOURCE_DIR}/third_party/cpp_redis/includes + ${PROJECT_SOURCE_DIR}/third_party/tacopie/includes) diff --git a/cmake/cpuinfo.cmake b/cmake/cpuinfo.cmake index 97647e38..cf220e06 100644 --- a/cmake/cpuinfo.cmake +++ b/cmake/cpuinfo.cmake @@ -1,20 +1,20 @@ -if (MGE_USE_SYSTEM_LIB) - find_package(Cpuinfo) - message(STATUS "Using system provided cpuinfo ${cpuinfo_VERSION}") - add_library(libcpuinfo IMPORTED GLOBAL) - set_target_properties( - libcpuinfo PROPERTIES - IMPORTED_LOCATION ${cpuinfo_LIBRARIES} - INTERFACE_INCLUDE_DIRECTORIES ${cpuinfo_INCLUDE_DIRS} - ) - return() +if(MGE_USE_SYSTEM_LIB) + find_package(Cpuinfo) + message(STATUS "Using system provided cpuinfo ${cpuinfo_VERSION}") + add_library(libcpuinfo IMPORTED GLOBAL) + set_target_properties( + libcpuinfo PROPERTIES IMPORTED_LOCATION ${cpuinfo_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES ${cpuinfo_INCLUDE_DIRS}) + return() endif() -SET(CPUINFO_LIBRARY_TYPE "static" CACHE STRING "Type of cpuinfo library (shared, static, or default) to build") -OPTION(CPUINFO_BUILD_TOOLS "Build command-line tools" OFF) -OPTION(CPUINFO_BUILD_UNIT_TESTS "Build cpuinfo unit tests" OFF) -OPTION(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" OFF) -OPTION(CPUINFO_BUILD_BENCHMARKS "Build cpuinfo micro-benchmarks" OFF) +set(CPUINFO_LIBRARY_TYPE + "static" + CACHE STRING "Type of cpuinfo library (shared, static, or default) to build") +option(CPUINFO_BUILD_TOOLS "Build command-line tools" OFF) +option(CPUINFO_BUILD_UNIT_TESTS "Build cpuinfo unit tests" OFF) +option(CPUINFO_BUILD_MOCK_TESTS "Build cpuinfo mock tests" OFF) +option(CPUINFO_BUILD_BENCHMARKS "Build cpuinfo micro-benchmarks" OFF) include_directories("${PROJECT_SOURCE_DIR}/third_party/cpuinfo/include") -add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/cpuinfo ${CMAKE_CURRENT_BINARY_DIR}/cpuinfo EXCLUDE_FROM_ALL) - +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/cpuinfo + ${CMAKE_CURRENT_BINARY_DIR}/cpuinfo EXCLUDE_FROM_ALL) diff --git a/cmake/cudnn.cmake b/cmake/cudnn.cmake index 9f262c50..d256b8fe 100644 --- a/cmake/cudnn.cmake +++ b/cmake/cudnn.cmake @@ -1,73 +1,83 @@ find_package(PkgConfig) if(${PkgConfig_FOUND}) - pkg_check_modules(PC_CUDNN QUIET CUDNN) + pkg_check_modules(PC_CUDNN QUIET CUDNN) endif() -if("${CUDNN_ROOT_DIR}" STREQUAL "" AND NOT "$ENV{CUDNN_ROOT_DIR}" STREQUAL "") - set(CUDNN_ROOT_DIR $ENV{CUDNN_ROOT_DIR}) +if("${CUDNN_ROOT_DIR}" STREQUAL "" AND NOT "$ENV{CUDNN_ROOT_DIR}" STREQUAL "") + set(CUDNN_ROOT_DIR $ENV{CUDNN_ROOT_DIR}) endif() if(MGE_CUDA_USE_STATIC AND NOT MGE_WITH_CUDNN_SHARED) - find_library(CUDNN_LIBRARY - NAMES libcudnn_static.a cudnn.lib - PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CUDNN library." ) + find_library( + CUDNN_LIBRARY + NAMES libcudnn_static.a cudnn.lib + PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} + ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CUDNN library.") else() - find_library(CUDNN_LIBRARY - NAMES libcudnn.so libcudnn.dylib cudnn64.dll - PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "CUDNN library." ) + find_library( + CUDNN_LIBRARY + NAMES libcudnn.so libcudnn.dylib cudnn64.dll + PATHS ${ALTER_LD_LIBRARY_PATHS} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} + ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "CUDNN library.") endif() if(CUDNN_LIBRARY STREQUAL "CUDNN_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find CuDNN Library, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env") + message( + FATAL_ERROR + "Can not find CuDNN Library, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env" + ) endif() get_filename_component(__found_cudnn_root ${CUDNN_LIBRARY}/../.. REALPATH) -find_path(CUDNN_INCLUDE_DIR - NAMES cudnn.h - HINTS $ENV{PC_CUDNN_INCLUDE_DIRS} ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_cudnn_root} - PATH_SUFFIXES include - DOC "Path to CUDNN include directory." ) +find_path( + CUDNN_INCLUDE_DIR + NAMES cudnn.h + HINTS $ENV{PC_CUDNN_INCLUDE_DIRS} ${CUDNN_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} + ${__found_cudnn_root} + PATH_SUFFIXES include + DOC "Path to CUDNN include directory.") if(CUDNN_INCLUDE_DIR STREQUAL "CUDNN_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find CuDNN INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env") + message( + FATAL_ERROR + "Can not find CuDNN INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init CUDNN env" + ) endif() if(EXISTS ${CUDNN_INCLUDE_DIR}/cudnn_version.h) - file(READ ${CUDNN_INCLUDE_DIR}/cudnn_version.h CUDNN_VERSION_FILE_CONTENTS) + file(READ ${CUDNN_INCLUDE_DIR}/cudnn_version.h CUDNN_VERSION_FILE_CONTENTS) else() - file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS) + file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS) endif() -string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" - CUDNN_MAJOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}") -string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" - CUDNN_MAJOR_VERSION "${CUDNN_MAJOR_VERSION}") -string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" - CUDNN_MINOR_VERSION "${CUDNN_VERSION_FILE_CONTENTS}") -string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" - CUDNN_MINOR_VERSION "${CUDNN_MINOR_VERSION}") -string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" - CUDNN_PATCH_VERSION "${CUDNN_VERSION_FILE_CONTENTS}") -string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" - CUDNN_PATCH_VERSION "${CUDNN_PATCH_VERSION}") +string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" CUDNN_MAJOR_VERSION + "${CUDNN_VERSION_FILE_CONTENTS}") +string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" CUDNN_MAJOR_VERSION + "${CUDNN_MAJOR_VERSION}") +string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" CUDNN_MINOR_VERSION + "${CUDNN_VERSION_FILE_CONTENTS}") +string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" CUDNN_MINOR_VERSION + "${CUDNN_MINOR_VERSION}") +string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" CUDNN_PATCH_VERSION + "${CUDNN_VERSION_FILE_CONTENTS}") +string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" CUDNN_PATCH_VERSION + "${CUDNN_PATCH_VERSION}") set(CUDNN_VERSION ${CUDNN_MAJOR_VERSION}.${CUDNN_MINOR_VERSION}.${CUDNN_PATCH_VERSION}) - - if(MGE_CUDA_USE_STATIC) - add_library(libcudnn STATIC IMPORTED) + add_library(libcudnn STATIC IMPORTED) else() - add_library(libcudnn SHARED IMPORTED) + add_library(libcudnn SHARED IMPORTED) endif() -set_target_properties(libcudnn PROPERTIES - IMPORTED_LOCATION ${CUDNN_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CUDNN_INCLUDE_DIR}) +set_target_properties( + libcudnn PROPERTIES IMPORTED_LOCATION ${CUDNN_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${CUDNN_INCLUDE_DIR}) message(STATUS "Found CuDNN: ${__found_cudnn_root} (found version: ${CUDNN_VERSION})") diff --git a/cmake/flatbuffers.cmake b/cmake/flatbuffers.cmake index 0f895930..61cb0c0f 100644 --- a/cmake/flatbuffers.cmake +++ b/cmake/flatbuffers.cmake @@ -1,27 +1,47 @@ -if (MGE_USE_SYSTEM_LIB) - find_package(Flatbuffers REQUIRED) - message(STATUS "Using system provided Flatbuffers ${Flatbuffers_VERSION}") - include(cmake/BuildFlatBuffers.cmake) - return() +if(MGE_USE_SYSTEM_LIB) + find_package(Flatbuffers REQUIRED) + message(STATUS "Using system provided Flatbuffers ${Flatbuffers_VERSION}") + include(cmake/BuildFlatBuffers.cmake) + return() endif() if(MSVC OR WIN32) - message(DEBUG "add flags flatc for clang-cl build") - set(FLATC_FLAGS "") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=unknown-argument -Wno-error=c++98-compat -Wno-error=reserved-id-macro") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=sign-conversion -Wno-error=exceptions -Wno-error=argument-outside-range") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=delete-non-virtual-dtor -Wno-error=ignored-attributes -Wno-error=format") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=sign-compare -Wno-error=unused-private-field -Wno-error=braced-scalar-init") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=return-type-c-linkage -Wno-error=invalid-noreturn -Wno-error=c++98-compat-pedantic") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=extra-semi-stmt -Wno-error=missing-prototypes -Wno-error=documentation-unknown-command") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=missing-variable-declarations -Wno-error=nonportable-system-include-path") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=exit-time-destructors -Wno-error=unused-macros -Wno-error=global-constructors") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=switch-enum -Wno-error=missing-noreturn -Wno-error=float-equal") - if (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL "11.0.0") - set(FLATC_FLAGS "${FLATC_FLAGS} -Wno-error=suggest-override -Wno-error=suggest-destructor-override") - endif() + message(DEBUG "add flags flatc for clang-cl build") + set(FLATC_FLAGS "") + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=unknown-argument -Wno-error=c++98-compat -Wno-error=reserved-id-macro" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=sign-conversion -Wno-error=exceptions -Wno-error=argument-outside-range" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=delete-non-virtual-dtor -Wno-error=ignored-attributes -Wno-error=format" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=sign-compare -Wno-error=unused-private-field -Wno-error=braced-scalar-init" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=return-type-c-linkage -Wno-error=invalid-noreturn -Wno-error=c++98-compat-pedantic" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=extra-semi-stmt -Wno-error=missing-prototypes -Wno-error=documentation-unknown-command" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=missing-variable-declarations -Wno-error=nonportable-system-include-path" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=exit-time-destructors -Wno-error=unused-macros -Wno-error=global-constructors" + ) + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=switch-enum -Wno-error=missing-noreturn -Wno-error=float-equal" + ) + if(${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL "11.0.0") + set(FLATC_FLAGS + "${FLATC_FLAGS} -Wno-error=suggest-override -Wno-error=suggest-destructor-override" + ) + endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLATC_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLATC_FLAGS}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLATC_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLATC_FLAGS}") endif() option(FLATBUFFERS_BUILD_TESTS "" OFF) diff --git a/cmake/gflags.cmake b/cmake/gflags.cmake index 9dbb8035..a645ecdd 100644 --- a/cmake/gflags.cmake +++ b/cmake/gflags.cmake @@ -1 +1,2 @@ -add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/gflags ${CMAKE_CURRENT_BINARY_DIR}/gflags) \ No newline at end of file +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/gflags + ${CMAKE_CURRENT_BINARY_DIR}/gflags) diff --git a/cmake/gtest.cmake b/cmake/gtest.cmake index d2be2f35..a3071f8f 100644 --- a/cmake/gtest.cmake +++ b/cmake/gtest.cmake @@ -1,2 +1,2 @@ -add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/gtest ${CMAKE_CURRENT_BINARY_DIR}/gtest EXCLUDE_FROM_ALL) - +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/gtest + ${CMAKE_CURRENT_BINARY_DIR}/gtest EXCLUDE_FROM_ALL) diff --git a/cmake/llvm-project.cmake b/cmake/llvm-project.cmake index bbea20d7..ce2599ac 100644 --- a/cmake/llvm-project.cmake +++ b/cmake/llvm-project.cmake @@ -1,88 +1,136 @@ -# - Find the llvm/mlir libraries -# This module finds if llvm/mlir is installed, or build llvm/mlir from source. -# This module sets the following variables. +# * Find the llvm/mlir libraries This module finds if llvm/mlir is installed, or build +# llvm/mlir from source. This module sets the following variables. # -# MLIR_LLVM_INCLUDE_DIR - path to the LLVM/MLIR include files -# MLIR_LLVM_LIBS - path to the LLVM/MLIR libraries +# MLIR_LLVM_INCLUDE_DIR - path to the LLVM/MLIR include files MLIR_LLVM_LIBS - path +# to the LLVM/MLIR libraries # # This module define the following functions. # -# external_tablegen_library - created interface library which depends on tablegen outputs +# external_tablegen_library - created interface library which depends on tablegen +# outputs include(CMakeParseArguments) function(external_tablegen_library) - cmake_parse_arguments( - _RULE - "TESTONLY" - "NAME;TBLGEN" - "SRCS;INCLUDES;OUTS" - ${ARGN} - ) + cmake_parse_arguments(_RULE "TESTONLY" "NAME;TBLGEN" "SRCS;INCLUDES;OUTS" ${ARGN}) - if(_RULE_TESTONLY AND NOT MGE_WITH_TEST) - return() - endif() + if(_RULE_TESTONLY AND NOT MGE_WITH_TEST) + return() + endif() - set(_NAME ${_RULE_NAME}) + set(_NAME ${_RULE_NAME}) - set(LLVM_TARGET_DEFINITIONS ${_RULE_SRCS}) - set(_INCLUDE_DIRS ${_RULE_INCLUDES}) - list(TRANSFORM _INCLUDE_DIRS PREPEND "-I") - set(_OUTPUTS) - while(_RULE_OUTS) - list(GET _RULE_OUTS 0 _COMMAND) - list(REMOVE_AT _RULE_OUTS 0) - list(GET _RULE_OUTS 0 _FILE) - list(REMOVE_AT _RULE_OUTS 0) - tablegen(${_RULE_TBLGEN} ${_FILE} ${_COMMAND} ${_INCLUDE_DIRS}) - list(APPEND _OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/${_FILE}) - endwhile() - add_custom_target(${_NAME}_target DEPENDS ${_OUTPUTS}) + set(LLVM_TARGET_DEFINITIONS ${_RULE_SRCS}) + set(_INCLUDE_DIRS ${_RULE_INCLUDES}) + list(TRANSFORM _INCLUDE_DIRS PREPEND "-I") + set(_OUTPUTS) + while(_RULE_OUTS) + list(GET _RULE_OUTS 0 _COMMAND) + list(REMOVE_AT _RULE_OUTS 0) + list(GET _RULE_OUTS 0 _FILE) + list(REMOVE_AT _RULE_OUTS 0) + tablegen(${_RULE_TBLGEN} ${_FILE} ${_COMMAND} ${_INCLUDE_DIRS}) + list(APPEND _OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/${_FILE}) + endwhile() + add_custom_target(${_NAME}_target DEPENDS ${_OUTPUTS}) - add_library(${_NAME} INTERFACE) - add_dependencies(${_NAME} ${_NAME}_target) + add_library(${_NAME} INTERFACE) + add_dependencies(${_NAME} ${_NAME}_target) - target_include_directories(${_NAME} INTERFACE - "$") + target_include_directories(${_NAME} INTERFACE "$") - install(TARGETS ${_NAME} EXPORT ${MGE_EXPORT_TARGETS}) + install(TARGETS ${_NAME} EXPORT ${MGE_EXPORT_TARGETS}) endfunction() -set(LLVM_LIBS LLVMCore LLVMSupport LLVMX86CodeGen LLVMOrcJIT LLVMNVPTXCodeGen LLVMNVPTXDesc LLVMNVPTXInfo) -set(MLIR_CORE_LIBS MLIRAnalysis MLIRExecutionEngine MLIRIR MLIRParser MLIRPass MLIRSideEffectInterfaces MLIRTransforms) -set(MLIR_DIALECT_LIBS MLIRAsync MLIRAVX512 MLIRGPU MLIRLLVMAVX512 MLIRNVVMIR MLIROpenACC MLIRPDL MLIRPDLInterp MLIRQuant MLIRROCDLIR MLIRSDBM MLIRShape MLIRSPIRV MLIRStandardOpsTransforms MLIRTosa) -set(MLIR_CONVERSION_LIBS MLIRAffineToStandard MLIRAVX512ToLLVM MLIRGPUToGPURuntimeTransforms MLIRGPUToNVVMTransforms MLIRSCFToStandard) +set(LLVM_LIBS + LLVMCore + LLVMSupport + LLVMX86CodeGen + LLVMOrcJIT + LLVMNVPTXCodeGen + LLVMNVPTXDesc + LLVMNVPTXInfo) +set(MLIR_CORE_LIBS + MLIRAnalysis + MLIRExecutionEngine + MLIRIR + MLIRParser + MLIRPass + MLIRSideEffectInterfaces + MLIRTransforms) +set(MLIR_DIALECT_LIBS + MLIRAsync + MLIRAVX512 + MLIRGPU + MLIRLLVMAVX512 + MLIRNVVMIR + MLIROpenACC + MLIRPDL + MLIRPDLInterp + MLIRQuant + MLIRROCDLIR + MLIRSDBM + MLIRShape + MLIRSPIRV + MLIRStandardOpsTransforms + MLIRTosa) +set(MLIR_CONVERSION_LIBS + MLIRAffineToStandard MLIRAVX512ToLLVM MLIRGPUToGPURuntimeTransforms + MLIRGPUToNVVMTransforms MLIRSCFToStandard) set(MLIR_TRANSLATION_LIBS MLIRTargetLLVMIR MLIRTargetNVVMIR) -set(MLIR_LIBS ${MLIR_CORE_LIBS} ${MLIR_DIALECT_LIBS} ${MLIR_CONVERSION_LIBS} ${MLIR_TRANSLATION_LIBS}) +set(MLIR_LIBS ${MLIR_CORE_LIBS} ${MLIR_DIALECT_LIBS} ${MLIR_CONVERSION_LIBS} + ${MLIR_TRANSLATION_LIBS}) set(MLIR_LLVM_LIBS ${LLVM_LIBS} ${MLIR_LIBS}) function(add_mge_mlir_src_dep llvm_monorepo_path) - set(_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}") - string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) - if(NOT uppercase_CMAKE_BUILD_TYPE MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL)$") - set(CMAKE_BUILD_TYPE "Debug") - endif() - set(_CMAKE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) - set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) + set(_CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}") + string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE) + if(NOT uppercase_CMAKE_BUILD_TYPE MATCHES + "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL)$") + set(CMAKE_BUILD_TYPE "Debug") + endif() + set(_CMAKE_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) + set(BUILD_SHARED_LIBS + OFF + CACHE BOOL "" FORCE) - add_subdirectory("${llvm_monorepo_path}/llvm" ${LLVM_BUILD_DIR} EXCLUDE_FROM_ALL) + add_subdirectory("${llvm_monorepo_path}/llvm" ${LLVM_BUILD_DIR} EXCLUDE_FROM_ALL) - # Reset CMAKE_BUILD_TYPE to its previous setting - set(CMAKE_BUILD_TYPE "${_CMAKE_BUILD_TYPE}" CACHE STRING "Build type" FORCE) - # Reset BUILD_SHARED_LIBS to its previous setting - set(BUILD_SHARED_LIBS ${_CMAKE_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libraries" FORCE) + # Reset CMAKE_BUILD_TYPE to its previous setting + set(CMAKE_BUILD_TYPE + "${_CMAKE_BUILD_TYPE}" + CACHE STRING "Build type" FORCE) + # Reset BUILD_SHARED_LIBS to its previous setting + set(BUILD_SHARED_LIBS + ${_CMAKE_BUILD_SHARED_LIBS} + CACHE BOOL "Build shared libraries" FORCE) endfunction() # llvm build options -set(LLVM_INCLUDE_EXAMPLES OFF CACHE BOOL "" FORCE) -set(LLVM_INCLUDE_TESTS OFF CACHE BOOL "" FORCE) -set(LLVM_INCLUDE_DOCS OFF CACHE BOOL "" FORCE) -set(LLVM_ENABLE_BINDINGS OFF CACHE BOOL "" FORCE) -set(LLVM_INCLUDE_BENCHMARKS OFF CACHE BOOL "" FORCE) -set(LLVM_ENABLE_RTTI ${MGE_ENABLE_RTTI} CACHE BOOL "" FORCE) -set(LLVM_TARGETS_TO_BUILD "X86;NVPTX;AArch64;ARM" CACHE STRING "" FORCE) -set(LLVM_ENABLE_PROJECTS "mlir" CACHE STRING "" FORCE) +set(LLVM_INCLUDE_EXAMPLES + OFF + CACHE BOOL "" FORCE) +set(LLVM_INCLUDE_TESTS + OFF + CACHE BOOL "" FORCE) +set(LLVM_INCLUDE_DOCS + OFF + CACHE BOOL "" FORCE) +set(LLVM_ENABLE_BINDINGS + OFF + CACHE BOOL "" FORCE) +set(LLVM_INCLUDE_BENCHMARKS + OFF + CACHE BOOL "" FORCE) +set(LLVM_ENABLE_RTTI + ${MGE_ENABLE_RTTI} + CACHE BOOL "" FORCE) +set(LLVM_TARGETS_TO_BUILD + "X86;NVPTX;AArch64;ARM" + CACHE STRING "" FORCE) +set(LLVM_ENABLE_PROJECTS + "mlir" + CACHE STRING "" FORCE) set(LLVM_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm) add_mge_mlir_src_dep("third_party/llvm-project") @@ -91,6 +139,5 @@ set(MLIR_LLVM_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/third_party/llvm-project/llvm/include ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/include ${PROJECT_SOURCE_DIR}/third_party/llvm-project/mlir/include - ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/tools/mlir/include - ) + ${PROJECT_BINARY_DIR}/third_party/llvm-project/llvm/tools/mlir/include) set(MLIR_TABLEGEN_EXE mlir-tblgen) diff --git a/cmake/magicmind.cmake b/cmake/magicmind.cmake index 0dd3d050..37ae170e 100644 --- a/cmake/magicmind.cmake +++ b/cmake/magicmind.cmake @@ -1,54 +1,64 @@ -find_library(MAGICMIND_LIBRARY - NAMES libmagicmind.so - PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "MAGICMIND library." ) +find_library( + MAGICMIND_LIBRARY + NAMES libmagicmind.so + PATHS ${ALTER_LD_LIBRARY_PATHS} "$ENV{NEUWARE_HOME}/lib64" ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "MAGICMIND library.") if(MAGICMIND_LIBRARY STREQUAL "MAGICMIND_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find MAGICMIND Library") + message(FATAL_ERROR "Can not find MAGICMIND Library") endif() get_filename_component(__found_magicmind_root "${MAGICMIND_LIBRARY}/../../" REALPATH) -find_path(MAGICMIND_INCLUDE_DIR - NAMES common.h - HINTS "$ENV{NEUWARE_HOME}/include" ${__found_magicmind_root} - PATH_SUFFIXES include - DOC "Path to MAGICMIND include directory." ) +find_path( + MAGICMIND_INCLUDE_DIR + NAMES common.h + HINTS "$ENV{NEUWARE_HOME}/include" ${__found_magicmind_root} + PATH_SUFFIXES include + DOC "Path to MAGICMIND include directory.") if(MAGICMIND_INCLUDE_DIR STREQUAL "MAGICMIND_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find MAGICMIND Library") + message(FATAL_ERROR "Can not find MAGICMIND Library") endif() -file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_MAJOR REGEX "^#define MM_MAJOR_VERSION [0-9]+.*$") -file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_MINOR REGEX "^#define MM_MINOR_VERSION [0-9]+.*$") -file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_PATCH REGEX "^#define MM_PATCH_VERSION [0-9]+.*$") +file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_MAJOR + REGEX "^#define MM_MAJOR_VERSION [0-9]+.*$") +file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_MINOR + REGEX "^#define MM_MINOR_VERSION [0-9]+.*$") +file(STRINGS "${MAGICMIND_INCLUDE_DIR}/common.h" MAGICMIND_PATCH + REGEX "^#define MM_PATCH_VERSION [0-9]+.*$") -string(REGEX REPLACE "^#define MM_MAJOR_VERSION ([0-9]+).*$" "\\1" MAGICMIND_VERSION_MAJOR "${MAGICMIND_MAJOR}") -string(REGEX REPLACE "^#define MM_MINOR_VERSION ([0-9]+).*$" "\\1" MAGICMIND_VERSION_MINOR "${MAGICMIND_MINOR}") -string(REGEX REPLACE "^#define MM_PATCH_VERSION ([0-9]+).*$" "\\1" MAGICMIND_VERSION_PATCH "${MAGICMIND_PATCH}") -set(MAGICMIND_VERSION_STRING "${MAGICMIND_VERSION_MAJOR}.${MAGICMIND_VERSION_MINOR}.${MAGICMIND_VERSION_PATCH}") +string(REGEX REPLACE "^#define MM_MAJOR_VERSION ([0-9]+).*$" "\\1" + MAGICMIND_VERSION_MAJOR "${MAGICMIND_MAJOR}") +string(REGEX REPLACE "^#define MM_MINOR_VERSION ([0-9]+).*$" "\\1" + MAGICMIND_VERSION_MINOR "${MAGICMIND_MINOR}") +string(REGEX REPLACE "^#define MM_PATCH_VERSION ([0-9]+).*$" "\\1" + MAGICMIND_VERSION_PATCH "${MAGICMIND_PATCH}") +set(MAGICMIND_VERSION_STRING + "${MAGICMIND_VERSION_MAJOR}.${MAGICMIND_VERSION_MINOR}.${MAGICMIND_VERSION_PATCH}") add_library(libmagicmind SHARED IMPORTED) -set_target_properties(libmagicmind PROPERTIES - IMPORTED_LOCATION ${MAGICMIND_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${MAGICMIND_INCLUDE_DIR} -) +set_target_properties( + libmagicmind PROPERTIES IMPORTED_LOCATION ${MAGICMIND_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${MAGICMIND_INCLUDE_DIR}) -message(STATUS "Found MAGICMIND: ${__found_magicmind_root} (found version: ${MAGICMIND_VERSION_STRING})") +message( + STATUS + "Found MAGICMIND: ${__found_magicmind_root} (found version: ${MAGICMIND_VERSION_STRING})" +) -find_library(MAGICMIND_RUNTIME_LIBRARY - NAMES libmagicmind_runtime.so - PATHS "${__found_magicmind_root}/lib64" - ) +find_library( + MAGICMIND_RUNTIME_LIBRARY + NAMES libmagicmind_runtime.so + PATHS "${__found_magicmind_root}/lib64") if(MAGICMIND_RUNTIME_LIBRARY STREQUAL "MAGICMIND_RUNTIME_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find MAGICMIND_RUNTIME Library") + message(FATAL_ERROR "Can not find MAGICMIND_RUNTIME Library") else() - message(STATUS "Found MAGICMIND_RUNTIME: ${MAGICMIND_RUNTIME_LIBRARY}") + message(STATUS "Found MAGICMIND_RUNTIME: ${MAGICMIND_RUNTIME_LIBRARY}") endif() add_library(libmagicmind_runtime SHARED IMPORTED) -set_target_properties(libmagicmind_runtime PROPERTIES - IMPORTED_LOCATION ${MAGICMIND_RUNTIME_LIBRARY} -) +set_target_properties(libmagicmind_runtime PROPERTIES IMPORTED_LOCATION + ${MAGICMIND_RUNTIME_LIBRARY}) diff --git a/cmake/mkl.cmake b/cmake/mkl.cmake index 8315f583..cbb81c5c 100644 --- a/cmake/mkl.cmake +++ b/cmake/mkl.cmake @@ -1,77 +1,83 @@ -find_path(MKL_ROOT_DIR - include/mkl_cblas.h - PATHS - ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH} - ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH}/Library - ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32/Library - ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32 - $ENV{MKLDIR} - /opt/intel/mkl/*/ - /opt/intel/cmkl/*/ - /Library/Frameworks/Intel_MKL.framework/Versions/Current/lib/universal -) +find_path( + MKL_ROOT_DIR include/mkl_cblas.h + PATHS ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH} + ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH}/Library + ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32/Library + ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32 + $ENV{MKLDIR} + /opt/intel/mkl/*/ + /opt/intel/cmkl/*/ + /Library/Frameworks/Intel_MKL.framework/Versions/Current/lib/universal) if(${MKL_ROOT_DIR} STREQUAL "MKL_ROOT_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find MKL") + message(FATAL_ERROR "Can not find MKL") endif() message(STATUS "Build with MKL in ${MKL_ROOT_DIR}") -find_path(MKL_INCLUDE_DIR - mkl_cblas.h - PATHS - ${MKL_ROOT_DIR}/include - ${INCLUDE_INSTALL_DIR} -) +find_path(MKL_INCLUDE_DIR mkl_cblas.h PATHS ${MKL_ROOT_DIR}/include + ${INCLUDE_INSTALL_DIR}) option(MGE_MKL_USE_STATIC "Build MegEngine with static MKL" ON) if(MGE_MKL_USE_STATIC) - find_library(MKL_CORE_LIBRARY - NAMES libmkl_core.a mkl_core.lib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + find_library( + MKL_CORE_LIBRARY + NAMES libmkl_core.a mkl_core.lib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - find_library(MKL_SEQUENTIAL_LIBRARY - NAMES libmkl_sequential.a mkl_sequential.lib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + find_library( + MKL_SEQUENTIAL_LIBRARY + NAMES libmkl_sequential.a mkl_sequential.lib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - if(${MGE_ARCH} STREQUAL "x86_64") - find_library(MKL_IPL_LIBRARY - NAMES libmkl_intel_ilp64.a mkl_intel_ilp64.lib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - elseif(${MGE_ARCH} STREQUAL "i386") - find_library(MKL_IPL_LIBRARY - NAMES libmkl_intel_32.a mkl_intel_32.lib mkl_intel_c.lib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - endif() + if(${MGE_ARCH} STREQUAL "x86_64") + find_library( + MKL_IPL_LIBRARY + NAMES libmkl_intel_ilp64.a mkl_intel_ilp64.lib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + elseif(${MGE_ARCH} STREQUAL "i386") + find_library( + MKL_IPL_LIBRARY + NAMES libmkl_intel_32.a mkl_intel_32.lib mkl_intel_c.lib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + endif() - add_library(libmkl INTERFACE IMPORTED) - if(UNIX AND NOT APPLE) - target_link_libraries(libmkl INTERFACE -Wl,--start-group ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY} -Wl,--end-group) - else() - target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY}) - endif() - target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR}) + add_library(libmkl INTERFACE IMPORTED) + if(UNIX AND NOT APPLE) + target_link_libraries( + libmkl INTERFACE -Wl,--start-group ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} + ${MKL_IPL_LIBRARY} -Wl,--end-group) + else() + target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} + ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY}) + endif() + target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR}) else() - find_library(MKL_CORE_LIBRARY - NAMES libmkl_core.so libmkl_core.dylib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + find_library( + MKL_CORE_LIBRARY + NAMES libmkl_core.so libmkl_core.dylib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - find_library(MKL_SEQUENTIAL_LIBRARY - NAMES libmkl_sequential.so libmkl_sequential.dylib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + find_library( + MKL_SEQUENTIAL_LIBRARY + NAMES libmkl_sequential.so libmkl_sequential.dylib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - if(${MGE_ARCH} STREQUAL "x86_64") - find_library(MKL_IPL_LIBRARY - NAMES libmkl_intel_ilp64.so libmkl_intel_ilp64.dylib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - elseif(${MGE_ARCH} STREQUAL "x86_32") - find_library(MKL_IPL_LIBRARY - NAMES libmkl_intel_32.so libmkl_intel_32.dylib - PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) - endif() - target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY}) - target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR}) + if(${MGE_ARCH} STREQUAL "x86_64") + find_library( + MKL_IPL_LIBRARY + NAMES libmkl_intel_ilp64.so libmkl_intel_ilp64.dylib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + elseif(${MGE_ARCH} STREQUAL "x86_32") + find_library( + MKL_IPL_LIBRARY + NAMES libmkl_intel_32.so libmkl_intel_32.dylib + PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) + endif() + target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} + ${MKL_IPL_LIBRARY}) + target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR}) endif() if(${MGE_ARCH} STREQUAL "x86_64") - target_compile_definitions(libmkl INTERFACE -DMKL_ILP64) + target_compile_definitions(libmkl INTERFACE -DMKL_ILP64) endif() diff --git a/cmake/protobuf.cmake b/cmake/protobuf.cmake index 5802b25f..6ac0892d 100644 --- a/cmake/protobuf.cmake +++ b/cmake/protobuf.cmake @@ -1,70 +1,83 @@ function(PROTOBUF_GENERATE_CPP_WITH_ROOT SRCS HDRS ROOT_DIR) - if(NOT ARGN) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP_WITH_ROOT() called without any proto files") - return() - endif() + if(NOT ARGN) + message( + SEND_ERROR + "Error: PROTOBUF_GENERATE_CPP_WITH_ROOT() called without any proto files") + return() + endif() - set(${SRCS}) - set(${HDRS}) - foreach(FIL ${ARGN}) - set(ABS_FIL ${ROOT_DIR}/${FIL}) - get_filename_component(FIL_WE ${FIL} NAME_WE) - get_filename_component(FIL_DIR ${ABS_FIL} PATH) - file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR}) + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${ARGN}) + set(ABS_FIL ${ROOT_DIR}/${FIL}) + get_filename_component(FIL_WE ${FIL} NAME_WE) + get_filename_component(FIL_DIR ${ABS_FIL} PATH) + file(RELATIVE_PATH REL_DIR ${ROOT_DIR} ${FIL_DIR}) - list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc") - list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") + list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc") + list(APPEND ${HDRS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") - add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc" - "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h" - COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} - ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} -I ${FIL_DIR} ${ABS_FIL} -I ${PROTOBUF_INCLUDE_DIRS} - DEPENDS ${ABS_FIL} libprotobuf - COMMENT "Running C++ protocol buffer compiler on ${FIL}" - VERBATIM) - endforeach() + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc" + "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h" + COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} ARGS --cpp_out ${CMAKE_CURRENT_BINARY_DIR} + -I ${FIL_DIR} ${ABS_FIL} -I ${PROTOBUF_INCLUDE_DIRS} + DEPENDS ${ABS_FIL} libprotobuf + COMMENT "Running C++ protocol buffer compiler on ${FIL}" + VERBATIM) + endforeach() - set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) - set(${SRCS} ${${SRCS}} PARENT_SCOPE) - set(${HDRS} ${${HDRS}} PARENT_SCOPE) + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} + ${${SRCS}} + PARENT_SCOPE) + set(${HDRS} + ${${HDRS}} + PARENT_SCOPE) endfunction() if(MGE_USE_SYSTEM_LIB) - find_package(Protobuf) - if(Protobuf_FOUND) - add_library(libprotobuf INTERFACE) - target_link_libraries(libprotobuf INTERFACE ${Protobuf_LIBRARIES}) - target_include_directories(libprotobuf INTERFACE ${Protobuf_INCLUDE_DIRS}) - get_filename_component(Protobuf_ROOT ${Protobuf_INCLUDE_DIR} DIRECTORY) - set(PROTOBUF_ROOT ${Protobuf_ROOT}) - set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE}) - set(PROTOBUF_INCLUDE_DIRS ${Protobuf_INCLUDE_DIRS}) - return() - endif() + find_package(Protobuf) + if(Protobuf_FOUND) + add_library(libprotobuf INTERFACE) + target_link_libraries(libprotobuf INTERFACE ${Protobuf_LIBRARIES}) + target_include_directories(libprotobuf INTERFACE ${Protobuf_INCLUDE_DIRS}) + get_filename_component(Protobuf_ROOT ${Protobuf_INCLUDE_DIR} DIRECTORY) + set(PROTOBUF_ROOT ${Protobuf_ROOT}) + set(PROTOBUF_PROTOC_EXECUTABLE ${Protobuf_PROTOC_EXECUTABLE}) + set(PROTOBUF_INCLUDE_DIRS ${Protobuf_INCLUDE_DIRS}) + return() + endif() endif() - include(ExternalProject) include(GNUInstallDirs) -set(PROTOBUF_DIR "${PROJECT_SOURCE_DIR}/third_party/protobuf" CACHE STRING "protobuf directory") +set(PROTOBUF_DIR + "${PROJECT_SOURCE_DIR}/third_party/protobuf" + CACHE STRING "protobuf directory") set(PROTOBUF_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/protobuf) if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") - set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobufd.a) + set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobufd.a) else() - set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobuf.a) + set(PROTOBUF_LIB ${PROTOBUF_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libprotobuf.a) endif() set(PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_BUILD_DIR}/bin/protoc) -ExternalProject_add( - protobuf - SOURCE_DIR ${PROTOBUF_DIR}/cmake - PREFIX ${PROTOBUF_BUILD_DIR} - CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${PROTOBUF_BUILD_DIR} -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON - BUILD_BYPRODUCTS ${PROTOBUF_LIB} ${PROTOBUF_PROTOC_EXECUTABLE} -) +ExternalProject_Add( + protobuf + SOURCE_DIR ${PROTOBUF_DIR}/cmake + PREFIX ${PROTOBUF_BUILD_DIR} + CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_INSTALL_PREFIX=${PROTOBUF_BUILD_DIR} + -Dprotobuf_BUILD_EXAMPLES=OFF + -Dprotobuf_BUILD_TESTS=OFF + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + BUILD_BYPRODUCTS ${PROTOBUF_LIB} ${PROTOBUF_PROTOC_EXECUTABLE}) set(PROTOBUF_INC ${PROTOBUF_BUILD_DIR}/include) file(MAKE_DIRECTORY ${PROTOBUF_INC}) @@ -72,19 +85,14 @@ file(MAKE_DIRECTORY ${PROTOBUF_INC}) add_library(libprotobuf STATIC IMPORTED GLOBAL) add_dependencies(libprotobuf protobuf) set_target_properties( - libprotobuf PROPERTIES - IMPORTED_LOCATION ${PROTOBUF_LIB} - INTERFACE_INCLUDE_DIRECTORIES ${PROTOBUF_BUILD_DIR}/include -) + libprotobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_LIB} + INTERFACE_INCLUDE_DIRECTORIES ${PROTOBUF_BUILD_DIR}/include) add_executable(protoc IMPORTED GLOBAL) add_dependencies(protoc protobuf) -set_target_properties( - protoc PROPERTIES - IMPORTED_LOCATION ${PROTOBUF_BUILD_DIR}/bin/protoc -) +set_target_properties(protoc PROPERTIES IMPORTED_LOCATION + ${PROTOBUF_BUILD_DIR}/bin/protoc) set(PROTOBUF_ROOT ${PROTOBUF_BUILD_DIR}) set(PROTOBUF_PROTOC_EXECUTABLE protoc) set(PROTOBUF_INCLUDE_DIRS ${PROTOBUF_BUILD_DIR}/include) - diff --git a/cmake/rocm.cmake b/cmake/rocm.cmake index 3bd5897a..b48f1d3c 100644 --- a/cmake/rocm.cmake +++ b/cmake/rocm.cmake @@ -1,28 +1,34 @@ if(NOT DEFINED HIP_PATH) - if(NOT DEFINED ENV{HIP_PATH}) - set(HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed") - else() - set(HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed") - endif() + if(NOT DEFINED ENV{HIP_PATH}) + set(HIP_PATH + "/opt/rocm/hip" + CACHE PATH "Path to which HIP has been installed") + else() + set(HIP_PATH + $ENV{HIP_PATH} + CACHE PATH "Path to which HIP has been installed") + endif() endif() set(CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH}) find_package(HIP QUIET) -if (HIP_FOUND) - message(STATUS "Found HIP: " ${HIP_VERSION}) +if(HIP_FOUND) + message(STATUS "Found HIP: " ${HIP_VERSION}) else() - message(FATAL_ERROR "Could not find HIP. Ensure that HIP is either installed in /opt/rocm/hip or the variable HIP_PATH is set to point to the right location.") + message( + FATAL_ERROR + "Could not find HIP. Ensure that HIP is either installed in /opt/rocm/hip or the variable HIP_PATH is set to point to the right location." + ) endif() -if (${HIP_VERSION} VERSION_LESS 3.0) - message(FATAL_ERROR "ROCM version needed 3. Please update ROCM.") +if(${HIP_VERSION} VERSION_LESS 3.0) + message(FATAL_ERROR "ROCM version needed 3. Please update ROCM.") endif() macro(hipconfig_get_option variable option) - if(NOT DEFINED ${variable}) - execute_process( - COMMAND ${HIP_HIPCONFIG_EXECUTABLE} ${option} - OUTPUT_VARIABLE ${variable}) - endif() + if(NOT DEFINED ${variable}) + execute_process(COMMAND ${HIP_HIPCONFIG_EXECUTABLE} ${option} + OUTPUT_VARIABLE ${variable}) + endif() endmacro() hipconfig_get_option(HIP_COMPILER "--compiler") @@ -31,30 +37,33 @@ hipconfig_get_option(HIP_CPP_CONFIG "--cpp_config") separate_arguments(HIP_CPP_CONFIG) foreach(hip_config_item ${HIP_CPP_CONFIG}) - foreach(macro_name "__HIP_PLATFORM_HCC__" "__HIP_ROCclr__") - if(${hip_config_item} STREQUAL "-D${macro_name}=") - set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name}\n") - set(HIP_CPP_UNDEFINE "${HIP_CPP_UNDEFINE}\ + foreach(macro_name "__HIP_PLATFORM_HCC__" "__HIP_ROCclr__") + if(${hip_config_item} STREQUAL "-D${macro_name}=") + set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name}\n") + set(HIP_CPP_UNDEFINE + "${HIP_CPP_UNDEFINE}\ #ifdef ${macro_name}\n#undef ${macro_name}\n\ #else\n#error\n\ #endif\n") - elseif(${hip_config_item} STREQUAL "-D${macro_name}") - set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name} 1\n") - set(HIP_CPP_UNDEFINE "${HIP_CPP_UNDEFINE}\ + elseif(${hip_config_item} STREQUAL "-D${macro_name}") + set(HIP_CPP_DEFINE "${HIP_CPP_DEFINE}#define ${macro_name} 1\n") + set(HIP_CPP_UNDEFINE + "${HIP_CPP_UNDEFINE}\ #ifdef ${macro_name}\n#undef ${macro_name}\n\ #else\n#error\n\ #endif\n") - endif() - endforeach() + endif() + endforeach() endforeach() message(STATUS "Using HIP compiler ${HIP_COMPILER}") if(${HIP_COMPILER} STREQUAL "hcc") - set(MGE_ROCM_LIBS hip_hcc) - message(WARNING "hcc is not well supported, please modify link.txt to link with hipcc") -elseif (${HIP_COMPILER} STREQUAL "clang") - set(MGE_ROCM_LIBS amdhip64) + set(MGE_ROCM_LIBS hip_hcc) + message( + WARNING "hcc is not well supported, please modify link.txt to link with hipcc") +elseif(${HIP_COMPILER} STREQUAL "clang") + set(MGE_ROCM_LIBS amdhip64) endif() list(APPEND MGE_ROCM_LIBS amdocl64 MIOpen rocblas rocrand) @@ -63,26 +72,28 @@ set(HIP_INCLUDE_DIR ${HIP_ROOT_DIR}/../include) set(HIP_LIBRARY_DIR ${HIP_ROOT_DIR}/../lib) function(find_rocm_library name dirname include library) - find_path(${name}_LIBRARY_DIR - NAMES ${library} - HINTS "${${name}_ROOT_DIR}" "${HIP_ROOT_DIR}/../${dirname}" - PATH_SUFFIXES lib lib/x86_64 - DOC "Path to ${name} library directory") + find_path( + ${name}_LIBRARY_DIR + NAMES ${library} + HINTS "${${name}_ROOT_DIR}" "${HIP_ROOT_DIR}/../${dirname}" + PATH_SUFFIXES lib lib/x86_64 + DOC "Path to ${name} library directory") - if(${${name}_LIBRARY_DIR} MATCHES "NOTFOUND$") - message(FATAL_ERROR "Can not find ${name} library") - endif() + if(${${name}_LIBRARY_DIR} MATCHES "NOTFOUND$") + message(FATAL_ERROR "Can not find ${name} library") + endif() - find_path(${name}_INCLUDE_DIR - NAMES ${include} - HINTS "${${name}_ROOT_DIR}" "${HIP_ROOT_DIR}/../${dirname}" - PATH_SUFFIXES include - DOC "Path to ${name} include directory") + find_path( + ${name}_INCLUDE_DIR + NAMES ${include} + HINTS "${${name}_ROOT_DIR}" "${HIP_ROOT_DIR}/../${dirname}" + PATH_SUFFIXES include + DOC "Path to ${name} include directory") - if(${name}_INCLUDE_DIR MATCHES "NOTFOUND$") - message(FATAL_ERROR "Can not find ${name} include") - endif() - message(DEBUG "Found lib ${${name}_LIBRARY_DIR}, include ${${name}_INCLUDE_DIR}") + if(${name}_INCLUDE_DIR MATCHES "NOTFOUND$") + message(FATAL_ERROR "Can not find ${name} include") + endif() + message(DEBUG "Found lib ${${name}_LIBRARY_DIR}, include ${${name}_INCLUDE_DIR}") endfunction() find_rocm_library(MIOPEN miopen miopen libMIOpen.so) diff --git a/cmake/tensorrt.cmake b/cmake/tensorrt.cmake index 53f0f433..9bcba8d6 100644 --- a/cmake/tensorrt.cmake +++ b/cmake/tensorrt.cmake @@ -1,166 +1,189 @@ -if("${TRT_ROOT_DIR}" STREQUAL "" AND NOT "$ENV{TRT_ROOT_DIR}" STREQUAL "") - set(TRT_ROOT_DIR $ENV{TRT_ROOT_DIR}) +if("${TRT_ROOT_DIR}" STREQUAL "" AND NOT "$ENV{TRT_ROOT_DIR}" STREQUAL "") + set(TRT_ROOT_DIR $ENV{TRT_ROOT_DIR}) endif() if(MGE_CUDA_USE_STATIC) - find_library(TRT_LIBRARY - NAMES libnvinfer_static.a nvinfer.lib - PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "TRT library." ) - find_library(TRT_PLUGIN_LIBRARY - NAMES libnvinfer_plugin_static.a nvinfer_plugin.lib - PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "TRT plugin library." ) + find_library( + TRT_LIBRARY + NAMES libnvinfer_static.a nvinfer.lib + PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "TRT library.") + find_library( + TRT_PLUGIN_LIBRARY + NAMES libnvinfer_plugin_static.a nvinfer_plugin.lib + PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "TRT plugin library.") else() - find_library(TRT_LIBRARY - NAMES libnvinfer.so libnvinfer.dylib nvinfer.dll - PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "TRT library." ) - find_library(TRT_PLUGIN_LIBRARY - NAMES libnvinfer_plugin.so libnvinfer_plugin.dylib nvinfer_plugin.dll - PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} - HINTS ${ALTER_LIBRARY_PATHS} - PATH_SUFFIXES lib lib64 - DOC "TRT plugin library." ) + find_library( + TRT_LIBRARY + NAMES libnvinfer.so libnvinfer.dylib nvinfer.dll + PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "TRT library.") + find_library( + TRT_PLUGIN_LIBRARY + NAMES libnvinfer_plugin.so libnvinfer_plugin.dylib nvinfer_plugin.dll + PATHS ${ALTER_LD_LIBRARY_PATHS} ${TRT_ROOT_DIR} ${CMAKE_INSTALL_PREFIX} + HINTS ${ALTER_LIBRARY_PATHS} + PATH_SUFFIXES lib lib64 + DOC "TRT plugin library.") endif() if(TRT_LIBRARY STREQUAL "TRT_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find TensorRT Library, please refer to scripts/cmake-build/BUILD_README.md to init TRT env") + message( + FATAL_ERROR + "Can not find TensorRT Library, please refer to scripts/cmake-build/BUILD_README.md to init TRT env" + ) endif() if(TRT_PLUGIN_LIBRARY STREQUAL "TRT_PLUGIN_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find TensorRT Plugin Library, please refer to scripts/cmake-build/BUILD_README.md to init TRT env") + message( + FATAL_ERROR + "Can not find TensorRT Plugin Library, please refer to scripts/cmake-build/BUILD_README.md to init TRT env" + ) endif() get_filename_component(__found_trt_root ${TRT_LIBRARY}/../.. REALPATH) -find_path(TRT_INCLUDE_DIR - NAMES NvInfer.h - HINTS ${TRT_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_trt_root} - PATH_SUFFIXES include - DOC "Path to TRT include directory." ) -find_path(TRT_PLUGIN_INCLUDE_DIR - NAMES NvInferPlugin.h - HINTS ${TRT_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_trt_root} - PATH_SUFFIXES include - DOC "Path to TRT plugin include directory." ) +find_path( + TRT_INCLUDE_DIR + NAMES NvInfer.h + HINTS ${TRT_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_trt_root} + PATH_SUFFIXES include + DOC "Path to TRT include directory.") +find_path( + TRT_PLUGIN_INCLUDE_DIR + NAMES NvInferPlugin.h + HINTS ${TRT_ROOT_DIR} ${CUDA_TOOLKIT_INCLUDE} ${__found_trt_root} + PATH_SUFFIXES include + DOC "Path to TRT plugin include directory.") if(TRT_INCLUDE_DIR STREQUAL "TRT_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find TensorRT INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init TRT env") + message( + FATAL_ERROR + "Can not find TensorRT INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init TRT env" + ) endif() if(TRT_PLUGIN_INCLUDE_DIR STREQUAL "TRT_PLUGIN_INCLUDE_DIR-NOTFOUND") - message(FATAL_ERROR "Can not find TensorRT Plugin INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init TRT env") + message( + FATAL_ERROR + "Can not find TensorRT Plugin INCLUDE, please refer to scripts/cmake-build/BUILD_README.md to init TRT env" + ) endif() -file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MAJOR REGEX "^#define NV_TENSORRT_MAJOR [0-9]+.*$") -file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MINOR REGEX "^#define NV_TENSORRT_MINOR [0-9]+.*$") -file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_PATCH REGEX "^#define NV_TENSORRT_PATCH [0-9]+.*$") +file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MAJOR + REGEX "^#define NV_TENSORRT_MAJOR [0-9]+.*$") +file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MINOR + REGEX "^#define NV_TENSORRT_MINOR [0-9]+.*$") +file(STRINGS "${TRT_INCLUDE_DIR}/NvInfer.h" TensorRT_PATCH + REGEX "^#define NV_TENSORRT_PATCH [0-9]+.*$") -if (TensorRT_MAJOR STREQUAL "") - file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_MAJOR REGEX "^#define NV_TENSORRT_MAJOR [0-9]+.*$") - file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_MINOR REGEX "^#define NV_TENSORRT_MINOR [0-9]+.*$") - file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_PATCH REGEX "^#define NV_TENSORRT_PATCH [0-9]+.*$") +if(TensorRT_MAJOR STREQUAL "") + file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_MAJOR + REGEX "^#define NV_TENSORRT_MAJOR [0-9]+.*$") + file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_MINOR + REGEX "^#define NV_TENSORRT_MINOR [0-9]+.*$") + file(STRINGS "${TRT_INCLUDE_DIR}/NvInferVersion.h" TensorRT_PATCH + REGEX "^#define NV_TENSORRT_PATCH [0-9]+.*$") endif() -string(REGEX REPLACE "^#define NV_TENSORRT_MAJOR ([0-9]+).*$" "\\1" TensorRT_VERSION_MAJOR "${TensorRT_MAJOR}") -string(REGEX REPLACE "^#define NV_TENSORRT_MINOR ([0-9]+).*$" "\\1" TensorRT_VERSION_MINOR "${TensorRT_MINOR}") -string(REGEX REPLACE "^#define NV_TENSORRT_PATCH ([0-9]+).*$" "\\1" TensorRT_VERSION_PATCH "${TensorRT_PATCH}") -set(TRT_VERSION_STRING "${TensorRT_VERSION_MAJOR}.${TensorRT_VERSION_MINOR}.${TensorRT_VERSION_PATCH}") +string(REGEX REPLACE "^#define NV_TENSORRT_MAJOR ([0-9]+).*$" "\\1" + TensorRT_VERSION_MAJOR "${TensorRT_MAJOR}") +string(REGEX REPLACE "^#define NV_TENSORRT_MINOR ([0-9]+).*$" "\\1" + TensorRT_VERSION_MINOR "${TensorRT_MINOR}") +string(REGEX REPLACE "^#define NV_TENSORRT_PATCH ([0-9]+).*$" "\\1" + TensorRT_VERSION_PATCH "${TensorRT_PATCH}") +set(TRT_VERSION_STRING + "${TensorRT_VERSION_MAJOR}.${TensorRT_VERSION_MINOR}.${TensorRT_VERSION_PATCH}") if(MGE_CUDA_USE_STATIC) - add_library(libnvinfer STATIC IMPORTED) - add_library(libnvinfer_plugin STATIC IMPORTED) + add_library(libnvinfer STATIC IMPORTED) + add_library(libnvinfer_plugin STATIC IMPORTED) else() - add_library(libnvinfer SHARED IMPORTED) - add_library(libnvinfer_plugin SHARED IMPORTED) + add_library(libnvinfer SHARED IMPORTED) + add_library(libnvinfer_plugin SHARED IMPORTED) endif() -set_target_properties(libnvinfer PROPERTIES - IMPORTED_LOCATION ${TRT_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${TRT_INCLUDE_DIR} -) -set_target_properties(libnvinfer_plugin PROPERTIES - IMPORTED_LOCATION ${TRT_PLUGIN_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${TRT_PLUGIN_INCLUDE_DIR} -) +set_target_properties( + libnvinfer PROPERTIES IMPORTED_LOCATION ${TRT_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES + ${TRT_INCLUDE_DIR}) +set_target_properties( + libnvinfer_plugin PROPERTIES IMPORTED_LOCATION ${TRT_PLUGIN_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${TRT_PLUGIN_INCLUDE_DIR}) -message(STATUS "Found TensorRT: ${__found_trt_root} (found version: ${TRT_VERSION_STRING})") +message( + STATUS "Found TensorRT: ${__found_trt_root} (found version: ${TRT_VERSION_STRING})") if(TensorRT_VERSION_MAJOR GREATER_EQUAL 7) - if(MGE_CUDA_USE_STATIC) - find_library(LIBMYELIN_COMPILER - NAMES libmyelin_compiler_static.a myelin_compiler_static.lib - PATHS ${__found_trt_root}/lib - ) - if(LIBMYELIN_COMPILER STREQUAL "LIBMYELIN_COMPILER-NOTFOUND") - message(FATAL_ERROR "Can not find LIBMYELIN_COMPILER Library") - else() - message(STATUS "Found TensorRT myelin_compiler: ${LIBMYELIN_COMPILER}") - endif() - add_library(libmyelin_compiler STATIC IMPORTED) - set_target_properties(libmyelin_compiler PROPERTIES - IMPORTED_LOCATION ${LIBMYELIN_COMPILER} - ) + if(MGE_CUDA_USE_STATIC) + find_library( + LIBMYELIN_COMPILER + NAMES libmyelin_compiler_static.a myelin_compiler_static.lib + PATHS ${__found_trt_root}/lib) + if(LIBMYELIN_COMPILER STREQUAL "LIBMYELIN_COMPILER-NOTFOUND") + message(FATAL_ERROR "Can not find LIBMYELIN_COMPILER Library") + else() + message(STATUS "Found TensorRT myelin_compiler: ${LIBMYELIN_COMPILER}") + endif() + add_library(libmyelin_compiler STATIC IMPORTED) + set_target_properties(libmyelin_compiler PROPERTIES IMPORTED_LOCATION + ${LIBMYELIN_COMPILER}) - find_library(LIBMYELIN_EXECUTOR - NAMES libmyelin_executor_static.a myelin_executor_static.lib - PATHS ${__found_trt_root}/lib - ) - if(LIBMYELIN_EXECUTOR STREQUAL "LIBMYELIN_EXECUTOR-NOTFOUND") - message(FATAL_ERROR "Can not find LIBMYELIN_EXECUTOR Library") - else() - message(STATUS "Found TensorRT libmyelin_executor: ${LIBMYELIN_EXECUTOR}") - endif() - add_library(libmyelin_executor STATIC IMPORTED) - set_target_properties(libmyelin_executor PROPERTIES - IMPORTED_LOCATION ${LIBMYELIN_EXECUTOR} - ) + find_library( + LIBMYELIN_EXECUTOR + NAMES libmyelin_executor_static.a myelin_executor_static.lib + PATHS ${__found_trt_root}/lib) + if(LIBMYELIN_EXECUTOR STREQUAL "LIBMYELIN_EXECUTOR-NOTFOUND") + message(FATAL_ERROR "Can not find LIBMYELIN_EXECUTOR Library") + else() + message(STATUS "Found TensorRT libmyelin_executor: ${LIBMYELIN_EXECUTOR}") + endif() + add_library(libmyelin_executor STATIC IMPORTED) + set_target_properties(libmyelin_executor PROPERTIES IMPORTED_LOCATION + ${LIBMYELIN_EXECUTOR}) - find_library(LIBMYELIN_PATTERN_RUNTIME - NAMES libmyelin_pattern_runtime_static.a myelin_pattern_runtime_static.lib - PATHS ${__found_trt_root}/lib - ) - if(LIBMYELIN_PATTERN_RUNTIME STREQUAL "LIBMYELIN_PATTERN_RUNTIME-NOTFOUND") - message(FATAL_ERROR "Can not find LIBMYELIN_PATTERN_RUNTIME Library") - else() - message(STATUS "Found TensorRT libmyelin_pattern_runtime: ${LIBMYELIN_PATTERN_RUNTIME}") - endif() - add_library(libmyelin_pattern_runtime STATIC IMPORTED) - set_target_properties(libmyelin_pattern_runtime PROPERTIES - IMPORTED_LOCATION ${LIBMYELIN_PATTERN_RUNTIME} - ) + find_library( + LIBMYELIN_PATTERN_RUNTIME + NAMES libmyelin_pattern_runtime_static.a myelin_pattern_runtime_static.lib + PATHS ${__found_trt_root}/lib) + if(LIBMYELIN_PATTERN_RUNTIME STREQUAL "LIBMYELIN_PATTERN_RUNTIME-NOTFOUND") + message(FATAL_ERROR "Can not find LIBMYELIN_PATTERN_RUNTIME Library") + else() + message( + STATUS "Found TensorRT libmyelin_pattern_runtime: ${LIBMYELIN_PATTERN_RUNTIME}") + endif() + add_library(libmyelin_pattern_runtime STATIC IMPORTED) + set_target_properties(libmyelin_pattern_runtime + PROPERTIES IMPORTED_LOCATION ${LIBMYELIN_PATTERN_RUNTIME}) - find_library(LIBMYELIN_PATTERN_LIBRARY - NAMES libmyelin_pattern_library_static.a myelin_pattern_library_static.lib - PATHS ${__found_trt_root}/lib - ) - if(LIBMYELIN_PATTERN_LIBRARY STREQUAL "LIBMYELIN_PATTERN_LIBRARY-NOTFOUND") - message(FATAL_ERROR "Can not find LIBMYELIN_PATTERN_LIBRARY Library") - else() - message(STATUS "Found TensorRT libmyelin_pattern_library: ${LIBMYELIN_PATTERN_LIBRARY}") - endif() - add_library(libmyelin_pattern_library STATIC IMPORTED) - set_target_properties(libmyelin_pattern_library PROPERTIES - IMPORTED_LOCATION ${LIBMYELIN_PATTERN_LIBRARY} - ) + find_library( + LIBMYELIN_PATTERN_LIBRARY + NAMES libmyelin_pattern_library_static.a myelin_pattern_library_static.lib + PATHS ${__found_trt_root}/lib) + if(LIBMYELIN_PATTERN_LIBRARY STREQUAL "LIBMYELIN_PATTERN_LIBRARY-NOTFOUND") + message(FATAL_ERROR "Can not find LIBMYELIN_PATTERN_LIBRARY Library") else() - find_library(LIBMYELIN_SHARED - NAMES libmyelin.so myelin.dll - PATHS ${__found_trt_root}/lib - ) + message( + STATUS "Found TensorRT libmyelin_pattern_library: ${LIBMYELIN_PATTERN_LIBRARY}") + endif() + add_library(libmyelin_pattern_library STATIC IMPORTED) + set_target_properties(libmyelin_pattern_library + PROPERTIES IMPORTED_LOCATION ${LIBMYELIN_PATTERN_LIBRARY}) + else() + find_library( + LIBMYELIN_SHARED + NAMES libmyelin.so myelin.dll + PATHS ${__found_trt_root}/lib) - if(LIBMYELIN_SHARED STREQUAL "LIBMYELIN_SHARED-NOTFOUND") - message(FATAL_ERROR "Can not find LIBMYELIN_SHARED Library") - else() - message(STATUS "Found TensorRT libmyelin_shared: ${LIBMYELIN_SHARED}") - endif() - add_library(libmyelin SHARED IMPORTED) - set_target_properties(libmyelin PROPERTIES - IMPORTED_LOCATION ${LIBMYELIN_SHARED} - ) + if(LIBMYELIN_SHARED STREQUAL "LIBMYELIN_SHARED-NOTFOUND") + message(FATAL_ERROR "Can not find LIBMYELIN_SHARED Library") + else() + message(STATUS "Found TensorRT libmyelin_shared: ${LIBMYELIN_SHARED}") endif() + add_library(libmyelin SHARED IMPORTED) + set_target_properties(libmyelin PROPERTIES IMPORTED_LOCATION ${LIBMYELIN_SHARED}) + endif() endif() diff --git a/cmake/zmq.cmake b/cmake/zmq.cmake index d4677553..71f40cd2 100644 --- a/cmake/zmq.cmake +++ b/cmake/zmq.cmake @@ -1,17 +1,26 @@ include(ExternalProject) include(GNUInstallDirs) -set(ZMQ_DIR ${PROJECT_SOURCE_DIR}/third_party/libzmq CACHE STRING "ZMQ directory") +set(ZMQ_DIR + ${PROJECT_SOURCE_DIR}/third_party/libzmq + CACHE STRING "ZMQ directory") set(ZMQ_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/libzmq) set(ZMQ_LIB ${ZMQ_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libzmq.a) -ExternalProject_add( - zmq - SOURCE_DIR ${ZMQ_DIR} - PREFIX ${ZMQ_BUILD_DIR} - CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_PREFIX=${ZMQ_BUILD_DIR} -DWITH_PERF_TOOL=OFF -DZMQ_BUILD_TESTS=OFF -DENABLE_CPACK=OFF -DENABLE_CURVE=OFF - BUILD_BYPRODUCTS ${ZMQ_LIB} -) +ExternalProject_Add( + zmq + SOURCE_DIR ${ZMQ_DIR} + PREFIX ${ZMQ_BUILD_DIR} + CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_INSTALL_PREFIX=${ZMQ_BUILD_DIR} + -DWITH_PERF_TOOL=OFF + -DZMQ_BUILD_TESTS=OFF + -DENABLE_CPACK=OFF + -DENABLE_CURVE=OFF + BUILD_BYPRODUCTS ${ZMQ_LIB}) set(ZMQ_INC ${ZMQ_BUILD_DIR}/include) include_directories(${ZMQ_INC}) @@ -19,8 +28,5 @@ file(MAKE_DIRECTORY ${ZMQ_INC}) add_library(libzmq STATIC IMPORTED GLOBAL) add_dependencies(libzmq zmq) -set_target_properties( - libzmq PROPERTIES - IMPORTED_LOCATION ${ZMQ_LIB} - INTERFACE_INCLUDE_DIRECTORIES ${ZMQ_INC} -) +set_target_properties(libzmq PROPERTIES IMPORTED_LOCATION ${ZMQ_LIB} + INTERFACE_INCLUDE_DIRECTORIES ${ZMQ_INC}) diff --git a/dnn/CMakeLists.txt b/dnn/CMakeLists.txt index 6270da98..dfa4a97a 100644 --- a/dnn/CMakeLists.txt +++ b/dnn/CMakeLists.txt @@ -4,66 +4,61 @@ set(OPR_PARAM_DEFS_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/scripts/gen_param_defs.py) set(OPR_PARAM_DEFS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/include/) file(MAKE_DIRECTORY ${OPR_PARAM_DEFS_OUT_DIR}/megdnn) add_custom_command( - OUTPUT - ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h - ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS} - ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS} - tmp_unuse.log --write-cppjson ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h - DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT} - VERBATIM -) - -list(APPEND OPR_PARAM_DEFS_OUTS - ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h + OUTPUT ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h + ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h + COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} + ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h + COMMAND + ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} + ${OPR_PARAM_DEFS_SRCS} tmp_unuse.log --write-cppjson ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h -) + DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT} + VERBATIM) + +list(APPEND OPR_PARAM_DEFS_OUTS ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h + ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h) list(APPEND OPR_PARAM_DEFS_INC ${OPR_PARAM_DEFS_OUT_DIR}) set(OPR_PARAM_DEFS_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) file(MAKE_DIRECTORY ${OPR_PARAM_DEFS_OUT_DIR}/src/common) add_custom_command( - OUTPUT - ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} - --enumv ${OPR_PARAM_DEFS_SRCS} - ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh - DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT} - VERBATIM -) + OUTPUT ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh + COMMAND + ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${OPR_PARAM_DEFS_SCRIPT} --enumv + ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh + DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT} + VERBATIM) list(APPEND OPR_PARAM_DEFS_OUTS - ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh -) + ${OPR_PARAM_DEFS_OUT_DIR}/src/common/opr_param_defs_enumv.cuh) list(APPEND OPR_PARAM_DEFS_INC ${OPR_PARAM_DEFS_OUT_DIR}) -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/megdnn DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") +install( + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/megdnn + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING + PATTERN "*.h") add_custom_target(_opr_param_defs DEPENDS ${OPR_PARAM_DEFS_OUTS}) add_library(opr_param_defs INTERFACE) target_include_directories(opr_param_defs - INTERFACE - $ -) -foreach (INCPATH IN LISTS OPR_PARAM_DEFS_INC) - target_include_directories(opr_param_defs - INTERFACE $ - ) + INTERFACE $) +foreach(INCPATH IN LISTS OPR_PARAM_DEFS_INC) + target_include_directories(opr_param_defs INTERFACE $) endforeach() add_dependencies(opr_param_defs _opr_param_defs) install(TARGETS opr_param_defs EXPORT ${MGE_EXPORT_TARGETS}) if(MGE_WITH_CUDA) - add_library(cutlass INTERFACE) - target_include_directories(cutlass - INTERFACE - $) + add_library(cutlass INTERFACE) + target_include_directories( + cutlass + INTERFACE $) endif() if(MGE_WITH_TEST) - add_subdirectory(test) + add_subdirectory(test) endif() add_subdirectory(src) diff --git a/dnn/atlas-stub/CMakeLists.txt b/dnn/atlas-stub/CMakeLists.txt index f6bffb1a..7be656a4 100644 --- a/dnn/atlas-stub/CMakeLists.txt +++ b/dnn/atlas-stub/CMakeLists.txt @@ -1,6 +1,8 @@ add_library(atlas-stub STATIC src/libatlas-wrap.cpp) -target_include_directories(atlas-stub PUBLIC $) +target_include_directories( + atlas-stub PUBLIC $) install(TARGETS atlas-stub EXPORT ${MGE_EXPORT_TARGETS}) add_library(acl-cblas STATIC src/libacl_cblas-wrap.cpp) -target_include_directories(acl-cblas PUBLIC $) +target_include_directories( + acl-cblas PUBLIC $) diff --git a/dnn/cuda-stub/CMakeLists.txt b/dnn/cuda-stub/CMakeLists.txt index e89dddbd..8d71e835 100644 --- a/dnn/cuda-stub/CMakeLists.txt +++ b/dnn/cuda-stub/CMakeLists.txt @@ -1,26 +1,27 @@ -file (GLOB_RECURSE CUDA_STUB src/libcuda.cpp) -file (GLOB_RECURSE NVRTC_STUB src/libnvrtc.cpp) +file(GLOB_RECURSE CUDA_STUB src/libcuda.cpp) +file(GLOB_RECURSE NVRTC_STUB src/libnvrtc.cpp) if(MGE_WITH_CUDA_STUB) - list(APPEND STUB_SRC ${CUDA_STUB}) + list(APPEND STUB_SRC ${CUDA_STUB}) endif() if(MGE_WITH_NVRTC_STUB) - list(APPEND STUB_SRC ${NVRTC_STUB}) + list(APPEND STUB_SRC ${NVRTC_STUB}) endif() if(MSVC OR WIN32) - add_library (cuda-stub STATIC ${STUB_SRC}) + add_library(cuda-stub STATIC ${STUB_SRC}) else() - add_library (cuda-stub SHARED ${STUB_SRC}) + add_library(cuda-stub SHARED ${STUB_SRC}) endif() set_target_properties(cuda-stub PROPERTIES OUTPUT_NAME cuda_stub) target_compile_definitions(cuda-stub PRIVATE __CUDA_API_VERSION_INTERNAL) -if (MSVC OR WIN32) - target_link_libraries(cuda-stub PRIVATE -Wl,--no-undefined) +if(MSVC OR WIN32) + target_link_libraries(cuda-stub PRIVATE -Wl,--no-undefined) else() - target_link_libraries(cuda-stub PRIVATE dl -Wl,--no-undefined) + target_link_libraries(cuda-stub PRIVATE dl -Wl,--no-undefined) endif() -target_include_directories(cuda-stub PRIVATE $) -install (TARGETS cuda-stub EXPORT ${MGE_EXPORT_TARGETS}) +target_include_directories(cuda-stub + PRIVATE $) +install(TARGETS cuda-stub EXPORT ${MGE_EXPORT_TARGETS}) diff --git a/dnn/src/CMakeLists.txt b/dnn/src/CMakeLists.txt index 4e20c9a5..d0566165 100644 --- a/dnn/src/CMakeLists.txt +++ b/dnn/src/CMakeLists.txt @@ -5,168 +5,190 @@ file(GLOB_RECURSE SOURCES common/*.cpp naive/*.cpp) list(APPEND SOURCES ${PROJECT_BINARY_DIR}/genfiles/megbrain_build_config.h) if(NOT ${MGE_ARCH} STREQUAL "naive") - file(GLOB_RECURSE SOURCES_ fallback/*.cpp) + 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(${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_}) + 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) + 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() +# ###################################################################################### +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}) + add_custom_target(${_hip_target}) - # set return value - set(${_hip_objs} ${_generated_files}) + # 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_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 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) - set(CUTLASS_SOURCES "") - function(gen_cutlass_kimpl op type gen_files) - set(CURRENT_CUTLASS_STAGE_DIR ${CUTLASS_GEN_DIR}/${op}_${type}.stage) - set(CURRENT_CUTLASS_GEN_DIR ${CUTLASS_GEN_DIR}/${op}_${type}) - - set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS ${CUTLASS_GEN_SCRIPT}) - - file(REMOVE_RECURSE ${CURRENT_CUTLASS_STAGE_DIR}) - file(MAKE_DIRECTORY ${CURRENT_CUTLASS_STAGE_DIR}) - file(MAKE_DIRECTORY ${CURRENT_CUTLASS_GEN_DIR}) - execute_process( - COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${CUTLASS_GEN_SCRIPT} --operations ${op} --type ${type} ${CURRENT_CUTLASS_STAGE_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() - file(GLOB CUTLASS_GEN_FILES RELATIVE "${CURRENT_CUTLASS_GEN_DIR}/" "${CURRENT_CUTLASS_GEN_DIR}/*.cu") - foreach(FILE ${CUTLASS_GEN_FILES}) - if (NOT EXISTS "${CURRENT_CUTLASS_STAGE_DIR}/${FILE}") - file(REMOVE "${CURRENT_CUTLASS_GEN_DIR}/${FILE}") - endif() - endforeach() - file(GLOB CUTLASS_GEN_FILES RELATIVE "${CURRENT_CUTLASS_STAGE_DIR}" "${CURRENT_CUTLASS_STAGE_DIR}/*.cu") - foreach(FILE ${CUTLASS_GEN_FILES}) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CURRENT_CUTLASS_STAGE_DIR}/${FILE}" "${CURRENT_CUTLASS_GEN_DIR}") - endforeach() - file(REMOVE_RECURSE ${CURRENT_CUTLASS_STAGE_DIR}) - file(GLOB_RECURSE CUTLASS_GEN_FILES "${CURRENT_CUTLASS_GEN_DIR}/*.cu") - list(APPEND ${gen_files} ${CUTLASS_GEN_FILES}) - set(${gen_files} "${${gen_files}}" PARENT_SCOPE) - endfunction() - gen_cutlass_kimpl(gemm simt CUTLASS_SOURCES) - gen_cutlass_kimpl(gemm tensorop884 CUTLASS_SOURCES) - gen_cutlass_kimpl(gemm tensorop1688 CUTLASS_SOURCES) - gen_cutlass_kimpl(gemv simt CUTLASS_SOURCES) - gen_cutlass_kimpl(deconv simt CUTLASS_SOURCES) - gen_cutlass_kimpl(deconv tensorop8816 CUTLASS_SOURCES) - gen_cutlass_kimpl(conv2d simt CUTLASS_SOURCES) - gen_cutlass_kimpl(conv2d tensorop8816 CUTLASS_SOURCES) - gen_cutlass_kimpl(conv2d tensorop8832 CUTLASS_SOURCES) - list(APPEND SOURCES ${CUTLASS_SOURCES}) - list(APPEND SOURCES ${CUSOURCES}) + 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) + set(CUTLASS_SOURCES "") + function(gen_cutlass_kimpl op type gen_files) + set(CURRENT_CUTLASS_STAGE_DIR ${CUTLASS_GEN_DIR}/${op}_${type}.stage) + set(CURRENT_CUTLASS_GEN_DIR ${CUTLASS_GEN_DIR}/${op}_${type}) + + set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS ${CUTLASS_GEN_SCRIPT}) + + file(REMOVE_RECURSE ${CURRENT_CUTLASS_STAGE_DIR}) + file(MAKE_DIRECTORY ${CURRENT_CUTLASS_STAGE_DIR}) + file(MAKE_DIRECTORY ${CURRENT_CUTLASS_GEN_DIR}) + execute_process( + COMMAND ${PYTHON3_EXECUTABLE_WITHOUT_VERSION} ${CUTLASS_GEN_SCRIPT} --operations + ${op} --type ${type} ${CURRENT_CUTLASS_STAGE_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() + file( + GLOB CUTLASS_GEN_FILES + RELATIVE "${CURRENT_CUTLASS_GEN_DIR}/" + "${CURRENT_CUTLASS_GEN_DIR}/*.cu") + foreach(FILE ${CUTLASS_GEN_FILES}) + if(NOT EXISTS "${CURRENT_CUTLASS_STAGE_DIR}/${FILE}") + file(REMOVE "${CURRENT_CUTLASS_GEN_DIR}/${FILE}") + endif() + endforeach() + file( + GLOB CUTLASS_GEN_FILES + RELATIVE "${CURRENT_CUTLASS_STAGE_DIR}" + "${CURRENT_CUTLASS_STAGE_DIR}/*.cu") + foreach(FILE ${CUTLASS_GEN_FILES}) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CURRENT_CUTLASS_STAGE_DIR}/${FILE}" "${CURRENT_CUTLASS_GEN_DIR}") + endforeach() + file(REMOVE_RECURSE ${CURRENT_CUTLASS_STAGE_DIR}) + file(GLOB_RECURSE CUTLASS_GEN_FILES "${CURRENT_CUTLASS_GEN_DIR}/*.cu") + list(APPEND ${gen_files} ${CUTLASS_GEN_FILES}) + set(${gen_files} + "${${gen_files}}" + PARENT_SCOPE) + endfunction() + gen_cutlass_kimpl(gemm simt CUTLASS_SOURCES) + gen_cutlass_kimpl(gemm tensorop884 CUTLASS_SOURCES) + gen_cutlass_kimpl(gemm tensorop1688 CUTLASS_SOURCES) + gen_cutlass_kimpl(gemv simt CUTLASS_SOURCES) + gen_cutlass_kimpl(deconv simt CUTLASS_SOURCES) + gen_cutlass_kimpl(deconv tensorop8816 CUTLASS_SOURCES) + gen_cutlass_kimpl(conv2d simt CUTLASS_SOURCES) + gen_cutlass_kimpl(conv2d tensorop8816 CUTLASS_SOURCES) + gen_cutlass_kimpl(conv2d tensorop8832 CUTLASS_SOURCES) + list(APPEND SOURCES ${CUTLASS_SOURCES}) + list(APPEND SOURCES ${CUSOURCES}) endif() if(MGE_WITH_ATLAS) - file(GLOB_RECURSE SOURCES_ atlas/*.cpp) - list(APPEND SOURCES ${SOURCES_}) - list(APPEND LIBMEGDNN_DEF -DMEGDNN_WITH_ATLAS=1) + file(GLOB_RECURSE SOURCES_ atlas/*.cpp) + list(APPEND SOURCES ${SOURCES_}) + list(APPEND LIBMEGDNN_DEF -DMEGDNN_WITH_ATLAS=1) endif() add_definitions(${LIBMEGDNN_DEF}) @@ -174,81 +196,85 @@ 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 $) - target_include_directories(megdnn PRIVATE ${CUDNN_INCLUDE_DIR}) + target_link_libraries(megdnn PRIVATE $) + 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}) + 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 $) - 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 $) + endif() endif() -target_include_directories(megdnn - PUBLIC - $ - $ - $ - PRIVATE - ${PROJECT_SOURCE_DIR}/dnn - ${PROJECT_SOURCE_DIR}/third_party/midout/src -) +target_include_directories( + megdnn + PUBLIC $ + $ + $ + PRIVATE ${PROJECT_SOURCE_DIR}/dnn ${PROJECT_SOURCE_DIR}/third_party/midout/src) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/dnn/include DESTINATION . FILES_MATCHING PATTERN "*.h*") +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 "$<$:-Xcompiler=-Wno-class-memaccess>" - "$<$>:-Wno-class-memaccess>") - else() - target_compile_options(megdnn PRIVATE "-Wno-class-memaccess") - endif() + if(MGE_WITH_CUDA) + target_compile_options( + megdnn PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" + "$<$>:-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 $) - else() - target_link_libraries(megdnn PRIVATE dnnl) - endif() + if(BUILD_SHARED_LIBS) + target_link_libraries(megdnn PRIVATE $) + else() + target_link_libraries(megdnn PRIVATE dnnl) + endif() endif() -if (BUILD_SHARED_LIBS) - target_link_libraries(megdnn PRIVATE $) +if(BUILD_SHARED_LIBS) + target_link_libraries(megdnn PRIVATE $) else() - target_link_libraries(megdnn PRIVATE ${MGE_BLAS_LIBS}) + 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_ROCM) + target_link_libraries(megdnn PRIVATE ${HIPOBJS} ${MGE_ROCM_LIBS}) +endif() if(MGE_WITH_ATLAS) - if (BUILD_SHARED_LIBS) - target_link_libraries(megdnn PRIVATE $) - else() - target_link_libraries(megdnn PRIVATE ${MGE_ATLAS_LIBS}) - endif() + if(BUILD_SHARED_LIBS) + target_link_libraries(megdnn PRIVATE $) + else() + target_link_libraries(megdnn PRIVATE ${MGE_ATLAS_LIBS}) + endif() endif() if(CMAKE_THREAD_LIBS_INIT) - target_link_libraries(megdnn PRIVATE Threads::Threads) + target_link_libraries(megdnn PRIVATE Threads::Threads) endif() install(TARGETS megdnn EXPORT ${MGE_EXPORT_TARGETS}) diff --git a/dnn/test/CMakeLists.txt b/dnn/test/CMakeLists.txt index 1527dcab..858d1dcc 100644 --- a/dnn/test/CMakeLists.txt +++ b/dnn/test/CMakeLists.txt @@ -5,38 +5,38 @@ file(GLOB SOURCES_ *.cpp) list(APPEND SOURCES ${SOURCES_}) if(NOT ${MGE_ARCH} STREQUAL "naive") - file(GLOB_RECURSE SOURCES_ fallback/*.cpp) + file(GLOB_RECURSE SOURCES_ fallback/*.cpp) + list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ cpu/*.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_}) - file(GLOB_RECURSE SOURCES_ cpu/*.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_}) - endif() + endif() endif() if(MGE_WITH_CUDA) - file(GLOB_RECURSE SOURCES_ cuda/*.cpp) - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ cuda/*.cpp) + list(APPEND SOURCES ${SOURCES_}) - file(GLOB_RECURSE CUSOURCES cuda/*.cu) - list(APPEND SOURCES ${CUSOURCES}) + file(GLOB_RECURSE CUSOURCES cuda/*.cu) + list(APPEND SOURCES ${CUSOURCES}) endif() if(MGE_WITH_MIDOUT_PROFILE) - list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/third_party/midout/src/midout.cpp) + list(APPEND SOURCES ${PROJECT_SOURCE_DIR}/third_party/midout/src/midout.cpp) endif() if(MGE_WITH_ATLAS) - file(GLOB_RECURSE SOURCES_ atlas/*.cpp) - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ atlas/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() -if (MGE_WITH_ROCM) - file (GLOB_RECURSE SOURCES_ rocm/*.cpp) - list (APPEND SOURCES ${SOURCES_}) +if(MGE_WITH_ROCM) + file(GLOB_RECURSE SOURCES_ rocm/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() add_executable(megdnn_test ${SOURCES}) @@ -44,37 +44,36 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing") target_link_libraries(megdnn_test gtest) target_link_libraries(megdnn_test megdnn ${MGE_BLAS_LIBS} ${MGE_CUDA_LIBS}) -if (MGE_WITH_CUDA) - target_link_libraries(megdnn_test cutlass) - target_include_directories(megdnn_test PRIVATE ${CUDNN_INCLUDE_DIR}) +if(MGE_WITH_CUDA) + target_link_libraries(megdnn_test cutlass) + target_include_directories(megdnn_test PRIVATE ${CUDNN_INCLUDE_DIR}) endif() if(MGE_WITH_ATLAS) - target_link_libraries(megdnn_test atlas-stub) + target_link_libraries(megdnn_test atlas-stub) endif() target_include_directories(megdnn_test - PRIVATE - ${PROJECT_SOURCE_DIR}/third_party/midout/src -) + PRIVATE ${PROJECT_SOURCE_DIR}/third_party/midout/src) if(APPLE OR ANDROID) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") else() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") + set(CMAKE_EXE_LINKER_FLAGS + "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") endif() if(MGE_ENABLE_COVERAGE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") endif() -if (MEG_WITH_ROCM) - target_link_libraries (megdnn_test ${MGE_ROCM_LIBS}) -endif () +if(MEG_WITH_ROCM) + target_link_libraries(megdnn_test ${MGE_ROCM_LIBS}) +endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(megdnn_test dl) - else() - target_link_libraries(megdnn_test dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(megdnn_test dl) + else() + target_link_libraries(megdnn_test dl rt) + endif() endif() diff --git a/imperative/CMakeLists.txt b/imperative/CMakeLists.txt index bd6359c4..3d122663 100644 --- a/imperative/CMakeLists.txt +++ b/imperative/CMakeLists.txt @@ -1,21 +1,28 @@ find_package(NumPy REQUIRED) set(PACKAGE_NAME megengine) -set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE) +set(PACKAGE_NAME + ${PACKAGE_NAME} + PARENT_SCOPE) set(MODULE_NAME _imperative_rt) -set(MODULE_NAME ${MODULE_NAME} PARENT_SCOPE) +set(MODULE_NAME + ${MODULE_NAME} + PARENT_SCOPE) file(GLOB_RECURSE SRCS src/impl/*.cpp src/include/*.h python/src/*.cpp python/src/*.h) set(SRCS ${SRCS} ${CPP_REDIS_SRCS}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMGB_WITH_IMPERATIVE=1") file(GLOB_RECURSE PYTHON_SRCS python/${PACKAGE_NAME}/*.py) -file(GLOB_RECURSE ALL_HEADERS src/cpp/megbrain_pubapi.h - ${PROJECT_SOURCE_DIR}/src/core/include/* - ${PROJECT_SOURCE_DIR}/src/opr/include/* - ${PROJECT_SOURCE_DIR}/src/serialization/include/* - ${PROJECT_SOURCE_DIR}/src/plugin/include/* - ${PROJECT_SOURCE_DIR}/dnn/include/*) +file( + GLOB_RECURSE + ALL_HEADERS + src/cpp/megbrain_pubapi.h + ${PROJECT_SOURCE_DIR}/src/core/include/* + ${PROJECT_SOURCE_DIR}/src/opr/include/* + ${PROJECT_SOURCE_DIR}/src/serialization/include/* + ${PROJECT_SOURCE_DIR}/src/plugin/include/* + ${PROJECT_SOURCE_DIR}/dnn/include/*) set(MEGENGINE_DIR ${CMAKE_CURRENT_BINARY_DIR}/python/) @@ -23,74 +30,106 @@ add_subdirectory(tablegen) add_custom_target(_version_ld SOURCES ${MGE_VERSION_SCRIPT}) -add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11 ${PROJECT_BINARY_DIR}/third_party/pybind11) +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/pybind11 + ${PROJECT_BINARY_DIR}/third_party/pybind11) pybind11_add_module(${MODULE_NAME} NO_EXTRAS ${SRCS}) -if (APPLE) - target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared) -elseif (MSVC OR WIN32) - target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared) - message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}") - set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY "${CMAKE_MSVC_RUNTIME_LIBRARY}") +if(APPLE) + target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared) +elseif(MSVC OR WIN32) + target_link_libraries(${MODULE_NAME} PRIVATE megengine_shared) + message(STATUS "CMAKE_MSVC_RUNTIME_LIBRARY: ${CMAKE_MSVC_RUNTIME_LIBRARY}") + set_target_properties(${MODULE_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY + "${CMAKE_MSVC_RUNTIME_LIBRARY}") else() - # 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_shared -Wl,--version-script=${MGE_VERSION_SCRIPT}) + # 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_shared -Wl,--version-script=${MGE_VERSION_SCRIPT}) 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) target_link_libraries(${MODULE_NAME} PRIVATE range-v3) -add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/Json ${PROJECT_BINARY_DIR}/third_party/Json) +add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/Json + ${PROJECT_BINARY_DIR}/third_party/Json) target_link_libraries(${MODULE_NAME} PRIVATE nlohmann_json::nlohmann_json) -target_include_directories(${MODULE_NAME} PUBLIC src/include PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${MGB_OPDEF_OUT_DIR} ${CPP_REDIS_INCLUDES}) +target_include_directories( + ${MODULE_NAME} + PUBLIC src/include + PRIVATE ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR} ${MGB_OPDEF_OUT_DIR} + ${CPP_REDIS_INCLUDES}) target_compile_definitions(${MODULE_NAME} PRIVATE MODULE_NAME=${MODULE_NAME}) target_compile_options(${MODULE_NAME} PRIVATE -Wno-unused-parameter) if(CXX_SUPPORT_WCLASS_MEMACCESS) - target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess") + target_compile_options(${MODULE_NAME} PRIVATE "-Wno-class-memaccess") endif() -set_target_properties(${MODULE_NAME} PROPERTIES - SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} - LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core -) -if (APPLE OR MSVC OR WIN32) - message(VERBOSE "overwriting SUFFIX at macos and windows before config by set_target_properties") - pybind11_extension(${MODULE_NAME}) +set_target_properties( + ${MODULE_NAME} + PROPERTIES SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} + LIBRARY_OUTPUT_DIRECTORY ${MEGENGINE_DIR}/${PACKAGE_NAME}/core) +if(APPLE + OR MSVC + OR WIN32) + message( + VERBOSE + "overwriting SUFFIX at macos and windows before config by set_target_properties") + pybind11_extension(${MODULE_NAME}) endif() add_dependencies(${MODULE_NAME} mgb_opdef _version_ld) if(MGE_WITH_TEST AND MGE_ENABLE_RTTI) - add_subdirectory(test) + add_subdirectory(test) endif() add_custom_command( - TARGET ${MODULE_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/$ # clean develop - COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/version.py # clean develop - COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/include # clean develop - COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/lib # clean develop - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine ${CMAKE_CURRENT_BINARY_DIR}/python/megengine - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test ${CMAKE_CURRENT_BINARY_DIR}/python/test - COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/custom/include ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/core/include - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt -) + TARGET ${MODULE_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/LICENSE + ${PROJECT_SOURCE_DIR}/ACKNOWLEDGMENTS ${PROJECT_BINARY_DIR} + COMMAND + ${CMAKE_COMMAND} -E remove -f + ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/$ # clean + # develop + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/version.py # clean develop + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/include # clean develop + COMMAND ${CMAKE_COMMAND} -E remove -f + ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine/core/lib # clean develop + COMMAND + ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/megengine + ${CMAKE_CURRENT_BINARY_DIR}/python/megengine + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/python/test + ${CMAKE_CURRENT_BINARY_DIR}/python/test + COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/src/custom/include + ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/core/include + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py + ${CMAKE_CURRENT_BINARY_DIR}/python/setup.py + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires.txt + ${CMAKE_CURRENT_BINARY_DIR}/python/requires.txt + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-style.txt + ${CMAKE_CURRENT_BINARY_DIR}/python/requires-style.txt + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/python/requires-test.txt + ${CMAKE_CURRENT_BINARY_DIR}/python/requires-test.txt) if(DEFINED MGB_VER_MAJOR) - set(IS_INTERNAL "--internal") + set(IS_INTERNAL "--internal") else() - set(IS_INTERNAL "") + set(IS_INTERNAL "") endif(DEFINED MGB_VER_MAJOR) if(DEFINED MGE_EXTRA_NAME) - set(RC_NAME "--rc=${MGE_EXTRA_NAME}") + set(RC_NAME "--rc=${MGE_EXTRA_NAME}") else() - set(RC_NAME "") + set(RC_NAME "") endif(DEFINED MGE_EXTRA_NAME) add_custom_command( - TARGET ${MODULE_NAME} POST_BUILD - COMMAND "${PYTHON_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/python/gen_version.py --output ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/version.py --major ${MGE_VER_MAJOR} --minor ${MGE_VER_MINOR} --patch ${MGE_VER_PATCH} ${RC_NAME} ${IS_INTERNAL} -) + TARGET ${MODULE_NAME} + POST_BUILD + COMMAND + "${PYTHON_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/python/gen_version.py --output + ${CMAKE_CURRENT_BINARY_DIR}/python/megengine/version.py --major ${MGE_VER_MAJOR} + --minor ${MGE_VER_MINOR} --patch ${MGE_VER_PATCH} ${RC_NAME} ${IS_INTERNAL}) diff --git a/imperative/tablegen/CMakeLists.txt b/imperative/tablegen/CMakeLists.txt index 7b4a1802..f2d3ed76 100644 --- a/imperative/tablegen/CMakeLists.txt +++ b/imperative/tablegen/CMakeLists.txt @@ -1,6 +1,7 @@ # mgb tablegen executable set(TABLE_TARGET mgb-mlir-autogen) -file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.h ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) +file(GLOB_RECURSE SRCS ${CMAKE_CURRENT_SOURCE_DIR}/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) add_executable(${TABLE_TARGET} ${SRCS}) target_include_directories(${TABLE_TARGET} PRIVATE ${MLIR_LLVM_INCLUDE_DIR}) target_link_libraries(${TABLE_TARGET} PRIVATE LLVMTableGen MLIRTableGen LLVMSupport) @@ -13,5 +14,8 @@ tablegen(MGB opdef.cpp.inl ${MGE_IR_INCLUDE_DIRS} "--gen-cpp-body") tablegen(MGB opdef.py.inl ${MGE_IR_INCLUDE_DIRS} "--gen-python-binding") tablegen(MGB opdef.cpy.inl ${MGE_IR_INCLUDE_DIRS} "--gen-python-c-extension") tablegen(MGB enum_macro.h ${MGE_IR_INCLUDE_DIRS} "--gen-enum-list-macro") -add_custom_target(mgb_opdef ALL DEPENDS opdef.h.inl opdef.cpp.inl opdef.py.inl opdef.cpy.inl enum_macro.h param_defs_tblgen) -set(MGB_OPDEF_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE) +add_custom_target(mgb_opdef ALL DEPENDS opdef.h.inl opdef.cpp.inl opdef.py.inl + opdef.cpy.inl enum_macro.h param_defs_tblgen) +set(MGB_OPDEF_OUT_DIR + ${CMAKE_CURRENT_BINARY_DIR} + PARENT_SCOPE) diff --git a/imperative/test/CMakeLists.txt b/imperative/test/CMakeLists.txt index debaa5c9..68fc59f1 100644 --- a/imperative/test/CMakeLists.txt +++ b/imperative/test/CMakeLists.txt @@ -5,46 +5,60 @@ file(GLOB_RECURSE SOURCES ../src/test/*.cpp ../src/impl/*.cpp ${MGB_TEST_DIR}/*. # disable distributed tests if(NOT MGE_WITH_DISTRIBUTED) - list(FILTER SOURCES EXCLUDE REGEX ".*test/collective_comm.cpp") - list(FILTER SOURCES EXCLUDE REGEX ".*test/io_remote.cpp") + list(FILTER SOURCES EXCLUDE REGEX ".*test/collective_comm.cpp") + list(FILTER SOURCES EXCLUDE REGEX ".*test/io_remote.cpp") endif() # TODO: turn python binding into a static/object library add_executable(imperative_test ${SOURCES} ${SRCS}) add_dependencies(imperative_test mgb_opdef) -target_include_directories(imperative_test PRIVATE ${MGB_TEST_DIR}/include ../src/include ${MGB_OPDEF_OUT_DIR} ${CPP_REDIS_INCLUDES}) +target_include_directories( + imperative_test PRIVATE ${MGB_TEST_DIR}/include ../src/include ${MGB_OPDEF_OUT_DIR} + ${CPP_REDIS_INCLUDES}) # Python binding -target_include_directories(imperative_test PRIVATE ${MODULE_SRC_INCLUDE} ${PYTHON_INCLUDE_DIRS} ${NUMPY_INCLUDE_DIR}) +target_include_directories( + imperative_test PRIVATE ${MODULE_SRC_INCLUDE} ${PYTHON_INCLUDE_DIRS} + ${NUMPY_INCLUDE_DIR}) target_compile_definitions(imperative_test PRIVATE MODULE_NAME=C) target_compile_options(imperative_test PRIVATE -Wno-unused-parameter) -set(LINK_LIBS megbrain megdnn ${MGE_CUDA_LIBS} gtest gmock pybind11::embed range-v3 nlohmann_json::nlohmann_json) +set(LINK_LIBS + megbrain + megdnn + ${MGE_CUDA_LIBS} + gtest + gmock + pybind11::embed + range-v3 + nlohmann_json::nlohmann_json) if(MGE_WITH_CUDA) - list(APPEND LINK_LIBS cudart) + list(APPEND LINK_LIBS cudart) endif() if(MGE_WITH_DISTRIBUTED) - list(APPEND LINK_LIBS megray) + list(APPEND LINK_LIBS megray) endif() target_link_libraries(imperative_test ${LINK_LIBS}) if(CXX_SUPPORT_WCLASS_MEMACCESS) - if(MGE_WITH_CUDA) - target_compile_options(imperative_test PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" - "$<$>:-Wno-class-memaccess>") - else() - target_compile_options(imperative_test PRIVATE "-Wno-class-memaccess") - endif() + if(MGE_WITH_CUDA) + target_compile_options( + imperative_test + PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" + "$<$>:-Wno-class-memaccess>") + else() + target_compile_options(imperative_test PRIVATE "-Wno-class-memaccess") + endif() endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(imperative_test dl) - else() - target_link_libraries(imperative_test dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(imperative_test dl) + else() + target_link_libraries(imperative_test dl rt) + endif() endif() install(TARGETS imperative_test RUNTIME DESTINATION test) diff --git a/lite/CMakeLists.txt b/lite/CMakeLists.txt index b0966ea8..69b54eb3 100644 --- a/lite/CMakeLists.txt +++ b/lite/CMakeLists.txt @@ -8,155 +8,185 @@ set(LITE_ENABLE_EXCEPTION ${MGE_ENABLE_EXCEPTIONS}) set(LITE_ASSERT_LOC ${MGB_ASSERT_LOC}) if(NOT MGB_WITH_FLATBUFFERS) - include(../cmake/flatbuffers.cmake) + include(../cmake/flatbuffers.cmake) endif() file(GLOB_RECURSE SRC_FBS src/**/*.fbs) build_flatbuffers( - "${SRC_FBS}" - "" - lite_fbs_generate - "" - "${CMAKE_CURRENT_BINARY_DIR}" - "" - "" - ) + "${SRC_FBS}" + "" + lite_fbs_generate + "" + "${CMAKE_CURRENT_BINARY_DIR}" + "" + "") file(GLOB_RECURSE SOURCES_LITE src/*.cpp src/*.cc lite-c/*.cpp) if(MGE_WITH_MINIMUM_SIZE) - set(LITE_ENABLE_LOGGING OFF) - set(LITE_ENABLE_EXCEPTION OFF) + set(LITE_ENABLE_LOGGING OFF) + set(LITE_ENABLE_EXCEPTION OFF) endif() -# Write out lite_build_config.h -# It defines macros needed by lite -configure_file(src/lite_build_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include) +# Write out lite_build_config.h It defines macros needed by lite +configure_file(src/lite_build_config.h.in + ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/genfiles/lite_build_config.h + DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include) # begin config lite -if(LITE_BUILD_WITH_MGE AND LITE_WITH_CUDA AND NOT WIN32) - # FXIME third_party cpp redis do not support build with clang-cl - list(APPEND SOURCES_LITE ${CPP_REDIS_SRCS}) +if(LITE_BUILD_WITH_MGE + AND LITE_WITH_CUDA + AND NOT WIN32) + # FXIME third_party cpp redis do not support build with clang-cl + list(APPEND SOURCES_LITE ${CPP_REDIS_SRCS}) endif() add_library(lite_static STATIC ${SOURCES_LITE}) add_dependencies(lite_static lite_fbs_generate) include_directories($) if(LITE_BUILD_WITH_MGE) - target_link_libraries(lite_static PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) - add_compile_definitions(LITE_BUILD_WITH_MGE=1) - message(STATUS "build lite with MegEngine.") + target_link_libraries(lite_static PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) + add_compile_definitions(LITE_BUILD_WITH_MGE=1) + message(STATUS "build lite with MegEngine.") else() - target_link_libraries(lite_static PUBLIC flatbuffers) + target_link_libraries(lite_static PUBLIC flatbuffers) endif() include_directories( - PUBLIC $ - PUBLIC $ - PUBLIC $ - PUBLIC $ - PUBLIC $ - PUBLIC $ - ) + PUBLIC + $ + PUBLIC + $ + PUBLIC + $ + PUBLIC + $ + PUBLIC + $ + PUBLIC + $) # end config lite # define a shared lib add_library(lite_shared SHARED $) if(LITE_BUILD_WITH_MGE) - target_link_libraries(lite_shared PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) + target_link_libraries(lite_shared PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) endif() if(ANDROID) - link_libraries(log) - target_link_libraries(lite_static PRIVATE log) - target_link_libraries(lite_shared PRIVATE log) + link_libraries(log) + target_link_libraries(lite_static PRIVATE log) + target_link_libraries(lite_shared PRIVATE log) endif() # define a shared lib for whl add_library(lite_shared_whl SHARED $) if(LITE_BUILD_WITH_MGE) - if (IOS) - target_link_libraries(lite_shared_whl PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) - else() - target_link_libraries(lite_shared_whl PRIVATE megengine_shared) - endif() + if(IOS) + target_link_libraries(lite_shared_whl PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) + else() + target_link_libraries(lite_shared_whl PRIVATE megengine_shared) + endif() endif() if(ANDROID) - target_link_libraries(lite_shared_whl PRIVATE log) + target_link_libraries(lite_shared_whl PRIVATE log) endif() -# add lite_static_all_in_one same name build by BUILD -# please do not change flatbuffers/cpuinfo/clog/lite_static order, if change!, cmake -# can not gen flatbuffers/cpuinfo/clog OBJs to lite_static_all_in_one, this may cmake issue -# NOTICE: this target always use to separate build with lite, if build lite via include +# add lite_static_all_in_one same name build by BUILD please do not change +# flatbuffers/cpuinfo/clog/lite_static order, if change!, cmake can not gen +# flatbuffers/cpuinfo/clog OBJs to lite_static_all_in_one, this may cmake issue NOTICE: +# this target always use to separate build with lite, if build lite via include # MegEngine/megbrain ROOT_DIR/CMakeLists.txt, just depends lite_static or lite_shared -#TODO: need refine lite_static_all_in_one depend objects, but now cmake do not support +# TODO: need refine lite_static_all_in_one depend objects, but now cmake do not support # define a add_library which OBJECTS args is a set or list or string -if (MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL) - add_library(lite_static_all_in_one STATIC $ $ $ $ $) -elseif (MGE_ENABLE_CPUINFO AND NOT MGE_WITH_OPENCL) - add_library(lite_static_all_in_one STATIC $ $ $ $) -elseif (NOT MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL) - add_library(lite_static_all_in_one STATIC $ $ $) +if(MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL) + add_library( + lite_static_all_in_one STATIC + $ $ $ + $ $) +elseif(MGE_ENABLE_CPUINFO AND NOT MGE_WITH_OPENCL) + add_library( + lite_static_all_in_one STATIC + $ $ $ + $) +elseif(NOT MGE_ENABLE_CPUINFO AND MGE_WITH_OPENCL) + add_library( + lite_static_all_in_one STATIC + $ $ + $) else() - add_library(lite_static_all_in_one STATIC $ $) + add_library(lite_static_all_in_one STATIC $ + $) endif() if(LITE_BUILD_WITH_MGE) - target_link_libraries(lite_static_all_in_one PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) + target_link_libraries(lite_static_all_in_one PRIVATE megbrain megdnn ${MGE_CUDA_LIBS}) endif() -if(LITE_BUILD_WITH_MGE AND LITE_WITH_CUDA AND NOT WIN32) - # FXIME third_party cpp redis do not support build with clang-cl - target_include_directories(lite_static PRIVATE ${CPP_REDIS_INCLUDES}) - target_include_directories(lite_shared PRIVATE ${CPP_REDIS_INCLUDES}) - target_include_directories(lite_shared_whl PRIVATE ${CPP_REDIS_INCLUDES}) - target_include_directories(lite_static_all_in_one PRIVATE ${CPP_REDIS_INCLUDES}) +if(LITE_BUILD_WITH_MGE + AND LITE_WITH_CUDA + AND NOT WIN32) + # FXIME third_party cpp redis do not support build with clang-cl + target_include_directories(lite_static PRIVATE ${CPP_REDIS_INCLUDES}) + target_include_directories(lite_shared PRIVATE ${CPP_REDIS_INCLUDES}) + target_include_directories(lite_shared_whl PRIVATE ${CPP_REDIS_INCLUDES}) + target_include_directories(lite_static_all_in_one PRIVATE ${CPP_REDIS_INCLUDES}) endif() -set(LITE_VERSION_SCRIPT ${PROJECT_SOURCE_DIR}/lite/src/version_lite.ld CACHE INTERNAL "Path to linker version script") +set(LITE_VERSION_SCRIPT + ${PROJECT_SOURCE_DIR}/lite/src/version_lite.ld + CACHE INTERNAL "Path to linker version script") add_custom_target(_lite_version_ld SOURCES ${LITE_VERSION_SCRIPT}) if(NOT MSVC AND NOT WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") endif() -#TODO: implemente version script for other OS -if (UNIX AND NOT APPLE) - target_link_options(lite_shared PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT}) - set_target_properties(lite_shared PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT}) - target_link_options(lite_shared_whl PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT}) - set_target_properties(lite_shared_whl PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT}) +# TODO: implemente version script for other OS +if(UNIX AND NOT APPLE) + target_link_options(lite_shared PRIVATE -Wl,--version-script=${LITE_VERSION_SCRIPT}) + set_target_properties(lite_shared PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT}) + target_link_options(lite_shared_whl PRIVATE + -Wl,--version-script=${LITE_VERSION_SCRIPT}) + set_target_properties(lite_shared_whl PROPERTIES LINK_DEPENDS ${LITE_VERSION_SCRIPT}) endif() # config install -install(TARGETS lite_static - LIBRARY DESTINATION lite/lib/${MGE_ARCH} - FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} - ARCHIVE DESTINATION lite/lib/${MGE_ARCH}) - -install(TARGETS lite_shared - LIBRARY DESTINATION lite/lib/${MGE_ARCH} - FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} - ARCHIVE DESTINATION lite/lib/${MGE_ARCH} - ) - -install(TARGETS lite_static_all_in_one - LIBRARY DESTINATION lite/lib/${MGE_ARCH} - FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} - ARCHIVE DESTINATION lite/lib/${MGE_ARCH}) +install( + TARGETS lite_static + LIBRARY DESTINATION lite/lib/${MGE_ARCH} + FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} + ARCHIVE DESTINATION lite/lib/${MGE_ARCH}) + +install( + TARGETS lite_shared + LIBRARY DESTINATION lite/lib/${MGE_ARCH} + FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} + ARCHIVE DESTINATION lite/lib/${MGE_ARCH}) + +install( + TARGETS lite_static_all_in_one + LIBRARY DESTINATION lite/lib/${MGE_ARCH} + FRAMEWORK DESTINATION lite/lib/${MGE_ARCH} + ARCHIVE DESTINATION lite/lib/${MGE_ARCH}) install(FILES ${PROJECT_SOURCE_DIR}/lite/include/lite/common_enum_c.h - DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include/lite-c) + DESTINATION ${CMAKE_INSTALL_PREFIX}/lite/include/lite-c) -install(DIRECTORY ${PROJECT_SOURCE_DIR}/lite/include - DESTINATION ${CMAKE_INSTALL_PREFIX}/lite FILES_MATCHING PATTERN "*.h") +install( + DIRECTORY ${PROJECT_SOURCE_DIR}/lite/include + DESTINATION ${CMAKE_INSTALL_PREFIX}/lite + FILES_MATCHING + PATTERN "*.h") -install(DIRECTORY ${PROJECT_SOURCE_DIR}/lite/lite-c/include - DESTINATION ${CMAKE_INSTALL_PREFIX}/lite FILES_MATCHING PATTERN "*.h") +install( + DIRECTORY ${PROJECT_SOURCE_DIR}/lite/lite-c/include + DESTINATION ${CMAKE_INSTALL_PREFIX}/lite + FILES_MATCHING + PATTERN "*.h") add_subdirectory(example) if(MGE_WITH_TEST) - add_subdirectory(test) + add_subdirectory(test) endif() -#load_and_run +# load_and_run add_subdirectory(load_and_run) # tools and example @@ -164,11 +194,12 @@ add_executable(rc4_encryptor tools/rc4_encrypt.cpp) target_link_libraries(rc4_encryptor lite_static) if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(rc4_encryptor megdnn) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(rc4_encryptor megdnn) endif() -target_include_directories(rc4_encryptor PRIVATE - {PROJECT_SOURCE_DIR}/lite/src/decryption) -install (TARGETS rc4_encryptor - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/tools) +target_include_directories(rc4_encryptor + PRIVATE {PROJECT_SOURCE_DIR}/lite/src/decryption) +install( + TARGETS rc4_encryptor + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/tools) diff --git a/lite/example/c_example/CMakeLists.txt b/lite/example/c_example/CMakeLists.txt index 141725e5..b0a0d0bd 100644 --- a/lite/example/c_example/CMakeLists.txt +++ b/lite/example/c_example/CMakeLists.txt @@ -1,44 +1,46 @@ add_executable(lite_c_examples ./main.c) if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(lite_c_examples PRIVATE "-fuse-ld=gold") + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(lite_c_examples PRIVATE "-fuse-ld=gold") endif() target_link_libraries(lite_c_examples lite_static) if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(lite_c_examples megdnn) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(lite_c_examples megdnn) endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(lite_c_examples dl) - else() - target_link_libraries(lite_c_examples dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(lite_c_examples dl) + else() + target_link_libraries(lite_c_examples dl rt) + endif() endif() -install (TARGETS lite_c_examples - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/bin) +install( + TARGETS lite_c_examples + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/bin) # add lite_examples_depends_shared for CI check symbol export valid -add_executable(lite_c_examples_depends_shared ./main.c) +add_executable(lite_c_examples_depends_shared ./main.c) if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(lite_c_examples_depends_shared PRIVATE "-fuse-ld=gold") + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(lite_c_examples_depends_shared PRIVATE "-fuse-ld=gold") endif() target_link_libraries(lite_c_examples_depends_shared lite_shared) if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(lite_c_examples_depends_shared dl) - else() - target_link_libraries(lite_c_examples_depends_shared dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(lite_c_examples_depends_shared dl) + else() + target_link_libraries(lite_c_examples_depends_shared dl rt) + endif() endif() -install (TARGETS lite_c_examples_depends_shared - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/bin) +install( + TARGETS lite_c_examples_depends_shared + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/bin) diff --git a/lite/example/cpp_example/CMakeLists.txt b/lite/example/cpp_example/CMakeLists.txt index f7227b62..1649c4b1 100644 --- a/lite/example/cpp_example/CMakeLists.txt +++ b/lite/example/cpp_example/CMakeLists.txt @@ -1,49 +1,51 @@ -file (GLOB_RECURSE SOURCES ./*.cpp) -add_executable(lite_examples ${SOURCES}) +file(GLOB_RECURSE SOURCES ./*.cpp) +add_executable(lite_examples ${SOURCES}) target_include_directories(lite_examples PUBLIC ./) if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(lite_examples PRIVATE "-fuse-ld=gold") + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(lite_examples PRIVATE "-fuse-ld=gold") endif() target_link_libraries(lite_examples lite_static) if(LITE_BUILD_WITH_MGE AND MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(lite_examples megdnn) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(lite_examples megdnn) endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(lite_examples dl) - else() - target_link_libraries(lite_examples dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(lite_examples dl) + else() + target_link_libraries(lite_examples dl rt) + endif() endif() -install (TARGETS lite_examples - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/bin) +install( + TARGETS lite_examples + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/bin) # add lite_examples_depends_shared for CI check symbol export valid -add_executable(lite_examples_depends_shared ${SOURCES}) +add_executable(lite_examples_depends_shared ${SOURCES}) if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(lite_examples_depends_shared PRIVATE "-fuse-ld=gold") + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(lite_examples_depends_shared PRIVATE "-fuse-ld=gold") endif() target_link_libraries(lite_examples_depends_shared lite_shared) target_include_directories(lite_examples_depends_shared PUBLIC ./) if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(lite_examples_depends_shared dl) - else() - target_link_libraries(lite_examples_depends_shared dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(lite_examples_depends_shared dl) + else() + target_link_libraries(lite_examples_depends_shared dl rt) + endif() endif() -install (TARGETS lite_examples_depends_shared - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/bin) +install( + TARGETS lite_examples_depends_shared + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/bin) diff --git a/lite/load_and_run/CMakeLists.txt b/lite/load_and_run/CMakeLists.txt index d7b5b9d9..6ef5279a 100644 --- a/lite/load_and_run/CMakeLists.txt +++ b/lite/load_and_run/CMakeLists.txt @@ -1,55 +1,62 @@ # BUILD the load and run for lite -include_directories(PUBLIC $) -file (GLOB_RECURSE SOURCES ./*.cpp) +include_directories(PUBLIC + $) +file(GLOB_RECURSE SOURCES ./*.cpp) -add_executable (load_and_run ${SOURCES}) +add_executable(load_and_run ${SOURCES}) target_link_libraries(load_and_run lite_static) target_link_libraries(load_and_run megbrain) target_link_libraries(load_and_run gflags) if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(load_and_run PRIVATE "-fuse-ld=gold") + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(load_and_run PRIVATE "-fuse-ld=gold") endif() if(MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(load_and_run megdnn) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(load_and_run megdnn) endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(load_and_run dl) - else() - target_link_libraries(load_and_run dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(load_and_run dl) + else() + target_link_libraries(load_and_run dl rt) + endif() endif() -install (TARGETS load_and_run EXPORT ${LITE_EXPORT_TARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install( + TARGETS load_and_run + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) if(BUILD_SHARED_LIBS) - add_executable(load_and_run_depends_shared ${SOURCES}) - target_link_libraries(load_and_run_depends_shared lite_shared) - target_link_libraries(load_and_run_depends_shared gflags) - target_link_libraries(load_and_run_depends_shared megengine) - - if(LITE_BUILD_WITH_RKNPU) - #rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check - target_link_options(load_and_run_depends_shared PRIVATE "-fuse-ld=gold") - endif() + add_executable(load_and_run_depends_shared ${SOURCES}) + target_link_libraries(load_and_run_depends_shared lite_shared) + target_link_libraries(load_and_run_depends_shared gflags) + target_link_libraries(load_and_run_depends_shared megengine) - if(MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(load_and_run_depends_shared megdnn) - endif() + if(LITE_BUILD_WITH_RKNPU) + # rknn sdk1.0.0 depend on libc++_shared, use gold to remove NEEDED so symbol check + target_link_options(load_and_run_depends_shared PRIVATE "-fuse-ld=gold") + endif() + + if(MGE_WITH_ROCM) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(load_and_run_depends_shared megdnn) + endif() - if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(load_and_run_depends_shared dl) - else() - target_link_libraries(load_and_run_depends_shared dl rt) - endif() + if(UNIX) + if(APPLE OR ANDROID) + target_link_libraries(load_and_run_depends_shared dl) + else() + target_link_libraries(load_and_run_depends_shared dl rt) endif() + endif() - install(TARGETS load_and_run_depends_shared EXPORT ${MGE_EXPORT_TARGETS} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + install( + TARGETS load_and_run_depends_shared + EXPORT ${MGE_EXPORT_TARGETS} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/lite/test/CMakeLists.txt b/lite/test/CMakeLists.txt index 1bf6c836..dce10aaf 100644 --- a/lite/test/CMakeLists.txt +++ b/lite/test/CMakeLists.txt @@ -1,27 +1,28 @@ -if (MGE_WITH_TEST) - file (GLOB_RECURSE SOURCES ./*.cpp main.cpp) - add_executable (lite_test ${SOURCES}) +if(MGE_WITH_TEST) + file(GLOB_RECURSE SOURCES ./*.cpp main.cpp) + add_executable(lite_test ${SOURCES}) - target_link_libraries(lite_test gtest) - target_link_libraries(lite_test lite_static) - if(LITE_BUILD_WITH_MGE) - # lite_test will depends megbrain interface - target_link_libraries(lite_test megbrain) - if (MGE_WITH_ROCM) - # FIXME: hip obj can not find cpp obj only through lite_static - target_link_libraries(lite_test megdnn) - endif () + target_link_libraries(lite_test gtest) + target_link_libraries(lite_test lite_static) + if(LITE_BUILD_WITH_MGE) + # lite_test will depends megbrain interface + target_link_libraries(lite_test megbrain) + if(MGE_WITH_ROCM) + # FIXME: hip obj can not find cpp obj only through lite_static + target_link_libraries(lite_test megdnn) endif() + endif() - if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(lite_test dl) - else() - target_link_libraries(lite_test dl rt) - endif() + if(UNIX) + if(APPLE OR ANDROID) + target_link_libraries(lite_test dl) + else() + target_link_libraries(lite_test dl rt) endif() + endif() - install (TARGETS lite_test - EXPORT ${LITE_EXPORT_TARGETS} - RUNTIME DESTINATION lite/bin) + install( + TARGETS lite_test + EXPORT ${LITE_EXPORT_TARGETS} + RUNTIME DESTINATION lite/bin) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 30552579..807f44f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,213 +1,242 @@ -# force define a SHARED target for whl, caused by when build for APPLE -# we will force set BUILD_SHARED_LIBS=OFF for xcode needed +# force define a SHARED target for whl, caused by when build for APPLE we will force set +# BUILD_SHARED_LIBS=OFF for xcode needed set(MGE_SHARED_LIB megengine_shared) -set(MGE_SHARED_LIB ${MGE_SHARED_LIB} PARENT_SCOPE) +set(MGE_SHARED_LIB + ${MGE_SHARED_LIB} + PARENT_SCOPE) if(MGE_WITH_JIT_MLIR) - add_subdirectory(jit/include/megbrain/jit/mlir/ir) + add_subdirectory(jit/include/megbrain/jit/mlir/ir) endif() -file(GLOB_RECURSE SOURCES core/impl/*.cpp gopt/impl/*.cpp opr/impl/*.cpp opr/impl/nvof/*.cpp plugin/impl/*.cpp serialization/impl/*.cpp core/impl/*.inl gopt/impl/*.inl opr/impl/*.inl plugin/impl/*.inl serialization/impl/*.inl) - +file( + GLOB_RECURSE + SOURCES + core/impl/*.cpp + gopt/impl/*.cpp + opr/impl/*.cpp + opr/impl/nvof/*.cpp + plugin/impl/*.cpp + serialization/impl/*.cpp + core/impl/*.inl + gopt/impl/*.inl + opr/impl/*.inl + plugin/impl/*.inl + serialization/impl/*.inl) if(MGE_WITH_JIT) - file(GLOB_RECURSE SOURCES_ jit/impl/*.cpp jit/impl/*.inl) - if(MGE_WITH_JIT_MLIR) - file(GLOB_RECURSE MLIR_SOURCES_ jit/impl/mlir/ir/*.cpp jit/impl/mlir/*.cpp) - list(APPEND SOURCES_ ${MLIR_SOURCES_}) - endif() - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ jit/impl/*.cpp jit/impl/*.inl) + if(MGE_WITH_JIT_MLIR) + file(GLOB_RECURSE MLIR_SOURCES_ jit/impl/mlir/ir/*.cpp jit/impl/mlir/*.cpp) + list(APPEND SOURCES_ ${MLIR_SOURCES_}) + endif() + list(APPEND SOURCES ${SOURCES_}) endif() if(MGE_WITH_DISTRIBUTED) - file(GLOB_RECURSE SOURCES_ opr-mm/impl/*.cpp opr-mm/impl/*.inl) - list(APPEND SOURCES ${SOURCES_}) - file(GLOB_RECURSE PROTO_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "../src/opr-mm/proto/*.proto") - PROTOBUF_GENERATE_CPP_WITH_ROOT(GRPC_SRCS GRPC_HDRS ${CMAKE_CURRENT_SOURCE_DIR} ${PROTO_FILES}) - add_custom_target(mgb_proto_target DEPENDS ${GRPC_SRCS} ${GRPC_HDRS} ${PROTOBUF_PROTOC_EXECUTABLE}) - list(APPEND SOURCES ${GRPC_SRCS}) + file(GLOB_RECURSE SOURCES_ opr-mm/impl/*.cpp opr-mm/impl/*.inl) + list(APPEND SOURCES ${SOURCES_}) + file( + GLOB_RECURSE PROTO_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "../src/opr-mm/proto/*.proto") + protobuf_generate_cpp_with_root(GRPC_SRCS GRPC_HDRS ${CMAKE_CURRENT_SOURCE_DIR} + ${PROTO_FILES}) + add_custom_target(mgb_proto_target DEPENDS ${GRPC_SRCS} ${GRPC_HDRS} + ${PROTOBUF_PROTOC_EXECUTABLE}) + list(APPEND SOURCES ${GRPC_SRCS}) endif() -set(MGB_INC ${PROJECT_BINARY_DIR}/genfiles ${CMAKE_CURRENT_LIST_DIR}/core/include ${CMAKE_CURRENT_LIST_DIR}/gopt/include ${CMAKE_CURRENT_LIST_DIR}/opr/include ${CMAKE_CURRENT_LIST_DIR}/plugin/include ${CMAKE_CURRENT_LIST_DIR}/serialization/include) +set(MGB_INC + ${PROJECT_BINARY_DIR}/genfiles + ${CMAKE_CURRENT_LIST_DIR}/core/include + ${CMAKE_CURRENT_LIST_DIR}/gopt/include + ${CMAKE_CURRENT_LIST_DIR}/opr/include + ${CMAKE_CURRENT_LIST_DIR}/plugin/include + ${CMAKE_CURRENT_LIST_DIR}/serialization/include) if(MGE_WITH_JIT) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/include) - if(MGE_WITH_CUDA) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/impl/cuda) - endif() + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/include) + if(MGE_WITH_CUDA) + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/jit/impl/cuda) + endif() endif() if(MGE_WITH_DISTRIBUTED) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/opr-mm/include) + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/opr-mm/include) endif() if(MGE_WITH_CUDA AND MGE_WITH_TRT) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/tensorrt/include) - file(GLOB_RECURSE SOURCES_ tensorrt/impl/*.cpp tensorrt/impl/*.inl) - list(APPEND SOURCES ${SOURCES_}) + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/tensorrt/include) + file(GLOB_RECURSE SOURCES_ tensorrt/impl/*.cpp tensorrt/impl/*.inl) + list(APPEND SOURCES ${SOURCES_}) endif() if(MGE_WITH_CAMBRICON) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/cambricon/include) - file(GLOB_RECURSE SOURCES_ cambricon/impl/*.cpp cambricon/impl/*.inl) - list(APPEND SOURCES ${SOURCES_}) + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/cambricon/include) + file(GLOB_RECURSE SOURCES_ cambricon/impl/*.cpp cambricon/impl/*.inl) + list(APPEND SOURCES ${SOURCES_}) endif() set(MGB_CAMBRICON ${MGE_WITH_CAMBRICON}) set(MGB_ATLAS ${MGE_WITH_ATLAS}) if(MGE_WITH_CUDA) - file(GLOB_RECURSE SOURCES_ opr/impl/standalone/*.cu) - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ opr/impl/standalone/*.cu) + list(APPEND SOURCES ${SOURCES_}) endif() if(MGE_WITH_CUSTOM_OP) - list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/custom/include) - file(GLOB_RECURSE SOURCES_ custom/impl/*.cpp) - list(APPEND SOURCES ${SOURCES_}) + list(APPEND MGB_INC ${CMAKE_CURRENT_LIST_DIR}/custom/include) + file(GLOB_RECURSE SOURCES_ custom/impl/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() add_library(megbrain OBJECT ${SOURCES}) target_link_libraries(megbrain PUBLIC mgb_opr_param_defs) if(MGE_WITH_CUDA) - target_include_directories(megbrain PUBLIC ${TRT_INCLUDE_DIR}) - target_include_directories(megbrain PRIVATE ${CUDNN_INCLUDE_DIR}) - find_path(NVTX3_INCLUDE - NAMES nvToolsExtCudaRt.h - HINTS $ENV{CUDA_ROOT_DIR} $ENV{CUDA_PATH} $ENV{CUDA_BIN_PATH} - PATH_SUFFIXES include/nvtx3 - DOC "NVTX3_INCLUDE" ) - if(NVTX3_INCLUDE STREQUAL "NVTX3_INCLUDE-NOTFOUND") - message(FATAL_ERROR "Can not find NVTX3 INCLUDE, please export cuda sdk path to CUDA_ROOT_DIR or CUDA_PATH or CUDA_BIN_PATH") - endif() - target_include_directories(megbrain PRIVATE ${NVTX3_INCLUDE}) -endif() -target_include_directories(megbrain - PUBLIC $ - PRIVATE ${PROJECT_SOURCE_DIR}/third_party/midout/src -) - -foreach (INCPATH IN LISTS MGB_INC) - target_include_directories(megbrain - PUBLIC $ + target_include_directories(megbrain PUBLIC ${TRT_INCLUDE_DIR}) + target_include_directories(megbrain PRIVATE ${CUDNN_INCLUDE_DIR}) + find_path( + NVTX3_INCLUDE + NAMES nvToolsExtCudaRt.h + HINTS $ENV{CUDA_ROOT_DIR} $ENV{CUDA_PATH} $ENV{CUDA_BIN_PATH} + PATH_SUFFIXES include/nvtx3 + DOC "NVTX3_INCLUDE") + if(NVTX3_INCLUDE STREQUAL "NVTX3_INCLUDE-NOTFOUND") + message( + FATAL_ERROR + "Can not find NVTX3 INCLUDE, please export cuda sdk path to CUDA_ROOT_DIR or CUDA_PATH or CUDA_BIN_PATH" ) + endif() + target_include_directories(megbrain PRIVATE ${NVTX3_INCLUDE}) +endif() +target_include_directories( + megbrain + PUBLIC $ + PRIVATE ${PROJECT_SOURCE_DIR}/third_party/midout/src) + +foreach(INCPATH IN LISTS MGB_INC) + target_include_directories(megbrain PUBLIC $) endforeach() if(MGE_WITH_CUDA) - if(NOT WIN32 AND NOT MSVC) - target_compile_options(megbrain PRIVATE "$<$:-Xcompiler=-Wno-unused-parameter>" - "$<$>:-Wno-unused-parameter>") - endif() + if(NOT WIN32 AND NOT MSVC) + target_compile_options( + megbrain PRIVATE "$<$:-Xcompiler=-Wno-unused-parameter>" + "$<$>:-Wno-unused-parameter>") + endif() else() - target_compile_options(megbrain PRIVATE "-Wno-unused-parameter") + target_compile_options(megbrain PRIVATE "-Wno-unused-parameter") endif() if(CXX_SUPPORT_WCLASS_MEMACCESS) - if(MGE_WITH_CUDA) - target_compile_options(megbrain PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" - "$<$>:-Wno-class-memaccess>") - else() - target_compile_options(megbrain PRIVATE "-Wno-class-memaccess") - endif() + if(MGE_WITH_CUDA) + target_compile_options( + megbrain PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" + "$<$>:-Wno-class-memaccess>") + else() + target_compile_options(megbrain PRIVATE "-Wno-class-memaccess") + endif() endif() target_link_libraries(megbrain PUBLIC megdnn) if(MGE_WITH_DISTRIBUTED) - add_dependencies(megbrain mgb_proto_target) - target_link_libraries (megbrain PRIVATE libprotobuf libzmq) - set(CPPZMQ_INC ${PROJECT_SOURCE_DIR}/third_party/cppzmq) - # FIXME: add CMAKE_CURRENT_BINARY_DIR for including mm_handler.pb.h - target_include_directories(megbrain PRIVATE ${CPPZMQ_INC} ${CMAKE_CURRENT_BINARY_DIR}) - target_link_libraries (megbrain PRIVATE megray) + add_dependencies(megbrain mgb_proto_target) + target_link_libraries(megbrain PRIVATE libprotobuf libzmq) + set(CPPZMQ_INC ${PROJECT_SOURCE_DIR}/third_party/cppzmq) + # FIXME: add CMAKE_CURRENT_BINARY_DIR for including mm_handler.pb.h + target_include_directories(megbrain PRIVATE ${CPPZMQ_INC} ${CMAKE_CURRENT_BINARY_DIR}) + target_link_libraries(megbrain PRIVATE megray) endif() target_link_libraries(megbrain PUBLIC ${MGE_CAMBRICON_LIBS}) target_link_libraries(megbrain PUBLIC ${MGE_ATLAS_LIBS}) if(MGE_WITH_JIT AND MGE_WITH_HALIDE) - target_link_libraries(megbrain PRIVATE libhalide) - target_link_libraries(megbrain PRIVATE ${HALIDE_LLVM_LIBS}) + target_link_libraries(megbrain PRIVATE libhalide) + target_link_libraries(megbrain PRIVATE ${HALIDE_LLVM_LIBS}) endif() if(MGE_WITH_JIT_MLIR) - target_include_directories(megbrain PRIVATE ${MLIR_LLVM_INCLUDE_DIR}) - target_link_libraries(megbrain PRIVATE ${MLIR_LLVM_LIBS}) - add_dependencies(megbrain mgb_dialect) - target_include_directories(megbrain PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/jit/include) -endif() -if (MGB_WITH_FLATBUFFERS) - set (GEN_FLATBUFFERS_SCHEMA_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_schema.py) - set (OPR_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py) - set (MGB_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py) - file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl) - add_custom_command( - OUTPUT + target_include_directories(megbrain PRIVATE ${MLIR_LLVM_INCLUDE_DIR}) + target_link_libraries(megbrain PRIVATE ${MLIR_LLVM_LIBS}) + add_dependencies(megbrain mgb_dialect) + target_include_directories(megbrain PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/jit/include) +endif() +if(MGB_WITH_FLATBUFFERS) + set(GEN_FLATBUFFERS_SCHEMA_PY + ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_schema.py) + set(OPR_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/opr_param_defs.py) + set(MGB_PARAM_DEFS_PY ${PROJECT_SOURCE_DIR}/tools/param_defs/mgb_opr_param_defs.py) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs + COMMAND ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs - COMMAND - ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs - DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY} - VERBATIM - ) - add_custom_command( - OUTPUT + DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${OPR_PARAM_DEFS_PY} + VERBATIM) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs + COMMAND ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs - COMMAND - ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY} ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs - DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY} - VERBATIM - ) - list(APPEND FLATBUFFERS_SCHEMA_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/dtype.fbs - ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs - ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs - ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl/mgb_cpp_opr.fbs - ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/schema.fbs - ) - list(APPEND FLATBUFFERS_SCHEMA_INCLUDE_DIR - ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl - ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl - ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl - ) - build_flatbuffers( - "${FLATBUFFERS_SCHEMA_FILES}" - "${FLATBUFFERS_SCHEMA_INCLUDE_DIR}" - mgb_serialization_schema_fbs - "${FLATBUFFERS_SCHEMA_FILES}" - "${CMAKE_CURRENT_BINARY_DIR}/serialization/include/megbrain/serialization/internal" - "" - "" - ) - add_dependencies(megbrain mgb_serialization_schema_fbs) - target_include_directories(megbrain PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/serialization/include) - target_compile_definitions(megbrain PUBLIC MGB_ENABLE_FBS_SERIALIZATION=1) - target_link_libraries(megbrain PUBLIC flatbuffers) - set (GENERATED_FLATBUFFERS_CONVERTER_PATH ${CMAKE_CURRENT_BINARY_DIR}/genfiles) - set (GEN_FLATBUFFERS_CONVERTER_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_converter.py) - file (MAKE_DIRECTORY ${GENERATED_FLATBUFFERS_CONVERTER_PATH}) - add_custom_command( - OUTPUT + DEPENDS ${GEN_FLATBUFFERS_SCHEMA_PY} ${MGB_PARAM_DEFS_PY} + VERBATIM) + list( + APPEND + FLATBUFFERS_SCHEMA_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/dtype.fbs + ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/opr_param_defs.fbs + ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl/mgb_opr_param_defs.fbs + ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl/mgb_cpp_opr.fbs + ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl/schema.fbs) + list( + APPEND FLATBUFFERS_SCHEMA_INCLUDE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/serialization/impl + ${CMAKE_CURRENT_BINARY_DIR}/serialization/impl ${CMAKE_CURRENT_SOURCE_DIR}/opr/impl) + build_flatbuffers( + "${FLATBUFFERS_SCHEMA_FILES}" + "${FLATBUFFERS_SCHEMA_INCLUDE_DIR}" + mgb_serialization_schema_fbs + "${FLATBUFFERS_SCHEMA_FILES}" + "${CMAKE_CURRENT_BINARY_DIR}/serialization/include/megbrain/serialization/internal" + "" + "") + add_dependencies(megbrain mgb_serialization_schema_fbs) + target_include_directories(megbrain + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/serialization/include) + target_compile_definitions(megbrain PUBLIC MGB_ENABLE_FBS_SERIALIZATION=1) + target_link_libraries(megbrain PUBLIC flatbuffers) + set(GENERATED_FLATBUFFERS_CONVERTER_PATH ${CMAKE_CURRENT_BINARY_DIR}/genfiles) + set(GEN_FLATBUFFERS_CONVERTER_PY + ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_converter.py) + file(MAKE_DIRECTORY ${GENERATED_FLATBUFFERS_CONVERTER_PATH}) + add_custom_command( + OUTPUT ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl + COMMAND ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl - COMMAND - ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl - DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY} - VERBATIM - ) - add_custom_command( - OUTPUT + DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${OPR_PARAM_DEFS_PY} + VERBATIM) + add_custom_command( + OUTPUT ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl + COMMAND ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl - COMMAND - ${PYTHON_EXECUTABLE} ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY} ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl - DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY} - VERBATIM - ) - target_sources(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl) - target_sources(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl) - target_include_directories(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}) + DEPENDS ${GEN_FLATBUFFERS_CONVERTER_PY} ${MGB_PARAM_DEFS_PY} + VERBATIM) + target_sources( + megbrain + PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/opr_param_defs_converter.inl) + target_sources( + megbrain + PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}/mgb_opr_param_defs_converter.inl) + target_include_directories(megbrain PRIVATE ${GENERATED_FLATBUFFERS_CONVERTER_PATH}) endif() -if(UNIX AND NOT ANDROID AND NOT APPLE) - target_link_libraries(megbrain PUBLIC dl rt atomic) +if(UNIX + AND NOT ANDROID + AND NOT APPLE) + target_link_libraries(megbrain PUBLIC dl rt atomic) endif() if(ANDROID) - target_link_libraries(megbrain PUBLIC log) + target_link_libraries(megbrain PUBLIC log) endif() -set (_VER_FILE ${PROJECT_SOURCE_DIR}/src/version.ld) +set(_VER_FILE ${PROJECT_SOURCE_DIR}/src/version.ld) # Build as SHARED or STATIC depending on BUILD_SHARED_LIBS=ON/OFF add_library(megengine) @@ -216,39 +245,44 @@ target_link_libraries(megengine PRIVATE ${MGE_CUDA_LIBS}) target_link_libraries(megengine PUBLIC megbrain megdnn) target_link_libraries(${MGE_SHARED_LIB} PUBLIC megbrain megdnn) target_link_libraries(${MGE_SHARED_LIB} PRIVATE ${MGE_CUDA_LIBS}) -if (UNIX AND NOT APPLE) - target_link_options(megengine PRIVATE -Wl,--no-undefined -Wl,--version-script=${_VER_FILE}) - set_target_properties(megengine PROPERTIES LINK_DEPENDS ${_VER_FILE}) - target_link_options(${MGE_SHARED_LIB} PRIVATE -Wl,--no-undefined -Wl,--version-script=${_VER_FILE}) - set_target_properties(${MGE_SHARED_LIB} PROPERTIES LINK_DEPENDS ${_VER_FILE}) +if(UNIX AND NOT APPLE) + target_link_options(megengine PRIVATE -Wl,--no-undefined + -Wl,--version-script=${_VER_FILE}) + set_target_properties(megengine PROPERTIES LINK_DEPENDS ${_VER_FILE}) + target_link_options(${MGE_SHARED_LIB} PRIVATE -Wl,--no-undefined + -Wl,--version-script=${_VER_FILE}) + set_target_properties(${MGE_SHARED_LIB} PROPERTIES LINK_DEPENDS ${_VER_FILE}) endif() if(WIN32 OR MSVC) - target_compile_definitions(megbrain PRIVATE MGE_DLL_EXPORT) - target_compile_definitions(megdnn PRIVATE MGE_DLL_EXPORT) - target_compile_definitions(megengine PRIVATE MGE_DLL_EXPORT) - target_compile_definitions(${MGE_SHARED_LIB} PRIVATE MGE_DLL_EXPORT) - # please do not use WINDOWS_EXPORT_ALL_SYMBOLS, as symbols max than 65535 when build with CUDA - #set_target_properties(megengine PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) - #set_target_properties(${MGE_SHARED_LIB} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) -endif() -if (MGE_WITH_DISTRIBUTED) - message(VERBOSE "megengine configured to link megray") - target_link_libraries(megengine PUBLIC megray) - target_link_libraries(${MGE_SHARED_LIB} PUBLIC megray) -endif() -# Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready -# for this. -install(TARGETS megengine - EXPORT ${MGE_EXPORT_TARGETS} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - -if (NOT MGE_WITH_DISTRIBUTED) - install(TARGETS megbrain - EXPORT ${MGE_EXPORT_TARGETS} - ) + target_compile_definitions(megbrain PRIVATE MGE_DLL_EXPORT) + target_compile_definitions(megdnn PRIVATE MGE_DLL_EXPORT) + target_compile_definitions(megengine PRIVATE MGE_DLL_EXPORT) + target_compile_definitions(${MGE_SHARED_LIB} PRIVATE MGE_DLL_EXPORT) + # please do not use WINDOWS_EXPORT_ALL_SYMBOLS, as symbols max than 65535 when build + # with CUDA set_target_properties(megengine PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS + # TRUE) set_target_properties(${MGE_SHARED_LIB} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS + # TRUE) +endif() +if(MGE_WITH_DISTRIBUTED) + message(VERBOSE "megengine configured to link megray") + target_link_libraries(megengine PUBLIC megray) + target_link_libraries(${MGE_SHARED_LIB} PUBLIC megray) +endif() +# Do not export targets if MGE_WITH_DISTRIBUTED is on. MegRay is not ready for this. +install( + TARGETS megengine + EXPORT ${MGE_EXPORT_TARGETS} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +if(NOT MGE_WITH_DISTRIBUTED) + install(TARGETS megbrain EXPORT ${MGE_EXPORT_TARGETS}) endif() foreach(_PATH ${MGB_INC}) - install(DIRECTORY ${_PATH}/megbrain DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") + install( + DIRECTORY ${_PATH}/megbrain + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING + PATTERN "*.h") endforeach() diff --git a/src/jit/test/mlir/CMakeLists.txt b/src/jit/test/mlir/CMakeLists.txt index aad1717d..8d1eff47 100644 --- a/src/jit/test/mlir/CMakeLists.txt +++ b/src/jit/test/mlir/CMakeLists.txt @@ -1,27 +1,20 @@ configure_lit_site_cfg( - ${CMAKE_CURRENT_SOURCE_DIR}/utils/lit.site.cfg.py.in - ${CMAKE_CURRENT_BINARY_DIR}/utils/lit.site.cfg.py - MAIN_CONFIG - ${CMAKE_CURRENT_SOURCE_DIR}/utils/lit.cfg.py -) + ${CMAKE_CURRENT_SOURCE_DIR}/utils/lit.site.cfg.py.in + ${CMAKE_CURRENT_BINARY_DIR}/utils/lit.site.cfg.py MAIN_CONFIG + ${CMAKE_CURRENT_SOURCE_DIR}/utils/lit.cfg.py) -set(LLVM_EXTERNAL_LIT "${PROJECT_SOURCE_DIR}/third_party/llvm-project/llvm/utils/lit/lit.py" CACHE STRING "External lit") +set(LLVM_EXTERNAL_LIT + "${PROJECT_SOURCE_DIR}/third_party/llvm-project/llvm/utils/lit/lit.py" + CACHE STRING "External lit") -set(MLIR_MGB_TEST_DEPENDS - mgb-file-check - count not - mgb-opt -) +set(MLIR_MGB_TEST_DEPENDS mgb-file-check count not mgb-opt) add_lit_testsuite(mgb-mlir-test-lit "Running the mgb regression tests" - ${CMAKE_CURRENT_BINARY_DIR}/utils - DEPENDS ${MLIR_MGB_TEST_DEPENDS} - ) + ${CMAKE_CURRENT_BINARY_DIR}/utils DEPENDS ${MLIR_MGB_TEST_DEPENDS}) set_target_properties(mgb-mlir-test-lit PROPERTIES FOLDER "Tests") -add_lit_testsuites(MLIR_TEST ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${MLIR_MGB_TEST_DEPENDS} -) +add_lit_testsuites(MLIR_TEST ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS + ${MLIR_MGB_TEST_DEPENDS}) add_custom_target(mlir_pass_check) add_dependencies(mlir_pass_check mgb-mlir-test-lit) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dd4b2c7e..030e5e6e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,52 +1,63 @@ include_directories("./src/include") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") -file(GLOB_RECURSE SOURCES ./*.cpp ../src/core/test/*.cpp ../src/gopt/test/*.cpp ../src/opr/test/*.cpp ../src/plugin/test/*.cpp ../src/serialization/test/*.cpp) +file( + GLOB_RECURSE + SOURCES + ./*.cpp + ../src/core/test/*.cpp + ../src/gopt/test/*.cpp + ../src/opr/test/*.cpp + ../src/plugin/test/*.cpp + ../src/serialization/test/*.cpp) if(MGE_WITH_JIT) - file(GLOB_RECURSE SOURCES_ ../src/jit/test/*.cpp) - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ ../src/jit/test/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() if(MGE_WITH_DISTRIBUTED) - file(GLOB_RECURSE SOURCES_ ../src/opr-mm/test/*.cpp) - list(APPEND SOURCES ${SOURCES_}) + file(GLOB_RECURSE SOURCES_ ../src/opr-mm/test/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() -if (MGE_WITH_CUDA AND MGE_WITH_TRT) - file(GLOB_RECURSE SOURCES_ ../src/tensorrt/test/*.cpp) - list(APPEND SOURCES ${SOURCES_}) +if(MGE_WITH_CUDA AND MGE_WITH_TRT) + file(GLOB_RECURSE SOURCES_ ../src/tensorrt/test/*.cpp) + list(APPEND SOURCES ${SOURCES_}) endif() add_executable(megbrain_test ${SOURCES}) if(WIN32 OR MSVC) - target_compile_definitions(megbrain_test PRIVATE MGE_WINDOWS_STATIC_LINK) + target_compile_definitions(megbrain_test PRIVATE MGE_WINDOWS_STATIC_LINK) endif() target_link_libraries(megbrain_test gtest gmock) target_link_libraries(megbrain_test megbrain megdnn ${MGE_CUDA_LIBS}) -if (MGE_WITH_CUDA) - target_include_directories(megbrain_test PRIVATE ${CUDNN_INCLUDE_DIR}) +if(MGE_WITH_CUDA) + target_include_directories(megbrain_test PRIVATE ${CUDNN_INCLUDE_DIR}) endif() if(CXX_SUPPORT_WCLASS_MEMACCESS) - if(MGE_WITH_CUDA) - target_compile_options(megbrain_test PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" - "$<$>:-Wno-class-memaccess>") - else() - target_compile_options(megbrain_test PRIVATE "-Wno-class-memaccess") - endif() + if(MGE_WITH_CUDA) + target_compile_options( + megbrain_test + PRIVATE "$<$:-Xcompiler=-Wno-class-memaccess>" + "$<$>:-Wno-class-memaccess>") + else() + target_compile_options(megbrain_test PRIVATE "-Wno-class-memaccess") + endif() endif() if(UNIX) - if(APPLE OR ANDROID) - target_link_libraries(megbrain_test dl) - else() - target_link_libraries(megbrain_test dl rt) - endif() + if(APPLE OR ANDROID) + target_link_libraries(megbrain_test dl) + else() + target_link_libraries(megbrain_test dl rt) + endif() endif() -if (MGE_WITH_DISTRIBUTED) - target_link_libraries(megbrain_test megray) +if(MGE_WITH_DISTRIBUTED) + target_link_libraries(megbrain_test megray) endif() if(MGE_WITH_JIT) - if(MGE_WITH_JIT_MLIR) - add_subdirectory(${PROJECT_SOURCE_DIR}/src/jit/test/mlir ${CMAKE_CURRENT_BINARY_DIR}/../src/jit/test/mlir) - endif() + if(MGE_WITH_JIT_MLIR) + add_subdirectory(${PROJECT_SOURCE_DIR}/src/jit/test/mlir + ${CMAKE_CURRENT_BINARY_DIR}/../src/jit/test/mlir) + endif() endif() diff --git a/toolchains/aarch64-linux-gnu.toolchain.cmake b/toolchains/aarch64-linux-gnu.toolchain.cmake index 525817b3..cb09256f 100644 --- a/toolchains/aarch64-linux-gnu.toolchain.cmake +++ b/toolchains/aarch64-linux-gnu.toolchain.cmake @@ -2,8 +2,8 @@ set(ARM_CROSS_BUILD_ARCH aarch64) set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++") if("$ENV{FORCE_CHECK_UNUSED_PARAMETER}" STREQUAL "true") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") endif() set(CMAKE_STRIP "aarch64-linux-gnu-strip") set(CMAKE_SYSTEM_PROCESSOR aarch64) diff --git a/toolchains/aarch64-none-linux-gnu.toolchain.cmake b/toolchains/aarch64-none-linux-gnu.toolchain.cmake index e16d3766..637c0c36 100644 --- a/toolchains/aarch64-none-linux-gnu.toolchain.cmake +++ b/toolchains/aarch64-none-linux-gnu.toolchain.cmake @@ -4,8 +4,8 @@ set(CMAKE_CXX_COMPILER "aarch64-none-linux-gnu-g++") set(CMAKE_C_FLAGS "-Wno-psabi") set(CMAKE_CXX_FLAGS "-Wno-psabi") if("$ENV{FORCE_CHECK_UNUSED_PARAMETER}" STREQUAL "true") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") endif() set(CMAKE_STRIP "aarch64-none-linux-gnu-strip") set(CMAKE_SYSTEM_PROCESSOR aarch64) diff --git a/toolchains/arm-linux-gnueabi.toolchain.cmake b/toolchains/arm-linux-gnueabi.toolchain.cmake index 471b7806..bc4bc229 100644 --- a/toolchains/arm-linux-gnueabi.toolchain.cmake +++ b/toolchains/arm-linux-gnueabi.toolchain.cmake @@ -4,8 +4,8 @@ set(CMAKE_CXX_COMPILER "arm-linux-gnueabi-g++") set(CMAKE_C_FLAGS "-mfloat-abi=softfp -mfpu=neon-vfpv4 -Wno-psabi") set(CMAKE_CXX_FLAGS "-mfloat-abi=softfp -mfpu=neon-vfpv4 -Wno-psabi") if("$ENV{FORCE_CHECK_UNUSED_PARAMETER}" STREQUAL "true") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") endif() set(CMAKE_STRIP "arm-linux-gnueabi-strip") set(CMAKE_SYSTEM_PROCESSOR armv7) diff --git a/toolchains/arm-linux-gnueabihf.toolchain.cmake b/toolchains/arm-linux-gnueabihf.toolchain.cmake index b9e36412..4e29ae6d 100644 --- a/toolchains/arm-linux-gnueabihf.toolchain.cmake +++ b/toolchains/arm-linux-gnueabihf.toolchain.cmake @@ -4,8 +4,8 @@ set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++") set(CMAKE_C_FLAGS "-mfloat-abi=hard -mfpu=neon-vfpv4 -Wno-psabi") set(CMAKE_CXX_FLAGS "-mfloat-abi=hard -mfpu=neon-vfpv4 -Wno-psabi") if("$ENV{FORCE_CHECK_UNUSED_PARAMETER}" STREQUAL "true") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=unused-parameter") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-parameter") endif() set(CMAKE_STRIP "arm-linux-gnueabihf-strip") set(CMAKE_SYSTEM_PROCESSOR armv7) diff --git a/toolchains/ios.toolchain.cmake b/toolchains/ios.toolchain.cmake index 26eabf51..c57174ff 100644 --- a/toolchains/ios.toolchain.cmake +++ b/toolchains/ios.toolchain.cmake @@ -1,103 +1,87 @@ # This file is part of the ios-cmake project. It was retrieved from # https://github.com/cristeab/ios-cmake.git, which is a fork of -# https://code.google.com/p/ios-cmake/. Which in turn is based off of -# the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which -# are included with CMake 2.8.4 +# https://code.google.com/p/ios-cmake/. Which in turn is based off of the +# Platform/Darwin.cmake and Platform/UnixPaths.cmake files which are included with CMake +# 2.8.4 # # The ios-cmake project is licensed under the new BSD license. # -# Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software, -# Kitware, Inc., Insight Software Consortium. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. +# Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software, Kitware, Inc., +# Insight Software Consortium. All rights reserved. Redistribution and use in source +# and binary forms, with or without modification, are permitted provided that the +# following conditions are met: 1. Redistributions of source code must retain the above +# copyright notice, this list of conditions and the following disclaimer. # -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. +# 1. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. # -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. +# 1. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. # -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +# SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY +# WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. # -# This file is based off of the Platform/Darwin.cmake and -# Platform/UnixPaths.cmake files which are included with CMake 2.8.4 -# It has been altered for iOS development. +# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake files +# which are included with CMake 2.8.4 It has been altered for iOS development. # # Updated by Alex Stewart (alexs.mac@gmail.com) # # ***************************************************************************** -# Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com) -# under the BSD-3-Clause license -# https://github.com/leetal/ios-cmake +# Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com) under the +# BSD-3-Clause license https://github.com/leetal/ios-cmake # ***************************************************************************** # -# INFORMATION / HELP +# INFORMATION / HELP # # The following variables control the behaviour of this toolchain: # -# IOS_PLATFORM: OS (default) or SIMULATOR or SIMULATOR64 or TVOS or SIMULATOR_TVOS or WATCHOS or SIMULATOR_WATCHOS -# OS = Build for iPhoneOS. -# OS64 = Build for arm64 arm64e iPhoneOS. -# SIMULATOR = Build for x86 i386 iPhone Simulator. -# SIMULATOR64 = Build for x86_64 iPhone Simulator. -# TVOS = Build for AppleTVOS. -# SIMULATOR_TVOS = Build for x86_64 AppleTV Simulator. -# WATCHOS = Build for armv7k arm64_32 for WatchOS. -# SIMULATOR_WATCHOS = Build for x86_64 for Watch Simulator. -# CMAKE_OSX_SYSROOT: Path to the iOS SDK to use. By default this is -# automatically determined from IOS_PLATFORM and xcodebuild, but -# can also be manually specified (although this should not be required). -# CMAKE_IOS_DEVELOPER_ROOT: Path to the Developer directory for the iOS platform -# being compiled for. By default this is automatically determined from -# CMAKE_OSX_SYSROOT, but can also be manually specified (although this should -# not be required). -# ENABLE_BITCODE: (1|0) Enables or disables bitcode support. Default 1 (true) -# ENABLE_ARC: (1|0) Enables or disables ARC support. Default 1 (true, ARC enabled by default) -# ENABLE_VISIBILITY: (1|0) Enables or disables symbol visibility support. Default 0 (false, visibility hidden by default) -# IOS_ARCH: (armv7 armv7s armv7k arm64 arm64e arm64_32 i386 x86_64) If specified, will override the default architectures for the given IOS_PLATFORM -# OS = armv7 armv7s arm64 arm64e (if applicable) -# OS64 = arm64 arm64e (if applicable) -# SIMULATOR = i386 x86_64 -# SIMULATOR64 = x86_64 -# TVOS = arm64 -# SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated) -# WATCHOS = armv7k arm64_32 (if applicable) -# SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated) +# IOS_PLATFORM: OS (default) or SIMULATOR or SIMULATOR64 or TVOS or SIMULATOR_TVOS or +# WATCHOS or SIMULATOR_WATCHOS OS = Build for iPhoneOS. OS64 = Build for arm64 arm64e +# iPhoneOS. SIMULATOR = Build for x86 i386 iPhone Simulator. SIMULATOR64 = Build for +# x86_64 iPhone Simulator. TVOS = Build for AppleTVOS. SIMULATOR_TVOS = Build for x86_64 +# AppleTV Simulator. WATCHOS = Build for armv7k arm64_32 for WatchOS. SIMULATOR_WATCHOS +# = Build for x86_64 for Watch Simulator. CMAKE_OSX_SYSROOT: Path to the iOS SDK to use. +# By default this is automatically determined from IOS_PLATFORM and xcodebuild, but can +# also be manually specified (although this should not be required). +# CMAKE_IOS_DEVELOPER_ROOT: Path to the Developer directory for the iOS platform being +# compiled for. By default this is automatically determined from CMAKE_OSX_SYSROOT, but +# can also be manually specified (although this should not be required). ENABLE_BITCODE: +# (1|0) Enables or disables bitcode support. Default 1 (true) ENABLE_ARC: (1|0) Enables +# or disables ARC support. Default 1 (true, ARC enabled by default) ENABLE_VISIBILITY: +# (1|0) Enables or disables symbol visibility support. Default 0 (false, visibility +# hidden by default) IOS_ARCH: (armv7 armv7s armv7k arm64 arm64e arm64_32 i386 x86_64) +# If specified, will override the default architectures for the given IOS_PLATFORM OS = +# armv7 armv7s arm64 arm64e (if applicable) OS64 = arm64 arm64e (if applicable) +# SIMULATOR = i386 x86_64 SIMULATOR64 = x86_64 TVOS = arm64 SIMULATOR_TVOS = x86_64 +# (i386 has since long been deprecated) WATCHOS = armv7k arm64_32 (if applicable) +# SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated) # # This toolchain defines the following variables for use externally: # # XCODE_VERSION: Version number (not including Build version) of Xcode detected. -# IOS_SDK_VERSION: Version of iOS SDK being used. -# CMAKE_OSX_ARCHITECTURES: Architectures being compiled for (generated from -# IOS_PLATFORM). +# IOS_SDK_VERSION: Version of iOS SDK being used. CMAKE_OSX_ARCHITECTURES: Architectures +# being compiled for (generated from IOS_PLATFORM). # # This toolchain defines the following macros for use externally: # -# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT) -# A convenience macro for setting xcode specific properties on targets. -# Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel -# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all"). +# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT) A convenience +# macro for setting xcode specific properties on targets. Available variants are: All, +# Release, RelWithDebInfo, Debug, MinSizeRel example: set_xcode_property (myioslib +# IPHONEOS_DEPLOYMENT_TARGET "3.1" "all"). # -# find_host_package (PROGRAM ARGS) -# A macro used to find executable programs on the host system, not within the -# iOS environment. Thanks to the android-cmake project for providing the -# command. +# find_host_package (PROGRAM ARGS) A macro used to find executable programs on the host +# system, not within the iOS environment. Thanks to the android-cmake project for +# providing the command. # Fix for PThread library not in path set(CMAKE_THREAD_LIBS_INIT "-lpthread") @@ -106,57 +90,58 @@ set(CMAKE_USE_WIN32_THREADS_INIT 0) set(CMAKE_USE_PTHREADS_INIT 1) # Get the Xcode version being used. -execute_process(COMMAND xcodebuild -version +execute_process( + COMMAND xcodebuild -version OUTPUT_VARIABLE XCODE_VERSION - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION "${XCODE_VERSION}") string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION "${XCODE_VERSION}") message(STATUS "Building with Xcode version: ${XCODE_VERSION}") -# Default to building for iPhoneOS if not specified otherwise, and we cannot -# determine the platform from the CMAKE_OSX_ARCHITECTURES variable. The use -# of CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly -# determine the value of IOS_PLATFORM from the root project, as -# CMAKE_OSX_ARCHITECTURES is propagated to them by CMake. -if (NOT DEFINED IOS_PLATFORM) - if (CMAKE_OSX_ARCHITECTURES) - if (CMAKE_OSX_ARCHITECTURES MATCHES ".*arm.*") +# Default to building for iPhoneOS if not specified otherwise, and we cannot determine +# the platform from the CMAKE_OSX_ARCHITECTURES variable. The use of +# CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly determine +# the value of IOS_PLATFORM from the root project, as CMAKE_OSX_ARCHITECTURES is +# propagated to them by CMake. +if(NOT DEFINED IOS_PLATFORM) + if(CMAKE_OSX_ARCHITECTURES) + if(CMAKE_OSX_ARCHITECTURES MATCHES ".*arm.*") set(IOS_PLATFORM "OS") - elseif (CMAKE_OSX_ARCHITECTURES MATCHES "i386") + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386") set(IOS_PLATFORM "SIMULATOR") - elseif (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64") set(IOS_PLATFORM "SIMULATOR64") - elseif (CMAKE_OSX_ARCHITECTURES MATCHES "armv7k") + elseif(CMAKE_OSX_ARCHITECTURES MATCHES "armv7k") set(IOS_PLATFORM "WATCHOS") endif() endif() - if (NOT IOS_PLATFORM) + if(NOT IOS_PLATFORM) set(IOS_PLATFORM "OS") endif() endif() -set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING - "Type of iOS platform for which to build.") -# Determine the platform name and architectures for use in xcodebuild commands -# from the specified IOS_PLATFORM name. -if (IOS_PLATFORM STREQUAL "OS") +set(IOS_PLATFORM + ${IOS_PLATFORM} + CACHE STRING "Type of iOS platform for which to build.") +# Determine the platform name and architectures for use in xcodebuild commands from the +# specified IOS_PLATFORM name. +if(IOS_PLATFORM STREQUAL "OS") set(XCODE_IOS_PLATFORM iphoneos) if(NOT IOS_ARCH) - if (XCODE_VERSION VERSION_GREATER 10.0) + if(XCODE_VERSION VERSION_GREATER 10.0) set(IOS_ARCH armv7 armv7s arm64 arm64e) else() set(IOS_ARCH armv7 armv7s arm64) endif() endif() - elseif (IOS_PLATFORM STREQUAL "OS64") +elseif(IOS_PLATFORM STREQUAL "OS64") set(XCODE_IOS_PLATFORM iphoneos) if(NOT IOS_ARCH) - if (XCODE_VERSION VERSION_GREATER 10.0) + if(XCODE_VERSION VERSION_GREATER 10.0) set(IOS_ARCH arm64 arm64e) else() set(IOS_ARCH arm64) endif() endif() -elseif (IOS_PLATFORM STREQUAL "SIMULATOR") +elseif(IOS_PLATFORM STREQUAL "SIMULATOR") set(XCODE_IOS_PLATFORM iphonesimulator) if(NOT IOS_ARCH) set(IOS_ARCH i386 x86_64) @@ -166,26 +151,26 @@ elseif(IOS_PLATFORM STREQUAL "SIMULATOR64") if(NOT IOS_ARCH) set(IOS_ARCH x86_64) endif() -elseif (IOS_PLATFORM STREQUAL "TVOS") +elseif(IOS_PLATFORM STREQUAL "TVOS") set(XCODE_IOS_PLATFORM appletvos) if(NOT IOS_ARCH) set(IOS_ARCH arm64) endif() -elseif (IOS_PLATFORM STREQUAL "SIMULATOR_TVOS") +elseif(IOS_PLATFORM STREQUAL "SIMULATOR_TVOS") set(XCODE_IOS_PLATFORM appletvsimulator) if(NOT IOS_ARCH) set(IOS_ARCH x86_64) endif() -elseif (IOS_PLATFORM STREQUAL "WATCHOS") +elseif(IOS_PLATFORM STREQUAL "WATCHOS") set(XCODE_IOS_PLATFORM watchos) if(NOT IOS_ARCH) - if (XCODE_VERSION VERSION_GREATER 10.0) + if(XCODE_VERSION VERSION_GREATER 10.0) set(IOS_ARCH armv7k arm64_32) else() set(IOS_ARCH armv7k) endif() endif() -elseif (IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") +elseif(IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") set(XCODE_IOS_PLATFORM watchsimulator) if(NOT IOS_ARCH) set(IOS_ARCH x86_64) @@ -194,130 +179,166 @@ else() message(FATAL_ERROR "Invalid IOS_PLATFORM: ${IOS_PLATFORM}") endif() message(STATUS "Configuring iOS build for platform: ${IOS_PLATFORM}, " - "architecture(s): ${IOS_ARCH}") + "architecture(s): ${IOS_ARCH}") # If user did not specify the SDK root to use, then query xcodebuild for it. -execute_process(COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path - OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT - OUTPUT_QUIET ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process( + COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path + OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT + OUTPUT_QUIET ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) # If user did not specify the SDK root to use, then query xcodebuild for it. -if (NOT DEFINED CMAKE_OSX_SYSROOT OR (NOT CMAKE_OSX_SYSROOT STREQUAL CMAKE_OSX_SYSROOT_INT)) - execute_process(COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path +if(NOT DEFINED CMAKE_OSX_SYSROOT OR (NOT CMAKE_OSX_SYSROOT STREQUAL + CMAKE_OSX_SYSROOT_INT)) + execute_process( + COMMAND xcodebuild -version -sdk ${XCODE_IOS_PLATFORM} Path OUTPUT_VARIABLE CMAKE_OSX_SYSROOT - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) endif() -if (NOT EXISTS ${CMAKE_OSX_SYSROOT}) - message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain" - "is pointing to the correct path. Please run:" - "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer" - "and see if that fixes the problem for you.") +if(NOT EXISTS ${CMAKE_OSX_SYSROOT}) + message( + SEND_ERROR "Please make sure that Xcode is installed and that the toolchain" + "is pointing to the correct path. Please run:" + "sudo xcode-select -s /Applications/Xcode.app/Contents/Developer" + "and see if that fixes the problem for you.") message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} " - "does not exist.") + "does not exist.") elseif(DEFINED CMAKE_OSX_SYSROOT) - message(STATUS "Using manually set SDK path: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}") + message( + STATUS + "Using manually set SDK path: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}") else() - message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}") + message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT} for platform: ${IOS_PLATFORM}") endif() # Specify minimum version of deployment target. -if (NOT DEFINED IOS_DEPLOYMENT_TARGET) - if (IOS_PLATFORM STREQUAL "WATCHOS" OR IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") - # Unless specified, SDK version 2.0 is used by default as minimum target version (watchOS). - set(IOS_DEPLOYMENT_TARGET "2.0" - CACHE STRING "Minimum iOS version to build for." ) +if(NOT DEFINED IOS_DEPLOYMENT_TARGET) + if(IOS_PLATFORM STREQUAL "WATCHOS" OR IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") + # Unless specified, SDK version 2.0 is used by default as minimum target version + # (watchOS). + set(IOS_DEPLOYMENT_TARGET + "2.0" + CACHE STRING "Minimum iOS version to build for.") else() - # Unless specified, SDK version 10.0 is used by default as minimum target version (iOS, tvOS). - set(IOS_DEPLOYMENT_TARGET "10.0" - CACHE STRING "Minimum iOS version to build for." ) + # Unless specified, SDK version 10.0 is used by default as minimum target version + # (iOS, tvOS). + set(IOS_DEPLOYMENT_TARGET + "10.0" + CACHE STRING "Minimum iOS version to build for.") endif() - message(STATUS "Using the default min-version since IOS_DEPLOYMENT_TARGET not provided!") + message( + STATUS "Using the default min-version since IOS_DEPLOYMENT_TARGET not provided!") endif() # Use bitcode or not -if (NOT DEFINED ENABLE_BITCODE AND NOT IOS_ARCH MATCHES "((^|, )(i386|x86_64))+") +if(NOT DEFINED ENABLE_BITCODE AND NOT IOS_ARCH MATCHES "((^|, )(i386|x86_64))+") # Unless specified, enable bitcode support by default - set(ENABLE_BITCODE TRUE CACHE BOOL "Whether or not to enable bitcode") + set(ENABLE_BITCODE + TRUE + CACHE BOOL "Whether or not to enable bitcode") message(STATUS "Enabling bitcode support by default. ENABLE_BITCODE not provided!") endif() -if (NOT DEFINED ENABLE_BITCODE) - message(STATUS "Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!") +if(NOT DEFINED ENABLE_BITCODE) + message( + STATUS + "Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!" + ) endif() # Use ARC or not -if (NOT DEFINED ENABLE_ARC) +if(NOT DEFINED ENABLE_ARC) # Unless specified, enable ARC support by default - set(ENABLE_ARC TRUE CACHE BOOL "Whether or not to enable ARC") + set(ENABLE_ARC + TRUE + CACHE BOOL "Whether or not to enable ARC") message(STATUS "Enabling ARC support by default. ENABLE_ARC not provided!") endif() # Use hidden visibility or not -if (NOT DEFINED ENABLE_VISIBILITY) +if(NOT DEFINED ENABLE_VISIBILITY) # Unless specified, disable symbols visibility by default - set(ENABLE_VISIBILITY FALSE CACHE BOOL "Whether or not to hide symbols (-fvisibility=hidden)") - message(STATUS "Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!") + set(ENABLE_VISIBILITY + FALSE + CACHE BOOL "Whether or not to hide symbols (-fvisibility=hidden)") + message( + STATUS "Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!") endif() # Get the SDK version information. -execute_process(COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion +execute_process( + COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion OUTPUT_VARIABLE IOS_SDK_VERSION - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) -# Find the Developer root for the specific iOS platform being compiled for -# from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in -# CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain -# this information from xcrun or xcodebuild. -if (NOT CMAKE_IOS_DEVELOPER_ROOT) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +# Find the Developer root for the specific iOS platform being compiled for from +# CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in CMAKE_OSX_SYSROOT. There +# does not appear to be a direct way to obtain this information from xcrun or +# xcodebuild. +if(NOT CMAKE_IOS_DEVELOPER_ROOT) get_filename_component(IOS_PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT} PATH) get_filename_component(CMAKE_IOS_DEVELOPER_ROOT ${IOS_PLATFORM_SDK_DIR} PATH) endif() -if (NOT EXISTS ${CMAKE_IOS_DEVELOPER_ROOT}) +if(NOT EXISTS ${CMAKE_IOS_DEVELOPER_ROOT}) message(FATAL_ERROR "Invalid CMAKE_IOS_DEVELOPER_ROOT: " - "${CMAKE_IOS_DEVELOPER_ROOT} does not exist.") + "${CMAKE_IOS_DEVELOPER_ROOT} does not exist.") endif() # Find the C & C++ compilers for the specified SDK. -if (NOT CMAKE_C_COMPILER) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang +if(NOT CMAKE_C_COMPILER) + execute_process( + COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang OUTPUT_VARIABLE CMAKE_C_COMPILER - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}") endif() -if (NOT CMAKE_CXX_COMPILER) - execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang++ +if(NOT CMAKE_CXX_COMPILER) + execute_process( + COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang++ OUTPUT_VARIABLE CMAKE_CXX_COMPILER - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}") endif() # Find (Apple's) libtool. -execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find libtool +execute_process( + COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find libtool OUTPUT_VARIABLE IOS_LIBTOOL - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) message(STATUS "Using libtool: ${IOS_LIBTOOL}") -# Configure libtool to be used instead of ar + ranlib to build static libraries. -# This is required on Xcode 7+, but should also work on previous versions of -# Xcode. +# Configure libtool to be used instead of ar + ranlib to build static libraries. This is +# required on Xcode 7+, but should also work on previous versions of Xcode. set(CMAKE_C_CREATE_STATIC_LIBRARY - "${IOS_LIBTOOL} -static -o ") + "${IOS_LIBTOOL} -static -o ") set(CMAKE_CXX_CREATE_STATIC_LIBRARY - "${IOS_LIBTOOL} -static -o ") + "${IOS_LIBTOOL} -static -o ") # Get the version of Darwin (OS X) of the host. -execute_process(COMMAND uname -r +execute_process( + COMMAND uname -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) # Standard settings. -set(CMAKE_SYSTEM_NAME Darwin CACHE INTERNAL "") -set(CMAKE_SYSTEM_VERSION ${IOS_SDK_VERSION} CACHE INTERNAL "") -set(UNIX TRUE CACHE BOOL "") -set(APPLE TRUE CACHE BOOL "") -set(IOS TRUE CACHE BOOL "") -set(CMAKE_AR ar CACHE FILEPATH "" FORCE) -set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE) -# Force unset of OS X-specific deployment target (otherwise autopopulated), -# required as of cmake 2.8.10. -set(CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING - "Must be empty for iOS builds." FORCE) +set(CMAKE_SYSTEM_NAME + Darwin + CACHE INTERNAL "") +set(CMAKE_SYSTEM_VERSION + ${IOS_SDK_VERSION} + CACHE INTERNAL "") +set(UNIX + TRUE + CACHE BOOL "") +set(APPLE + TRUE + CACHE BOOL "") +set(IOS + TRUE + CACHE BOOL "") +set(CMAKE_AR + ar + CACHE FILEPATH "" FORCE) +set(CMAKE_RANLIB + ranlib + CACHE FILEPATH "" FORCE) +# Force unset of OS X-specific deployment target (otherwise autopopulated), required as +# of cmake 2.8.10. +set(CMAKE_OSX_DEPLOYMENT_TARGET + "" + CACHE STRING "Must be empty for iOS builds." FORCE) # Set the architectures for which to build. -set(CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE STRING "Build architecture for iOS") -# Change the type of target generated for try_compile() so it'll work when cross-compiling +set(CMAKE_OSX_ARCHITECTURES + ${IOS_ARCH} + CACHE STRING "Build architecture for iOS") +# Change the type of target generated for try_compile() so it'll work when +# cross-compiling set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # All iOS/Darwin specific settings - some may be redundant. set(CMAKE_SHARED_LIBRARY_PREFIX "lib") @@ -332,7 +353,8 @@ set(CMAKE_MODULE_EXISTS 1) set(CMAKE_DL_LIBS "") set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") -set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") +set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG + "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") if(IOS_ARCH MATCHES "((^|, )(arm64|arm64e|x86_64))+") @@ -350,35 +372,32 @@ message(STATUS "Building for minimum iOS version: ${IOS_DEPLOYMENT_TARGET}" # Note that only Xcode 7+ supports the newer more specific: # -m${XCODE_IOS_PLATFORM}-version-min flags, older versions of Xcode use: # -m(ios/ios-simulator)-version-min instead. -if (IOS_PLATFORM STREQUAL "OS" OR IOS_PLATFORM STREQUAL "OS64") - if (XCODE_VERSION VERSION_LESS 7.0) - set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mios-version-min=${IOS_DEPLOYMENT_TARGET}") +if(IOS_PLATFORM STREQUAL "OS" OR IOS_PLATFORM STREQUAL "OS64") + if(XCODE_VERSION VERSION_LESS 7.0) + set(XCODE_IOS_PLATFORM_VERSION_FLAGS "-mios-version-min=${IOS_DEPLOYMENT_TARGET}") else() # Xcode 7.0+ uses flags we can build directly from XCODE_IOS_PLATFORM. set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_DEPLOYMENT_TARGET}") + "-m${XCODE_IOS_PLATFORM}-version-min=${IOS_DEPLOYMENT_TARGET}") endif() -elseif (IOS_PLATFORM STREQUAL "TVOS") - set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mtvos-version-min=${IOS_DEPLOYMENT_TARGET}") -elseif (IOS_PLATFORM STREQUAL "SIMULATOR_TVOS") - set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mtvos-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") -elseif (IOS_PLATFORM STREQUAL "WATCHOS") +elseif(IOS_PLATFORM STREQUAL "TVOS") + set(XCODE_IOS_PLATFORM_VERSION_FLAGS "-mtvos-version-min=${IOS_DEPLOYMENT_TARGET}") +elseif(IOS_PLATFORM STREQUAL "SIMULATOR_TVOS") set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mwatchos-version-min=${IOS_DEPLOYMENT_TARGET}") -elseif (IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") + "-mtvos-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") +elseif(IOS_PLATFORM STREQUAL "WATCHOS") + set(XCODE_IOS_PLATFORM_VERSION_FLAGS "-mwatchos-version-min=${IOS_DEPLOYMENT_TARGET}") +elseif(IOS_PLATFORM STREQUAL "SIMULATOR_WATCHOS") set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mwatchos-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") + "-mwatchos-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") else() # SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min. set(XCODE_IOS_PLATFORM_VERSION_FLAGS - "-mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") + "-mios-simulator-version-min=${IOS_DEPLOYMENT_TARGET}") endif() message(STATUS "Version flags set to: ${XCODE_IOS_PLATFORM_VERSION_FLAGS}") -if (ENABLE_BITCODE) +if(ENABLE_BITCODE) set(BITCODE "-fembed-bitcode") set(HEADER_PAD "") message(STATUS "Enabling bitcode support.") @@ -388,7 +407,7 @@ else() message(STATUS "Disabling bitcode support.") endif() -if (ENABLE_ARC) +if(ENABLE_ARC) set(FOBJC_ARC "-fobjc-arc") message(STATUS "Enabling ARC support.") else() @@ -396,7 +415,7 @@ else() message(STATUS "Disabling ARC support.") endif() -if (NOT ENABLE_VISIBILITY) +if(NOT ENABLE_VISIBILITY) set(VISIBILITY "-fvisibility=hidden") message(STATUS "Hiding symbols (-fvisibility=hidden).") else() @@ -404,20 +423,31 @@ else() endif() set(CMAKE_C_FLAGS -"${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS}") + "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS}" +) # Hidden visibilty is required for C++ on iOS. set(CMAKE_CXX_FLAGS -"${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS}") -set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_MINSIZEREL}") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_RELEASE}") -set(CMAKE_C_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") -set(CMAKE_CXX_LINK_FLAGS "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") + "${XCODE_IOS_PLATFORM_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS}" +) +set(CMAKE_CXX_FLAGS_MINSIZEREL + "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_MINSIZEREL}" +) +set(CMAKE_CXX_FLAGS_RELWITHDEBINFO + "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" +) +set(CMAKE_CXX_FLAGS_RELEASE + "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${BITCODE} ${CMAKE_CXX_FLAGS_RELEASE}") +set(CMAKE_C_LINK_FLAGS + "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") +set(CMAKE_CXX_LINK_FLAGS + "${XCODE_IOS_PLATFORM_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}" +) -# In order to ensure that the updated compiler flags are used in try_compile() -# tests, we have to forcibly set them in the CMake cache, not merely set them -# in the local scope. -list(APPEND VARS_TO_FORCE_IN_CACHE +# In order to ensure that the updated compiler flags are used in try_compile() tests, we +# have to forcibly set them in the CMake cache, not merely set them in the local scope. +list( + APPEND + VARS_TO_FORCE_IN_CACHE CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELWITHDEBINFO @@ -426,37 +456,40 @@ list(APPEND VARS_TO_FORCE_IN_CACHE CMAKE_C_LINK_FLAGS CMAKE_CXX_LINK_FLAGS) foreach(VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE}) - set(${VAR_TO_FORCE} "${${VAR_TO_FORCE}}" CACHE STRING "") + set(${VAR_TO_FORCE} + "${${VAR_TO_FORCE}}" + CACHE STRING "") endforeach() set(CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set (CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") +set(CMAKE_SHARED_LINKER_FLAGS + "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib ${HEADER_PAD}") set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle ${HEADER_PAD}") set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") -# Hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old -# build tree (where install_name_tool was hardcoded) and where -# CMAKE_INSTALL_NAME_TOOL isn't in the cache and still cmake didn't fail in -# CMakeFindBinUtils.cmake (because it isn't rerun) hardcode -# CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did +# Hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree +# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the +# cache and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) +# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did # before, Alex. -if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) +if(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) -endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) +endif(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) # Set the find root to the iOS developer roots and to user defined paths. -set(CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_OSX_SYSROOT} - ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root" FORCE) +set(CMAKE_FIND_ROOT_PATH + ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_OSX_SYSROOT} ${CMAKE_PREFIX_PATH} + CACHE STRING "iOS find search path root" FORCE) # Default to searching for frameworks first. set(CMAKE_FIND_FRAMEWORK FIRST) # Set up the default search directories for frameworks. set(CMAKE_SYSTEM_FRAMEWORK_PATH - ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks - ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks - ${CMAKE_OSX_SYSROOT}/Developer/Library/Frameworks) + ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks + ${CMAKE_OSX_SYSROOT}/System/Library/PrivateFrameworks + ${CMAKE_OSX_SYSROOT}/Developer/Library/Frameworks) # Only search the specified iOS SDK, not the remainder of the host filesystem. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) @@ -464,12 +497,14 @@ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # This little macro lets you set any XCode specific property. macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION) set(XCODE_RELVERSION_I "${XCODE_RELVERSION}") - if (XCODE_RELVERSION_I STREQUAL "All") - set_property(TARGET ${TARGET} PROPERTY - XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}") + if(XCODE_RELVERSION_I STREQUAL "All") + set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} + "${XCODE_VALUE}") else() - set_property(TARGET ${TARGET} PROPERTY - XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}") + set_property( + TARGET ${TARGET} + PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] + "${XCODE_VALUE}") endif() endmacro(set_xcode_property) # This macro lets you find executable programs on the host system. diff --git a/toolchains/riscv64-linux-gnu.toolchain.cmake b/toolchains/riscv64-linux-gnu.toolchain.cmake index d90ad0c4..3100b0de 100644 --- a/toolchains/riscv64-linux-gnu.toolchain.cmake +++ b/toolchains/riscv64-linux-gnu.toolchain.cmake @@ -3,16 +3,18 @@ set(CMAKE_SYSTEM_PROCESSOR riscv64) set(RISCV_CROSS_BUILD_ARCH riscv64) if(DEFINED ENV{RISCV_TOOLCHAIN_ROOT}) - file(TO_CMAKE_PATH $ENV{RISCV_TOOLCHAIN_ROOT} RISCV_TOOLCHAIN_ROOT) + file(TO_CMAKE_PATH $ENV{RISCV_TOOLCHAIN_ROOT} RISCV_TOOLCHAIN_ROOT) else() - message(FATAL_ERROR "RISCV_TOOLCHAIN_ROOT env must be defined") + message(FATAL_ERROR "RISCV_TOOLCHAIN_ROOT env must be defined") endif() -set(RISCV_TOOLCHAIN_ROOT ${RISCV_TOOLCHAIN_ROOT} CACHE STRING "root path to riscv toolchain") +set(RISCV_TOOLCHAIN_ROOT + ${RISCV_TOOLCHAIN_ROOT} + CACHE STRING "root path to riscv toolchain") set(CMAKE_C_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-linux-gnu-gcc") set(CMAKE_CXX_COMPILER "${RISCV_TOOLCHAIN_ROOT}/bin/riscv64-unknown-linux-gnu-g++") set(CMAKE_FIND_ROOT_PATH "${RISCV_TOOLCHAIN_ROOT}/riscv64-unknown-linux-gnu") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) \ No newline at end of file +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/tools/mlir/mgb-file-check/CMakeLists.txt b/tools/mlir/mgb-file-check/CMakeLists.txt index f1310670..bd7bd02d 100644 --- a/tools/mlir/mgb-file-check/CMakeLists.txt +++ b/tools/mlir/mgb-file-check/CMakeLists.txt @@ -1,8 +1,8 @@ add_custom_command( - OUTPUT link_sh - COMMAND ${CMAKE_COMMAND} -E create_symlink - ${PROJECT_SOURCE_DIR}/tools/mlir/mgb-file-check/mgb-file-check.sh - ${PROJECT_BINARY_DIR}/tools/mlir/mgb-file-check/mgb-file-check -) + OUTPUT link_sh + COMMAND + ${CMAKE_COMMAND} -E create_symlink + ${PROJECT_SOURCE_DIR}/tools/mlir/mgb-file-check/mgb-file-check.sh + ${PROJECT_BINARY_DIR}/tools/mlir/mgb-file-check/mgb-file-check) -add_custom_target(mgb-file-check DEPENDS link_sh) \ No newline at end of file +add_custom_target(mgb-file-check DEPENDS link_sh) diff --git a/tools/mlir/mgb-opt/CMakeLists.txt b/tools/mlir/mgb-opt/CMakeLists.txt index 26f1a873..2501b2c0 100644 --- a/tools/mlir/mgb-opt/CMakeLists.txt +++ b/tools/mlir/mgb-opt/CMakeLists.txt @@ -1,20 +1,18 @@ get_property(dialect_libs GLOBAL PROPERTY MLIR_DIALECT_LIBS) get_property(conversion_libs GLOBAL PROPERTY MLIR_CONVERSION_LIBS) set(LIBS - ${dialect_libs} - ${conversion_libs} - LLVMSupport - MLIROptLib - MLIRIR - MLIRPass - MLIRSupport - ) + ${dialect_libs} + ${conversion_libs} + LLVMSupport + MLIROptLib + MLIRIR + MLIRPass + MLIRSupport) add_executable(mgb-opt mgb-opt.cpp) target_include_directories( - mgb-opt - PRIVATE ${MLIR_LLVM_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/jit/include - ${PROJECT_BINARY_DIR}/src/jit/include) + mgb-opt PRIVATE ${MLIR_LLVM_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/jit/include + ${PROJECT_BINARY_DIR}/src/jit/include) add_dependencies(mgb-opt mgb_dialect)