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: f7f376fe8c
tags/v0.5.0
@@ -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) | |||||
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") | |||||
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) | |||||
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() | |||||
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}) | ||||
@@ -1,31 +1,25 @@ | |||||
include(ExternalProject) | |||||
include(GNUInstallDirs) | |||||
set(MKLDNN_DIR "${PROJECT_SOURCE_DIR}/third_party/intel-mkl-dnn" CACHE STRING "mkldnn directory") | |||||
set(MKLDNN_BUILD_DIR ${PROJECT_BINARY_DIR}/third_party/intel-mkl-dnn) | |||||
set(MKLDNN_LIB ${MKLDNN_BUILD_DIR}/${CMAKE_INSTALL_LIBDIR}/libdnnl.a) | |||||
option(DNNL_BUILD_TESTS "" OFF) | |||||
option(DNNL_BUILD_EXAMPLES "" OFF) | |||||
set(DNNL_LIBRARY_TYPE STATIC CACHE STRING "config dnnl to STATIC") | |||||
# 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 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( | |||||
mkl_dnn | |||||
SOURCE_DIR ${MKLDNN_DIR} | |||||
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} | |||||
) | |||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter -Wno-extra") | |||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-extra") | |||||
add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/intel-mkl-dnn) |
@@ -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) |
@@ -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 | |||||
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( | |||||
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 @@ | |||||
#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() | |||||
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 @@ | |||||
#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: | |||||
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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
* "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 @@ | |||||
#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 @@ | |||||
#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 @@ | |||||
#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> | ||||
@@ -0,0 +1,106 @@ | |||||
# 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" | |||||
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() { | |||||
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() { | |||||
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() { | |||||
make install/strip | make install/strip | ||||
} | } | ||||
function build_flatc() { | |||||
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 | |||||
build_flatc $SRC_DIR | |||||
api_level=16 | api_level=16 | ||||
abi="armeabi-v7a with NEON" | abi="armeabi-v7a with NEON" | ||||
@@ -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() { | |||||
make install | make install | ||||
} | } | ||||
function build_flatc() { | |||||
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 | |||||
build_flatc $SRC_DIR | |||||
# 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" | |||||
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() { | |||||
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() { | |||||
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() { | |||||
make install/strip | make install/strip | ||||
} | } | ||||
function build_flatc() { | |||||
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 | |||||
build_flatc $SRC_DIR | |||||
toolchain=null | toolchain=null | ||||
if [ "$ARCH" = "arm64-v8a" ]; then | if [ "$ARCH" = "arm64-v8a" ]; then | ||||
@@ -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() { | |||||
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 | |||||
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 | |||||
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() { | |||||
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 |
@@ -0,0 +1,39 @@ | |||||
#!/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) | |||||
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 @@ | |||||
#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 @@ | |||||
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}..." | |||||
URL=${CONDA_BASE_URL}/${package}/${MKL_VERSION}/download/linux-${platform}/${package}-${MKL_VERSION}-intel_${MKL_PATCH}.tar.bz2 | |||||
wget -q --show-progress "${URL}" -O - | tar xj -C mkl/x86_${platform} | |||||
DOWNLOAD_FILE=${package}-${MKL_VERSION}-intel_${MKL_PATCH}.tar.bz2 | |||||
echo "Installing ${DOWNLOAD_FILE} for 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 |