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

feat(cmake/cross_build/host_build/windows): imp windows

host build and cross build

now cmake status:
a: host build
    1: windows build -- ok
    2: linux build -- ok
    3: macos build -- ok
b: cross build
    1: windows cross build arm-android -- ok
    2: windows cross build arm-linux   -- ok
    3: linux cross build arm-android -- ok
    4: linux cross build arm-linux   -- ok
    5: macos cross build arm-android -- ok
    6: macos cross build arm-linux   -- ok
    7: macos cross build ios         -- ok
GitOrigin-RevId: f7f376fe8c522410568c304a62310df823c70b65
上级 cdefe90e
...@@ -7,7 +7,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) ...@@ -7,7 +7,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
if(NOT MSVC AND NOT APPLE) if(NOT MSVC AND NOT APPLE AND NOT WIN32)
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -D <TARGET>") set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -D <TARGET>")
...@@ -72,7 +72,7 @@ if(CMAKE_TOOLCHAIN_FILE) ...@@ -72,7 +72,7 @@ if(CMAKE_TOOLCHAIN_FILE)
endif() endif()
if(${MGE_ARCH} STREQUAL "AUTO") if(${MGE_ARCH} STREQUAL "AUTO")
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
set(MGE_ARCH "x86_64") set(MGE_ARCH "x86_64")
elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686") elseif(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386" OR ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686")
set(MGE_ARCH "i386") set(MGE_ARCH "i386")
...@@ -85,8 +85,42 @@ if(${MGE_ARCH} STREQUAL "AUTO") ...@@ -85,8 +85,42 @@ if(${MGE_ARCH} STREQUAL "AUTO")
endif() endif()
endif() endif()
if(MSVC OR WIN32)
add_compile_definitions(NOMINMAX=1 _USE_MATH_DEFINES=1 WIN32=1)
message("-- into windows build...")
message(" -- CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}")
if (${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()
# add flags for sse/avx for X86
set(WIN_FLAGS "-msse4.2 -mavx -mavx2")
# 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 /D_WIN32_WINNT=0x0601")
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}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
if(ANDROID)
set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG")
else()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif()
endif()
CHECK_CXX_COMPILER_FLAG(-fuse-ld=gold CXX_SUPPORT_GOLD) CHECK_CXX_COMPILER_FLAG(-fuse-ld=gold CXX_SUPPORT_GOLD)
if(CXX_SUPPORT_GOLD AND NOT ANDROID AND NOT APPLE) if(CXX_SUPPORT_GOLD AND NOT ANDROID AND NOT APPLE AND NOT MSVC AND NOT WIN32)
message("-- Using GNU gold linker.") message("-- Using GNU gold linker.")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
...@@ -188,18 +222,6 @@ if(MGB_WITH_FLATBUFFERS) ...@@ -188,18 +222,6 @@ if(MGB_WITH_FLATBUFFERS)
include(cmake/flatbuffers.cmake) include(cmake/flatbuffers.cmake)
endif() endif()
if(MSVC)
add_compile_definitions(NOMINMAX=1 _USE_MATH_DEFINES=1 WIN32=1)
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
if(ANDROID)
set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG")
else()
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif()
endif()
if(MGE_WITH_CUDA) if(MGE_WITH_CUDA)
include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) include_directories(${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})
foreach(path ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES}) foreach(path ${CMAKE_CUDA_HOST_IMPLICIT_LINK_DIRECTORIES})
...@@ -393,6 +415,12 @@ else() ...@@ -393,6 +415,12 @@ else()
set(MGB_ENABLE_DEBUG_UTIL 0) set(MGB_ENABLE_DEBUG_UTIL 0)
endif() endif()
# FIXME: remove this after imp DEBUG UTIL for windows
if(MSVC OR WIN32)
set(MGB_ENABLE_DEBUG_UTIL 0)
message(" -- disable MGB_ENABLE_DEBUG_UTIL in windows build")
endif()
# TensorRT # TensorRT
set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT}) set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT})
......
include(ExternalProject) option(DNNL_BUILD_TESTS "" OFF)
include(GNUInstallDirs) option(DNNL_BUILD_EXAMPLES "" OFF)
set(DNNL_LIBRARY_TYPE STATIC CACHE STRING "config dnnl to STATIC")
set(MKLDNN_DIR "${PROJECT_SOURCE_DIR}/third_party/intel-mkl-dnn" CACHE STRING "mkldnn directory") # we do not want to use OMP now, so config to CPU mode
set(MKLDNN_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/intel-mkl-dnn) # if set to OMP, some dnnl algo will be more fast
set(MKLDNN_LIB ${MKLDNN_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libdnnl.a) set(DNNL_CPU_RUNTIME DNNL_RUNTIME_SEQ CACHE STRING "config dnnl to DNNL_RUNTIME_SEQ")
if(MGE_BLAS STREQUAL "MKL") if(MGE_BLAS STREQUAL "MKL")
list(APPEND MKLDNN_BUILD_ARGS -D_DNNL_USE_MKL=ON -DMKLROOT=${MKL_ROOT_DIR}) option(_DNNL_USE_MKL "" ON)
set(MKLROOT ${MKL_ROOT_DIR} CACHE STRING "MKL ROOT FOR DNNL")
if (WIN32)
set(MKLLIB "mkl_core" CACHE STRING "MKLLIB NAME FOR DNNL")
else()
set(MKLLIB "libmkl_core.a" CACHE STRING "MKLLIB NAME FOR DNNL")
endif()
# workround for DNNL link failed, we do not want to modify
# dnnl MKL.cmake of intel-mkl-dnn when include intel-mkl-dnn
# via add_subdirectory api
link_directories(${MKL_ROOT_DIR}/lib)
else() else()
list(APPEND MKLDNN_BUILD_ARGS -D_DNNL_USE_MKL=OFF) option(_DNNL_USE_MKL "" OFF)
endif() endif()
ExternalProject_add( set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter -Wno-extra")
mkl_dnn set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-extra")
SOURCE_DIR ${MKLDNN_DIR} add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/intel-mkl-dnn)
PREFIX ${MKLDNN_BUILD_DIR}
CMAKE_ARGS -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DDNNL_BUILD_TESTS=OFF -DDNNL_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX=${MKLDNN_BUILD_DIR} -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} -DDNNL_LIBRARY_TYPE=STATIC -DDNNL_CPU_RUNTIME=DNNL_RUNTIME_SEQ ${MKLDNN_BUILD_ARGS}
BUILD_BYPRODUCTS ${MKLDNN_LIB}
)
set(MKLDNN_INC ${MKLDNN_BUILD_DIR}/include)
file(MAKE_DIRECTORY ${MKLDNN_INC})
add_library(libmkl_dnn STATIC IMPORTED GLOBAL)
add_dependencies(libmkl_dnn mkl_dnn)
set_target_properties(
libmkl_dnn PROPERTIES
IMPORTED_LOCATION ${MKLDNN_LIB}
INTERFACE_INCLUDE_DIRECTORIES ${MKLDNN_INC}
)
...@@ -2,8 +2,24 @@ if (MGE_USE_SYSTEM_LIB) ...@@ -2,8 +2,24 @@ if (MGE_USE_SYSTEM_LIB)
find_package(FlatBuffers REQUIRED) find_package(FlatBuffers REQUIRED)
return() return()
endif() endif()
if(MSVC OR WIN32)
message("-- 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")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLATC_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLATC_FLAGS}")
endif()
option(FLATBUFFERS_BUILD_TESTS "" OFF) option(FLATBUFFERS_BUILD_TESTS "" OFF)
add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/flatbuffers add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/flatbuffers
${CMAKE_CURRENT_BINARY_DIR}/flatbuffers ${CMAKE_CURRENT_BINARY_DIR}/flatbuffers
EXCLUDE_FROM_ALL) EXCLUDE_FROM_ALL)
\ No newline at end of file
...@@ -2,6 +2,8 @@ find_path(MKL_ROOT_DIR ...@@ -2,6 +2,8 @@ find_path(MKL_ROOT_DIR
include/mkl_cblas.h include/mkl_cblas.h
PATHS PATHS
${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH} ${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
$ENV{MKLDIR} $ENV{MKLDIR}
/opt/intel/mkl/*/ /opt/intel/mkl/*/
/opt/intel/cmkl/*/ /opt/intel/cmkl/*/
...@@ -23,20 +25,20 @@ find_path(MKL_INCLUDE_DIR ...@@ -23,20 +25,20 @@ find_path(MKL_INCLUDE_DIR
option(MGE_MKL_USE_STATIC "Build MegEngine with static MKL" ON) option(MGE_MKL_USE_STATIC "Build MegEngine with static MKL" ON)
if(MGE_MKL_USE_STATIC) if(MGE_MKL_USE_STATIC)
find_library(MKL_CORE_LIBRARY find_library(MKL_CORE_LIBRARY
NAMES libmkl_core.a libmkl_core.lib NAMES libmkl_core.a mkl_core.lib
PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
find_library(MKL_SEQUENTIAL_LIBRARY find_library(MKL_SEQUENTIAL_LIBRARY
NAMES libmkl_sequential.a libmkl_sequential.lib NAMES libmkl_sequential.a mkl_sequential.lib
PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
if(${MGE_ARCH} STREQUAL "x86_64") if(${MGE_ARCH} STREQUAL "x86_64")
find_library(MKL_IPL_LIBRARY find_library(MKL_IPL_LIBRARY
NAMES libmkl_intel_ilp64.a libmkl_intel_ilp64.lib NAMES libmkl_intel_ilp64.a mkl_intel_ilp64.lib
PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/) PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
elseif(${MGE_ARCH} STREQUAL "x86_32") elseif(${MGE_ARCH} STREQUAL "i386")
find_library(MKL_IPL_LIBRARY find_library(MKL_IPL_LIBRARY
NAMES libmkl_intel_32.a libmkl_intel_32.lib 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/) PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
endif() endif()
......
...@@ -11,7 +11,7 @@ add_custom_command( ...@@ -11,7 +11,7 @@ add_custom_command(
COMMAND ${PYTHON_EXECUTABLE} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS} COMMAND ${PYTHON_EXECUTABLE} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS}
${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_defs.h
COMMAND ${PYTHON_EXECUTABLE} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS} COMMAND ${PYTHON_EXECUTABLE} ${OPR_PARAM_DEFS_SCRIPT} ${OPR_PARAM_DEFS_SRCS}
/dev/null --write-cppjson ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h tmp_unuse.log --write-cppjson ${OPR_PARAM_DEFS_OUT_DIR}/megdnn/opr_param_json.h
DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT} DEPENDS ${OPR_PARAM_DEFS_SRCS} ${OPR_PARAM_DEFS_SCRIPT}
VERBATIM VERBATIM
) )
......
...@@ -189,6 +189,8 @@ ...@@ -189,6 +189,8 @@
#include <climits> #include <climits>
#include <cmath> #include <cmath>
#include <cstring> #include <cstring>
#include <ostream>
#include <istream>
#if HALF_ENABLE_CPP11_TYPE_TRAITS #if HALF_ENABLE_CPP11_TYPE_TRAITS
#include <type_traits> #include <type_traits>
#endif #endif
......
...@@ -67,7 +67,7 @@ endif() ...@@ -67,7 +67,7 @@ endif()
target_compile_definitions(megdnn INTERFACE ${LIBMEGDNN_DEF}) target_compile_definitions(megdnn INTERFACE ${LIBMEGDNN_DEF})
if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64") if(MGE_WITH_MKLDNN AND ${MGE_ARCH} STREQUAL "x86_64")
target_link_libraries(megdnn libmkl_dnn) target_link_libraries(megdnn dnnl)
endif() endif()
target_link_libraries(megdnn ${MGE_CUDA_LIBS}) target_link_libraries(megdnn ${MGE_CUDA_LIBS})
target_link_libraries(megdnn ${MGE_BLAS_LIBS}) target_link_libraries(megdnn ${MGE_BLAS_LIBS})
......
...@@ -18,14 +18,15 @@ ...@@ -18,14 +18,15 @@
#include "megdnn/arch.h" #include "megdnn/arch.h"
#ifdef _MSC_VER #if defined(_MSC_VER) || defined(__MINGW32__)
#include "malloc.h" #include "malloc.h"
#endif #endif
#if defined(__ANDROID__) || defined(ANDROID) #if defined(__ANDROID__) || defined(ANDROID)
#include "malloc.h" #include "malloc.h"
#define HAS_MEMALIGN #define HAS_MEMALIGN
#elif !defined(_MSC_VER) #elif !defined(_MSC_VER) && !defined(__MINGW32__)
#define HAS_POSIX_MEMALIGN #define HAS_POSIX_MEMALIGN
#endif #endif
...@@ -77,7 +78,7 @@ public: ...@@ -77,7 +78,7 @@ public:
return result; return result;
#elif defined(HAS_MEMALIGN) #elif defined(HAS_MEMALIGN)
return (_Tp*)memalign(_align, __n * sizeof(_Tp)); return (_Tp*)memalign(_align, __n * sizeof(_Tp));
#elif defined(_MSC_VER) #elif defined(_MSC_VER) || defined(__MINGW32__)
return (_Tp*)_aligned_malloc(__n * sizeof(_Tp), _align); return (_Tp*)_aligned_malloc(__n * sizeof(_Tp), _align);
#else #else
#warning \ #warning \
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "src/x86/utils.h" #include "src/x86/utils.h"
#include <immintrin.h> #include <immintrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avxintrin.h> #include <avxintrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>
#endif #endif
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include "src/x86/avx_helper.h" #include "src/x86/avx_helper.h"
#include <x86intrin.h> #include <x86intrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avxintrin.h> #include <avxintrin.h>
#include <smmintrin.h> #include <smmintrin.h>
#include <avx2intrin.h> #include <avx2intrin.h>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include "src/x86/avx_helper.h" #include "src/x86/avx_helper.h"
#include <x86intrin.h> #include <x86intrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avx2intrin.h> #include <avx2intrin.h>
#include <avxintrin.h> #include <avxintrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "src/common/unroll_macro.h" #include "src/common/unroll_macro.h"
#include "src/x86/conv_bias/int8/common_helper.h" #include "src/x86/conv_bias/int8/common_helper.h"
#include "src/x86/elemwise_op.h" #include "src/x86/elemwise_op.h"
#ifdef WIN32CMAKE #ifdef WIN32
#include <smmintrin.h> #include <smmintrin.h>
#endif #endif
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <immintrin.h> #include <immintrin.h>
#include "src/common/unroll_macro.h" #include "src/common/unroll_macro.h"
#include "megdnn/arch.h" #include "megdnn/arch.h"
#ifdef WIN32CMAKE #ifdef WIN32
#include <smmintrin.h> #include <smmintrin.h>
#endif #endif
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
#include "megdnn/arch.h" #include "megdnn/arch.h"
#include "megdnn/basic_types.h" #include "megdnn/basic_types.h"
#include <immintrin.h> #include <immintrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avxintrin.h> #include <avxintrin.h>
#include <smmintrin.h> #include <smmintrin.h>
#include <avx2intrin.h> #include <avx2intrin.h>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*/ */
#include <immintrin.h> #include <immintrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avxintrin.h> #include <avxintrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>
#endif #endif
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#pragma once #pragma once
#include <immintrin.h> #include <immintrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avx2intrin.h> #include <avx2intrin.h>
#include <avxintrin.h> #include <avxintrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#pragma once #pragma once
#include <x86intrin.h> #include <x86intrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avxintrin.h> #include <avxintrin.h>
#include <smmintrin.h> #include <smmintrin.h>
#include <avx2intrin.h> #include <avx2intrin.h>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#pragma once #pragma once
#include <immintrin.h> #include <immintrin.h>
#ifdef WIN32CMAKE #ifdef WIN32
#include <avx2intrin.h> #include <avx2intrin.h>
#include <avxintrin.h> #include <avxintrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>
......
# build support status
## host build
* windows build (ok)
* linux build (ok)
* macos build (ok)
## cross build
* windows cross build arm-android (ok)
* windows cross build arm-linux (ok)
* linux cross build arm-android (ok)
* linux cross build arm-linux (ok)
* macos cross build arm-android (ok)
* macos cross build arm-linux (ok but experimental)
* macos cross build ios (ok)
# build env prepare
## package install
### windows host build
```
1: installl Visual Studio (need support LLVM/clang-cl), eg 2019
clang-cl 9 linker have crash issue, pls install 7/8/10
2: install extension of VS: python/cmake/LLVM
3: CUDA env(if enable CUDA), version detail: project_root_dir/README.md
```
### linux host build
```
1: cmake, which version > 3.14.4
2: gcc/g++, which version > 6
3: install build-essential git git-lfs gfortran libgfortran-6-dev autoconf gnupg flex bison gperf curl
4: zlib1g-dev gcc-multilib g++-multilib lib32ncurses5-dev libxml2-utils xsltproc unzip libtool:
5: librdmacm-dev rdmacm-utils python3-dev swig python3-numpy texinfo
6: CUDA env(if enable CUDA), version detail: project_root_dir/README.md
```
### macos host build
```
1: cmake, which version > 3.14.4
2: install brew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
3: brew install python python3 swig coreutils
4: install at least xcode command line tool: https://developer.apple.com/xcode/
5: about cuda: we do not support CUDA on macos
```
### cross build for arm-android
now we support windows/linux/macos cross build to arm-android
```
1: install unix-like tools, eg MSYS if you are using windows(recommend)
we also support CMD.exe or powershell on windows
1: download NDK from https://developer.android.google.cn/ndk/downloads/
for diff OS platform package, suggested NDK20 or NDK21
2: export NDK_ROOT=NDK_DIR at bash-like env
3: config NDK_ROOT to PATH env at windows control board if use CMD/powershell
```
### cross build for arm-linux
now we support arm-linux on linux and windows fully, also experimental on MACOS
```
1: download toolchains on https://releases.linaro.org/components/toolchain/gcc-linaro/
or https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads
if use windows or linux
2: download https://github.com/thinkski/osx-arm-linux-toolchains if use MACOS
```
### cross build for ios
now we only support cross build to ios on MACOS
```
1: install full xcode: https://developer.apple.com/xcode/
```
## third-party code prepare
### with bash env(linux/macos/unix-like tools on windows, eg: msys etc)
```
./third_party/prepare.sh
./third_party/install-mkl.sh
```
### windows shell env(eg: cmd, powershell etc)
infact if you can use git command on windows, which means you always install
bash.exe at the same dir of git.exe, find it, then you can prepare third-party
code by command:
```
bash.exe ./third_party/prepare.sh
bash.exe ./third_party/install-mkl.sh
```
# how to build
## with bash env(linux/macos/unix-like tools on windows, eg: msys etc)
```
1: host build just use scripts:scripts/cmake-build/host_build.sh
2: cross build to arm-android: scripts/cmake-build/cross_build_android_arm_inference.sh
3: cross build to arm-linux: scripts/cmake-build/cross_build_linux_arm_inference.sh
4: cross build to ios: scripts/cmake-build/cross_build_ios_arm_inference.sh
```
## windows shell env(eg: cmd, powershell etc)
```
1: we do not provide BAT for cmd/powershlel scripts, BUT u can refs for scripts/cmake-build/*.sh
```
## Visual Studio GUI(only for windows host)
```
1: import megengine src to Visual Studio as a project
2: right click CMakeLists.txt, choose config 'cmake config'
choose clang_cl_x86 or clang_cl_x64
3: config other CMAKE config, eg, CUDA ON OR OFF
```
# other arm-linux-like board support
it`s easy to support other customized arm-linux-like board, example:
1: HISI 3516/3519, infact u can just use toolchains from arm developer or linaro
then call scripts/cmake-build/cross_build_linux_arm_inference.sh to build a ELF
binary, or if you get HISI official toolschain, you just need modify CMAKE_CXX_COMPILER
and CMAKE_C_COMPILER in toolchains/arm-linux-gnueabi* to a real name
2: about Raspberry, just use scripts/cmake-build/cross_build_linux_arm_inference.sh
...@@ -76,13 +76,18 @@ echo "ARCH: $ARCH" ...@@ -76,13 +76,18 @@ echo "ARCH: $ARCH"
echo "----------------------------------------------------" echo "----------------------------------------------------"
READLINK=readlink READLINK=readlink
MAKEFILE_TYPE="Unix"
OS=$(uname -s) OS=$(uname -s)
if [ $OS = "Darwin" ];then if [ $OS = "Darwin" ];then
READLINK=greadlink READLINK=greadlink
elif [[ $OS =~ "NT" ]]; then
echo "BUILD in NT ..."
MAKEFILE_TYPE="Unix"
fi fi
SRC_DIR=$($READLINK -f "`dirname $0`/../../") SRC_DIR=$($READLINK -f "`dirname $0`/../../")
source $SRC_DIR/scripts/cmake-build/utils/host_build_flatc.sh
if [ -z $NDK_ROOT ];then if [ -z $NDK_ROOT ];then
echo "can not find NDK_ROOT env, pls export you NDK root dir to NDK_ROOT" echo "can not find NDK_ROOT env, pls export you NDK root dir to NDK_ROOT"
...@@ -99,6 +104,7 @@ function cmake_build() { ...@@ -99,6 +104,7 @@ function cmake_build() {
echo "build type: $BUILD_TYPE" echo "build type: $BUILD_TYPE"
echo "build ABI: $BUILD_ABI" echo "build ABI: $BUILD_ABI"
echo "build native level: $BUILD_NATIVE_LEVEL" echo "build native level: $BUILD_NATIVE_LEVEL"
echo "BUILD MAKEFILE_TYPE: $MAKEFILE_TYPE"
if [ -e $BUILD_DIR ];then if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR" echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR rm -rf $BUILD_DIR
...@@ -112,7 +118,8 @@ function cmake_build() { ...@@ -112,7 +118,8 @@ function cmake_build() {
mkdir -p $BUILD_DIR mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR mkdir -p $INSTALL_DIR
cd $BUILD_DIR cd $BUILD_DIR
cmake -DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \ cmake -G "$MAKEFILE_TYPE Makefiles" \
-DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \
-DANDROID_NDK="$NDK_ROOT" \ -DANDROID_NDK="$NDK_ROOT" \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DANDROID_ABI=$BUILD_ABI \ -DANDROID_ABI=$BUILD_ABI \
...@@ -129,34 +136,7 @@ function cmake_build() { ...@@ -129,34 +136,7 @@ function cmake_build() {
make install/strip make install/strip
} }
function build_flatc() { build_flatc $SRC_DIR
BUILD_DIR=$SRC_DIR/build_dir/host_flatc/build
INSTALL_DIR=$BUILD_DIR/../install
if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR
fi
if [ -e $INSTALL_DIR ];then
echo "clean old dir: $INSTALL_DIR"
rm -rf $INSTALL_DIR
fi
echo "create build dir"
mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR
cd $BUILD_DIR
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DFLATBUFFERS_BUILD_TESTS=OFF \
-DFLATBUFFERS_BUILD_FLATHASH=OFF \
-DFLATBUFFERS_BUILD_FLATLIB=OFF \
-DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \
$SRC_DIR/third_party/flatbuffers
make -j$(nproc)
make install/strip
}
build_flatc
api_level=16 api_level=16
abi="armeabi-v7a with NEON" abi="armeabi-v7a with NEON"
......
...@@ -86,6 +86,7 @@ else ...@@ -86,6 +86,7 @@ else
fi fi
SRC_DIR=$($READLINK -f "`dirname $0`/../../") SRC_DIR=$($READLINK -f "`dirname $0`/../../")
source $SRC_DIR/scripts/cmake-build/utils/host_build_flatc.sh
function cmake_build() { function cmake_build() {
BUILD_DIR=$SRC_DIR/build_dir/apple/$3/$4/$1/$BUILD_TYPE/build BUILD_DIR=$SRC_DIR/build_dir/apple/$3/$4/$1/$BUILD_TYPE/build
...@@ -133,34 +134,7 @@ function cmake_build() { ...@@ -133,34 +134,7 @@ function cmake_build() {
make install make install
} }
function build_flatc() { build_flatc $SRC_DIR
BUILD_DIR=$SRC_DIR/build_dir/host_flatc/build
INSTALL_DIR=$BUILD_DIR/../install
if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR
fi
if [ -e $INSTALL_DIR ];then
echo "clean old dir: $INSTALL_DIR"
rm -rf $INSTALL_DIR
fi
echo "create build dir"
mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR
cd $BUILD_DIR
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DFLATBUFFERS_BUILD_TESTS=OFF \
-DFLATBUFFERS_BUILD_FLATHASH=OFF \
-DFLATBUFFERS_BUILD_FLATLIB=OFF \
-DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \
$SRC_DIR/third_party/flatbuffers
make -j$(nproc)
make install/strip
}
build_flatc
# refs for ../../toolchains/ios.toolchain.cmake # refs for ../../toolchains/ios.toolchain.cmake
# to config this, if u want to build other, # to config this, if u want to build other,
......
...@@ -76,13 +76,19 @@ echo "ARCH: $ARCH" ...@@ -76,13 +76,19 @@ echo "ARCH: $ARCH"
echo "----------------------------------------------------" echo "----------------------------------------------------"
READLINK=readlink READLINK=readlink
MAKEFILE_TYPE="Unix"
OS=$(uname -s) OS=$(uname -s)
if [ $OS = "Darwin" ];then if [ $OS = "Darwin" ];then
READLINK=greadlink READLINK=greadlink
elif [[ $OS =~ "NT" ]]; then
echo "BUILD in NT ..."
MAKEFILE_TYPE="Unix"
fi fi
SRC_DIR=$($READLINK -f "`dirname $0`/../../") SRC_DIR=$($READLINK -f "`dirname $0`/../../")
source $SRC_DIR/scripts/cmake-build/utils/host_build_flatc.sh
function cmake_build() { function cmake_build() {
BUILD_DIR=$SRC_DIR/build_dir/gnu-linux/$1/$BUILD_TYPE/build BUILD_DIR=$SRC_DIR/build_dir/gnu-linux/$1/$BUILD_TYPE/build
INSTALL_DIR=$BUILD_DIR/../install INSTALL_DIR=$BUILD_DIR/../install
...@@ -91,6 +97,7 @@ function cmake_build() { ...@@ -91,6 +97,7 @@ function cmake_build() {
echo "install dir: $INSTALL_DIR" echo "install dir: $INSTALL_DIR"
echo "build type: $BUILD_TYPE" echo "build type: $BUILD_TYPE"
echo "build toolchain: $TOOLCHAIN" echo "build toolchain: $TOOLCHAIN"
echo "BUILD MAKEFILE_TYPE: $MAKEFILE_TYPE"
if [ -e $BUILD_DIR ];then if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR" echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR rm -rf $BUILD_DIR
...@@ -104,7 +111,8 @@ function cmake_build() { ...@@ -104,7 +111,8 @@ function cmake_build() {
mkdir -p $BUILD_DIR mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR mkdir -p $INSTALL_DIR
cd $BUILD_DIR cd $BUILD_DIR
cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \ cmake -G "$MAKEFILE_TYPE Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DMGE_INFERENCE_ONLY=ON \ -DMGE_INFERENCE_ONLY=ON \
-DMGE_WITH_CUDA=OFF \ -DMGE_WITH_CUDA=OFF \
...@@ -118,34 +126,7 @@ function cmake_build() { ...@@ -118,34 +126,7 @@ function cmake_build() {
make install/strip make install/strip
} }
function build_flatc() { build_flatc $SRC_DIR
BUILD_DIR=$SRC_DIR/build_dir/host_flatc/build
INSTALL_DIR=$BUILD_DIR/../install
if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR
fi
if [ -e $INSTALL_DIR ];then
echo "clean old dir: $INSTALL_DIR"
rm -rf $INSTALL_DIR
fi
echo "create build dir"
mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR
cd $BUILD_DIR
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DFLATBUFFERS_BUILD_TESTS=OFF \
-DFLATBUFFERS_BUILD_FLATHASH=OFF \
-DFLATBUFFERS_BUILD_FLATLIB=OFF \
-DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \
$SRC_DIR/third_party/flatbuffers
make -j$(nproc)
make install/strip
}
build_flatc
toolchain=null toolchain=null
if [ "$ARCH" = "arm64-v8a" ]; then if [ "$ARCH" = "arm64-v8a" ]; then
......
...@@ -7,6 +7,8 @@ function usage() { ...@@ -7,6 +7,8 @@ function usage() {
echo "-d : Build with Debug mode, defaule Release mode" echo "-d : Build with Debug mode, defaule Release mode"
echo "-c : Build with CUDA, default without CUDA" echo "-c : Build with CUDA, default without CUDA"
echo "-t : Build with training mode, default inference only" echo "-t : Build with training mode, default inference only"
echo "-m : Build with m32 mode(only for windows build), default m64"
echo "-h : show usage"
echo "example: $0 -d" echo "example: $0 -d"
exit -1 exit -1
} }
...@@ -14,8 +16,11 @@ function usage() { ...@@ -14,8 +16,11 @@ function usage() {
BUILD_TYPE=Release BUILD_TYPE=Release
MGE_WITH_CUDA=OFF MGE_WITH_CUDA=OFF
MGE_INFERENCE_ONLY=ON MGE_INFERENCE_ONLY=ON
MGE_WINDOWS_BUILD_ARCH=x64
MGE_WINDOWS_BUILD_MARCH=m64
MGE_ARCH=x86_64
while getopts "dct" arg while getopts "hdctm" arg
do do
case $arg in case $arg in
d) d)
...@@ -30,6 +35,16 @@ do ...@@ -30,6 +35,16 @@ do
echo "Build with training mode" echo "Build with training mode"
MGE_INFERENCE_ONLY=OFF MGE_INFERENCE_ONLY=OFF
;; ;;
h)
echo "show usage"
usage
;;
m)
echo "build for m32(only use for windows)"
MGE_WINDOWS_BUILD_ARCH=x86
MGE_WINDOWS_BUILD_MARCH=m32
MGE_ARCH=i386
;;
?) ?)
echo "unkonw argument" echo "unkonw argument"
usage usage
...@@ -51,6 +66,8 @@ if [ $OS = "Darwin" ];then ...@@ -51,6 +66,8 @@ if [ $OS = "Darwin" ];then
echo "MACOS DO NOT SUPPORT TensorRT, ABORT NOW!!" echo "MACOS DO NOT SUPPORT TensorRT, ABORT NOW!!"
exit -1 exit -1
fi fi
elif [[ $OS =~ "NT" ]]; then
echo "BUILD in NT ..."
fi fi
SRC_DIR=$($READLINK -f "`dirname $0`/../../") SRC_DIR=$($READLINK -f "`dirname $0`/../../")
...@@ -88,7 +105,111 @@ function cmake_build() { ...@@ -88,7 +105,111 @@ function cmake_build() {
make -j$(nproc) make -j$(nproc)
make install/strip make install/strip
} }
function windows_env_err() {
echo "check windows env failed!!"
echo "please install LLVM/clang-cl/cmake/python at Visual Studio Extensions"
exit -1
}
function prepare_env_for_windows_build() {
echo "check Visual Studio install path env..."
if [[ -z $VS_PATH ]];then
echo "can not find visual_studio_path env, pls export you Visual Studio install dir to VS_PATH"
echo "examle for export Visual Studio 2019 Enterprise default install dir"
echo "export VS_PATH=/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2019/Enterprise"
exit -1
fi
echo $VS_PATH
cmake_build $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE # only use cmake/clang-cl/Ninja install from Visual Studio, if not, may build failed
# some user env may install cmake/clang-cl/Ninja at MSYS env, so we put Visual Studio
# path at the head of PATH, and check the valid
echo "check cmake install..."
export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/:$PATH
which cmake
cmake_loc=`which cmake`
if [[ $cmake_loc =~ "Visual" ]]; then
echo "cmake valid ..."
else
echo "cmake Invalid: ..."
windows_env_err
fi
echo "check clang-cl install..."
export PATH=$VS_PATH/VC/Tools/Llvm/bin/:$PATH
which clang-cl
clang_loc=`which clang-cl`
if [[ $clang_loc =~ "Visual" ]]; then
echo "clang-cl valid ..."
else
echo "clang-cl Invalid: ..."
windows_env_err
fi
echo "check Ninja install..."
export PATH=$VS_PATH/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/:$PATH
which Ninja
ninja_loc=`which Ninja`
if [[ $ninja_loc =~ "Visual" ]]; then
echo "Ninja valid ..."
else
echo "Ninja Invalid: ..."
windows_env_er
fi
export PATH=$VS_PATH/VC/Auxiliary/Build:$PATH
echo "put vcvarsall.bat path to PATH env.."
}
function cmake_build_windows() {
# windows do not support long path, so we cache the BUILD_DIR ASAP
prepare_env_for_windows_build
BUILD_DIR=$SRC_DIR/build_dir/host/build
INSTALL_DIR=$BUILD_DIR/../install
MGE_WITH_CUDA=$1
MGE_INFERENCE_ONLY=$2
BUILD_TYPE=$3
echo "build dir: $BUILD_DIR"
echo "install dir: $INSTALL_DIR"
echo "build type: $BUILD_TYPE"
echo "MGE_WITH_CUDA: $MGE_WITH_CUDA"
echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY"
if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR
fi
if [ -e $INSTALL_DIR ];then
echo "clean old dir: $INSTALL_DIR"
rm -rf $INSTALL_DIR
fi
echo "create build dir"
mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR
cd $BUILD_DIR
echo "now try build windows native with cmake/clang-ci/Ninja/Visual Studio ....."
export CFLAGS=-$MGE_WINDOWS_BUILD_MARCH
export CXXFLAGS=-$MGE_WINDOWS_BUILD_MARCH
cmd.exe /c " \
vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && cmake -G "Ninja" \
-DMGE_ARCH=$MGE_ARCH \
-DMGE_INFERENCE_ONLY=$MGE_INFERENCE_ONLY \
-DMGE_WITH_CUDA=$MGE_WITH_CUDA \
-DCMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE \
-DCMAKE_INSTALL_PREFIX:PATH=$INSTALL_DIR \
-DCMAKE_C_COMPILER=clang-cl.exe \
-DCMAKE_CXX_COMPILER=clang-cl.exe \
-DCMAKE_MAKE_PROGRAM=ninja.exe \
../../.. && \
echo \"start Ninja build log to build.log, may take serval min...\" && \
Ninja load_and_run > build.log"
}
if [[ $OS =~ "NT" ]]; then
cmake_build_windows $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
else
cmake_build $MGE_WITH_CUDA $MGE_INFERENCE_ONLY $BUILD_TYPE
fi
#!/usr/bin/env bash
set -e
MAKEFILE_TYPE="Unix"
OS=$(uname -s)
if [[ $OS =~ "NT" ]]; then
echo "BUILD in NT ..."
MAKEFILE_TYPE="Unix"
fi
function build_flatc() {
BUILD_DIR=$1/build_dir/host_flatc/build
INSTALL_DIR=$BUILD_DIR/../install
if [ -e $BUILD_DIR ];then
echo "clean old dir: $BUILD_DIR"
rm -rf $BUILD_DIR
fi
if [ -e $INSTALL_DIR ];then
echo "clean old dir: $INSTALL_DIR"
rm -rf $INSTALL_DIR
fi
echo "create build dir"
mkdir -p $BUILD_DIR
mkdir -p $INSTALL_DIR
cd $BUILD_DIR
cmake -G "$MAKEFILE_TYPE Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
-DFLATBUFFERS_BUILD_TESTS=OFF \
-DFLATBUFFERS_BUILD_FLATHASH=OFF \
-DFLATBUFFERS_BUILD_FLATLIB=OFF \
-DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \
$SRC_DIR/third_party/flatbuffers
make -j$(nproc)
make install/strip
}
...@@ -106,7 +106,7 @@ if (MGB_WITH_FLATBUFFERS) ...@@ -106,7 +106,7 @@ if (MGB_WITH_FLATBUFFERS)
target_compile_definitions(megbrain PUBLIC MGB_ENABLE_FBS_SERIALIZATION=1) target_compile_definitions(megbrain PUBLIC MGB_ENABLE_FBS_SERIALIZATION=1)
target_link_libraries(megbrain flatbuffers) target_link_libraries(megbrain flatbuffers)
set (GENERATED_FLATBUFFERS_CONVERTER_PATH ${CMAKE_CURRENT_BINARY_DIR}/genfiles/this/should/be/added/to/sereg_caller/target/only/but/hey/yolo/there/are/no/fine/grained/targets/let/us/just/make/this/path/unreasonably/long/to/avoid/collision) set (GENERATED_FLATBUFFERS_CONVERTER_PATH ${CMAKE_CURRENT_BINARY_DIR}/genfiles)
set (GEN_FLATBUFFERS_CONVERTER_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_converter.py) set (GEN_FLATBUFFERS_CONVERTER_PY ${PROJECT_SOURCE_DIR}/dnn/scripts/gen_flatbuffers_converter.py)
file (MAKE_DIRECTORY ${GENERATED_FLATBUFFERS_CONVERTER_PATH}) file (MAKE_DIRECTORY ${GENERATED_FLATBUFFERS_CONVERTER_PATH})
add_custom_command( add_custom_command(
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <iostream> #include <iostream>
#ifdef _WIN32 #if defined(WIN32)
static inline void unsetenv(std::string name) { static inline void unsetenv(std::string name) {
name += "="; name += "=";
_putenv(name.c_str()); _putenv(name.c_str());
......
...@@ -2,19 +2,50 @@ ...@@ -2,19 +2,50 @@
cd $(dirname $0) cd $(dirname $0)
#FIXME: anaconda just upload serval lastest version, so this version may lose efficacy
echo "this script only for linux/macos/windows-unix-like-env(MSYS etc) prepare MKL env"
echo "if you build windows for native at cmd.exe, powershell env or Visual Studio GUI,"
echo "u need download MKL package and untar manually"
echo "refs: https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library/choose-download/windows.html"
MKL_VERSION=2019.5 MKL_VERSION=2019.5
MKL_PATCH=281 MKL_PATCH=281
CONDA_BASE_URL=https://anaconda.org/intel CONDA_BASE_URL=https://anaconda.org/intel
OS=$(uname -s)
FILE_PREFIX=null
TAR=tar
if [ $OS = "Darwin" ];then
FILE_PREFIX=osx
elif [ $OS = "Linux" ];then
FILE_PREFIX=linux
elif [[ $OS =~ "NT" ]]; then
FILE_PREFIX=win
# NT use /c/Windows/system32/tar will stuck for big file
# so we back to GNU tar
TAR=/usr/bin/tar
else
echo "DO NOT SUPPORT OS NOW"
exit -1
fi
echo "config FILE_PREFIX to: $FILE_PREFIX"
rm -rf mkl rm -rf mkl
for platform in 32 64 for platform in 32 64
do do
if [ $OS = "Darwin" ]&&[ $platform = 32 ];then
echo "strip 32 bit file for Darwin"
continue
fi
mkdir -p mkl/x86_${platform} mkdir -p mkl/x86_${platform}
for package in "mkl-include" "mkl-static" for package in "mkl-include" "mkl-static"
do do
echo "Installing ${package} for x86_${platform}..." DOWNLOAD_FILE=${package}-${MKL_VERSION}-intel_${MKL_PATCH}.tar.bz2
URL=${CONDA_BASE_URL}/${package}/${MKL_VERSION}/download/linux-${platform}/${package}-${MKL_VERSION}-intel_${MKL_PATCH}.tar.bz2 echo "Installing ${DOWNLOAD_FILE} for x86_${platform}..."
wget -q --show-progress "${URL}" -O - | tar xj -C mkl/x86_${platform} URL=${CONDA_BASE_URL}/${package}/${MKL_VERSION}/download/$FILE_PREFIX-${platform}/${DOWNLOAD_FILE}
echo "try download mkl package from: ${URL}"
wget -q --show-progress "${URL}" -O mkl/x86_${platform}/${DOWNLOAD_FILE}
$TAR xvj -C mkl/x86_${platform} -f mkl/x86_${platform}/${DOWNLOAD_FILE}
done done
done done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册