* add asan build option
* fix cpuinfo build opt level
* fix host release build with out debug info
* opt "fix lite bazel/cmake symbols MR"
* other misc build opt
GitOrigin-RevId: 6ca286e195
release-1.5
@@ -65,11 +65,12 @@ option(MGE_INFERENCE_ONLY "Build inference only library." OFF) | |||||
option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON) | option(MGE_WITH_MKLDNN "Enable Intel MKL_DNN support," ON) | ||||
option(MGE_WITH_ROCM "Enable ROCM support" OFF) | option(MGE_WITH_ROCM "Enable ROCM support" OFF) | ||||
option(MGE_WITH_LARGE_ARCHIVE "Enable big archive link support" OFF) | option(MGE_WITH_LARGE_ARCHIVE "Enable big archive link support" OFF) | ||||
option(MGE_BUILD_WITH_ASAN "Enable build with ASAN, need compiler support" OFF) | |||||
if(MSVC OR WIN32) | 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() | endif() | ||||
if(MGE_WITH_NVRTC_STUB OR MGE_WITH_CUDA_STUB) | if(MGE_WITH_NVRTC_STUB OR MGE_WITH_CUDA_STUB) | ||||
@@ -90,14 +91,15 @@ if(NOT ${MGE_BIN_REDUCE} STREQUAL "") | |||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${MGE_BIN_REDUCE}") | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -include ${MGE_BIN_REDUCE}") | ||||
endif() | endif() | ||||
CHECK_CXX_COMPILER_FLAG("-ffunction-sections -fdata-sections -Wl,--gc-sections" CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) | |||||
if(CXX_FUNCTION_DATA_GC_SECTIONS_SUPPORT) | |||||
#mac or apple not 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") | |||||
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() | endif() | ||||
check_ipo_supported(RESULT IS_LTO_SUPPORT OUTPUT output_info) | check_ipo_supported(RESULT IS_LTO_SUPPORT OUTPUT output_info) | ||||
@@ -181,13 +183,14 @@ if(${MGE_ARCH} STREQUAL "AUTO") | |||||
endif() | endif() | ||||
endif() | endif() | ||||
if((${MGE_ARCH} STREQUAL "x86_64" OR ${MGE_ARCH} STREQUAL "i386" OR ${MGE_ARCH} STREQUAL "armv7" OR ${MGE_ARCH} STREQUAL "aarch64") AND NOT APPLE) | |||||
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() | |||||
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) | |||||
endif() | |||||
if(${CMAKE_BUILD_TYPE} STREQUAL "Release" AND NOT MGE_WITH_TEST AND NOT ${MGE_ARCH} STREQUAL "x86_64") | |||||
set(MGE_ENABLE_RTTI OFF) | |||||
message(STATUS "disable MGE_ENABLE_RTTI when Release/NON-x86_64 mode!!") | |||||
endif() | endif() | ||||
if(MSVC OR WIN32) | if(MSVC OR WIN32) | ||||
@@ -205,8 +208,42 @@ if(MSVC OR WIN32) | |||||
if (NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND NOT ${CMAKE_C_COMPILER_ID} STREQUAL "Clang-cl") | 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") | message(FATAL_ERROR "only support clang-cl for windows build, pls check detail: scripts/cmake-build/BUILD_README.md") | ||||
endif() | 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) | |||||
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") | |||||
else() | |||||
set(WIN_FLAGS "/O2") | |||||
endif() | |||||
# add flags for enable sse instruction optimize for X86, enable avx header to compile avx code | # add flags for enable sse instruction optimize for X86, enable avx header to compile avx code | ||||
set(WIN_FLAGS "-msse4.2 -O2 -D_AVX_ -D_AVX2_ -D__AVX__ -D__AVX2__ -D__FMA__") | |||||
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 | # 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} -march=cascadelake -mtune=cascadelake") | ||||
# set(WIN_FLAGS "{WIN_FLAGS} -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vnni") | # set(WIN_FLAGS "{WIN_FLAGS} -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mavx512vbmi -mavx512vnni") | ||||
@@ -233,14 +270,35 @@ if(MSVC OR WIN32) | |||||
set(MGE_WITH_DISTRIBUTED OFF) | set(MGE_WITH_DISTRIBUTED OFF) | ||||
else() | else() | ||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") | 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") | |||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -DNDEBUG -g") | |||||
# 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() | else() | ||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") | |||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -DNDEBUG -g") | |||||
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() | |||||
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() | ||||
endif() | endif() | ||||
@@ -353,11 +411,6 @@ if(NOT CMAKE_CUDA_HOST_COMPILER) | |||||
set(CMAKE_CUDA_HOST_COMPILER $(CMAKE_CXX_COMPILER)) | set(CMAKE_CUDA_HOST_COMPILER $(CMAKE_CXX_COMPILER)) | ||||
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) | |||||
endif() | |||||
if(NOT MGE_ENABLE_RTTI) | if(NOT MGE_ENABLE_RTTI) | ||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") | ||||
endif() | endif() | ||||
@@ -612,6 +665,16 @@ if(MGE_WITH_CUDA) | |||||
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) | |||||
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) | if(MGE_WITH_CAMBRICON) | ||||
include_directories("$ENV{NEUWARE_HOME}/include") | include_directories("$ENV{NEUWARE_HOME}/include") | ||||
link_directories("$ENV{NEUWARE_HOME}/lib64") | link_directories("$ENV{NEUWARE_HOME}/lib64") | ||||
@@ -734,6 +797,11 @@ ENDIF() | |||||
set(MGB_JIT ${MGE_WITH_JIT}) | set(MGB_JIT ${MGE_WITH_JIT}) | ||||
set(MGB_JIT_MLIR ${MGE_WITH_JIT_MLIR}) | set(MGB_JIT_MLIR ${MGE_WITH_JIT_MLIR}) | ||||
set(MGB_JIT_HALIDE ${MGE_WITH_HALIDE}) | 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}") | |||||
endif() | |||||
if(MSVC OR WIN32) | if(MSVC OR WIN32) | ||||
set(CMAKE_HAVE_THREADS_LIBRARY 1) | set(CMAKE_HAVE_THREADS_LIBRARY 1) | ||||
@@ -222,7 +222,8 @@ megcoreDeviceHandle_t megdnn::get_device_handle(Handle* handle) { | |||||
megcoreDeviceHandle_t dev_handle; | megcoreDeviceHandle_t dev_handle; | ||||
megcoreComputingHandle_t comp_handle = handle->megcore_computing_handle(); | megcoreComputingHandle_t comp_handle = handle->megcore_computing_handle(); | ||||
status = megcoreGetDeviceHandle(comp_handle, &dev_handle); | status = megcoreGetDeviceHandle(comp_handle, &dev_handle); | ||||
megdnn_assert(status == megcoreSuccess); | |||||
megdnn_throw_if(status != megcoreSuccess, megdnn_error, | |||||
"get device handle error!"); | |||||
return dev_handle; | return dev_handle; | ||||
} | } | ||||
@@ -20,14 +20,14 @@ | |||||
var svgHeight = undefined; | var svgHeight = undefined; | ||||
var loadDesc = (svgElem) => { | var loadDesc = (svgElem) => { | ||||
var mgeType = svgElem.attributes['mge:type']; | |||||
var mgeType = svgElem.attributes['tag:type']; | |||||
if (mgeType === undefined) { | if (mgeType === undefined) { | ||||
return; | return; | ||||
} | } | ||||
var elemList = []; | var elemList = []; | ||||
for (attrName of svgElem.getAttributeNames()) { | for (attrName of svgElem.getAttributeNames()) { | ||||
var prefix = 'mge:'; | |||||
var prefix = 'tag:'; | |||||
if (!attrName.startsWith(prefix)) { | if (!attrName.startsWith(prefix)) { | ||||
continue; | continue; | ||||
} | } | ||||
@@ -57,7 +57,7 @@ | |||||
return; | return; | ||||
} | } | ||||
svgElem.onmousedown = e => { | svgElem.onmousedown = e => { | ||||
var mgeType = svgElem.attributes['mge:type']; | |||||
var mgeType = svgElem.attributes['tag:type']; | |||||
if (mgeType === undefined) { | if (mgeType === undefined) { | ||||
return; | return; | ||||
} | } | ||||
@@ -151,4 +151,4 @@ | |||||
<input type='file' id='fileInput' style="position: fixed; top: 0; background-color: white;"></input> | <input type='file' id='fileInput' style="position: fixed; top: 0; background-color: white;"></input> | ||||
</body> | </body> | ||||
</html> | |||||
</html> |
@@ -9,6 +9,7 @@ ARCH=arm64-v8a | |||||
REMOVE_OLD_BUILD=false | REMOVE_OLD_BUILD=false | ||||
NINJA_VERBOSE=OFF | NINJA_VERBOSE=OFF | ||||
NINJA_DRY_RUN=OFF | NINJA_DRY_RUN=OFF | ||||
SPECIFIED_TARGET="install/strip" | |||||
echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | ||||
@@ -22,13 +23,14 @@ function usage() { | |||||
echo "-r : remove old build dir before make, default off" | echo "-r : remove old build dir before make, default off" | ||||
echo "-v : ninja with verbose and explain, default off" | echo "-v : ninja with verbose and explain, default off" | ||||
echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | ||||
echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -k)" | |||||
echo "-h : show usage" | echo "-h : show usage" | ||||
echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | ||||
echo "example: $0 -d" | echo "example: $0 -d" | ||||
exit -1 | exit -1 | ||||
} | } | ||||
while getopts "nvrkhdfa:" arg | |||||
while getopts "nvrkhdfa:e:" arg | |||||
do | do | ||||
case $arg in | case $arg in | ||||
d) | d) | ||||
@@ -75,6 +77,9 @@ do | |||||
echo "config NINJA_DRY_RUN=ON" | echo "config NINJA_DRY_RUN=ON" | ||||
NINJA_DRY_RUN=ON | NINJA_DRY_RUN=ON | ||||
;; | ;; | ||||
e) | |||||
SPECIFIED_TARGET=$OPTARG | |||||
;; | |||||
?) | ?) | ||||
echo "unkonw argument" | echo "unkonw argument" | ||||
usage | usage | ||||
@@ -86,6 +91,7 @@ echo "build config summary:" | |||||
echo "BUILD_TYPE: $BUILD_TYPE" | echo "BUILD_TYPE: $BUILD_TYPE" | ||||
echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | ||||
echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | ||||
echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}" | |||||
echo "ARCH: $ARCH" | echo "ARCH: $ARCH" | ||||
echo "----------------------------------------------------" | echo "----------------------------------------------------" | ||||
@@ -107,7 +113,11 @@ if [ -z $NDK_ROOT ];then | |||||
fi | fi | ||||
function cmake_build() { | function cmake_build() { | ||||
BUILD_DIR=$SRC_DIR/build_dir/android/$1/$BUILD_TYPE/build | |||||
if [ $1 = "armeabi-v7a with NEON" ] ;then | |||||
BUILD_DIR=$SRC_DIR/build_dir/android/armeabi-v7a/$BUILD_TYPE/build | |||||
else | |||||
BUILD_DIR=$SRC_DIR/build_dir/android/$1/$BUILD_TYPE/build | |||||
fi | |||||
INSTALL_DIR=$BUILD_DIR/../install | INSTALL_DIR=$BUILD_DIR/../install | ||||
BUILD_ABI=$1 | BUILD_ABI=$1 | ||||
BUILD_NATIVE_LEVEL=$2 | BUILD_NATIVE_LEVEL=$2 | ||||
@@ -127,7 +137,7 @@ function cmake_build() { | |||||
-DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \ | -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\" \ | |||||
-DANDROID_NATIVE_API_LEVEL=$BUILD_NATIVE_LEVEL \ | -DANDROID_NATIVE_API_LEVEL=$BUILD_NATIVE_LEVEL \ | ||||
-DMGE_INFERENCE_ONLY=ON \ | -DMGE_INFERENCE_ONLY=ON \ | ||||
-DMGE_WITH_CUDA=OFF \ | -DMGE_WITH_CUDA=OFF \ | ||||
@@ -137,9 +147,8 @@ function cmake_build() { | |||||
${EXTRA_CMAKE_ARGS} \ | ${EXTRA_CMAKE_ARGS} \ | ||||
$SRC_DIR " | $SRC_DIR " | ||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "" ${NINJA_DRY_RUN} | |||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} | |||||
bash -c "${NINJA_CMD}" | bash -c "${NINJA_CMD}" | ||||
${NINJA_BASE} install/strip | |||||
} | } | ||||
build_flatc $SRC_DIR $REMOVE_OLD_BUILD | build_flatc $SRC_DIR $REMOVE_OLD_BUILD | ||||
@@ -9,6 +9,7 @@ ARCH=arm64 | |||||
REMOVE_OLD_BUILD=false | REMOVE_OLD_BUILD=false | ||||
NINJA_VERBOSE=OFF | NINJA_VERBOSE=OFF | ||||
NINJA_DRY_RUN=OFF | NINJA_DRY_RUN=OFF | ||||
SPECIFIED_TARGET="install" | |||||
echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | ||||
@@ -22,13 +23,14 @@ function usage() { | |||||
echo "-r : remove old build dir before make, default off" | echo "-r : remove old build dir before make, default off" | ||||
echo "-v : ninja with verbose and explain, default off" | echo "-v : ninja with verbose and explain, default off" | ||||
echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | ||||
echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -k)" | |||||
echo "-h : show usage" | echo "-h : show usage" | ||||
echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | ||||
echo "example: $0 -d" | echo "example: $0 -d" | ||||
exit -1 | exit -1 | ||||
} | } | ||||
while getopts "nvrkhdfa:" arg | |||||
while getopts "nvrkhdfa:e:" arg | |||||
do | do | ||||
case $arg in | case $arg in | ||||
d) | d) | ||||
@@ -75,6 +77,9 @@ do | |||||
echo "config NINJA_DRY_RUN=ON" | echo "config NINJA_DRY_RUN=ON" | ||||
NINJA_DRY_RUN=ON | NINJA_DRY_RUN=ON | ||||
;; | ;; | ||||
e) | |||||
SPECIFIED_TARGET=$OPTARG | |||||
;; | |||||
?) | ?) | ||||
echo "unkonw argument" | echo "unkonw argument" | ||||
usage | usage | ||||
@@ -86,6 +91,7 @@ echo "build config summary:" | |||||
echo "BUILD_TYPE: $BUILD_TYPE" | echo "BUILD_TYPE: $BUILD_TYPE" | ||||
echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | ||||
echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | ||||
echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}" | |||||
echo "ARCH: $ARCH" | echo "ARCH: $ARCH" | ||||
echo "----------------------------------------------------" | echo "----------------------------------------------------" | ||||
@@ -139,7 +145,7 @@ function cmake_build() { | |||||
${EXTRA_CMAKE_ARGS} \ | ${EXTRA_CMAKE_ARGS} \ | ||||
$SRC_DIR " | $SRC_DIR " | ||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "install" ${NINJA_DRY_RUN} | |||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} | |||||
bash -c "${NINJA_CMD}" | bash -c "${NINJA_CMD}" | ||||
} | } | ||||
@@ -10,6 +10,7 @@ ARCH=arm64-v8a | |||||
REMOVE_OLD_BUILD=false | REMOVE_OLD_BUILD=false | ||||
NINJA_VERBOSE=OFF | NINJA_VERBOSE=OFF | ||||
NINJA_DRY_RUN=OFF | NINJA_DRY_RUN=OFF | ||||
SPECIFIED_TARGET="install/strip" | |||||
CMAKE_C_FLAGS="-Wno-psabi" | CMAKE_C_FLAGS="-Wno-psabi" | ||||
CMAKE_CXX_FLAGS="-Wno-psabi" | CMAKE_CXX_FLAGS="-Wno-psabi" | ||||
@@ -26,13 +27,14 @@ function usage() { | |||||
echo "-r : remove old build dir before make, default off" | echo "-r : remove old build dir before make, default off" | ||||
echo "-v : ninja with verbose and explain, default off" | echo "-v : ninja with verbose and explain, default off" | ||||
echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | ||||
echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -k)" | |||||
echo "-h : show usage" | echo "-h : show usage" | ||||
echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | ||||
echo "example: $0 -d" | echo "example: $0 -d" | ||||
exit -1 | exit -1 | ||||
} | } | ||||
while getopts "nvrkhdcfa:" arg | |||||
while getopts "nvrkhdcfa:e:" arg | |||||
do | do | ||||
case $arg in | case $arg in | ||||
d) | d) | ||||
@@ -83,6 +85,9 @@ do | |||||
echo "config NINJA_DRY_RUN=ON" | echo "config NINJA_DRY_RUN=ON" | ||||
NINJA_DRY_RUN=ON | NINJA_DRY_RUN=ON | ||||
;; | ;; | ||||
e) | |||||
SPECIFIED_TARGET=$OPTARG | |||||
;; | |||||
?) | ?) | ||||
echo "unkonw argument" | echo "unkonw argument" | ||||
usage | usage | ||||
@@ -95,6 +100,7 @@ echo "BUILD_TYPE: $BUILD_TYPE" | |||||
echo "MGE_WITH_CUDA: $MGE_WITH_CUDA" | echo "MGE_WITH_CUDA: $MGE_WITH_CUDA" | ||||
echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16" | ||||
echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16" | ||||
echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}" | |||||
echo "ARCH: $ARCH" | echo "ARCH: $ARCH" | ||||
echo "----------------------------------------------------" | echo "----------------------------------------------------" | ||||
@@ -155,7 +161,7 @@ function cmake_build() { | |||||
${EXTRA_CMAKE_ARGS} \ | ${EXTRA_CMAKE_ARGS} \ | ||||
$SRC_DIR " | $SRC_DIR " | ||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "install/strip" ${NINJA_DRY_RUN} | |||||
config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} | |||||
bash -c "${NINJA_CMD}" | bash -c "${NINJA_CMD}" | ||||
} | } | ||||
@@ -12,12 +12,15 @@ function usage() { | |||||
echo "-v : ninja with verbose and explain, default off" | echo "-v : ninja with verbose and explain, default off" | ||||
echo "-s : Do not build develop even build with training mode, default on when build with training, always for wheel" | echo "-s : Do not build develop even build with training mode, default on when build with training, always for wheel" | ||||
echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)" | ||||
echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -k)" | |||||
echo "-h : show usage" | echo "-h : show usage" | ||||
echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | echo "append other cmake config by export EXTRA_CMAKE_ARGS=..." | ||||
echo "example: $0 -d" | echo "example: $0 -d" | ||||
exit -1 | exit -1 | ||||
} | } | ||||
READLINK=readlink | |||||
OS=$(uname -s) | |||||
BUILD_TYPE=Release | BUILD_TYPE=Release | ||||
MGE_WITH_CUDA=OFF | MGE_WITH_CUDA=OFF | ||||
MGE_INFERENCE_ONLY=ON | MGE_INFERENCE_ONLY=ON | ||||
@@ -28,10 +31,15 @@ REMOVE_OLD_BUILD=false | |||||
NINJA_VERBOSE=OFF | NINJA_VERBOSE=OFF | ||||
BUILD_DEVELOP=ON | BUILD_DEVELOP=ON | ||||
NINJA_DRY_RUN=OFF | NINJA_DRY_RUN=OFF | ||||
SPECIFIED_TARGET="install/strip" | |||||
if [[ $OS =~ "NT" ]]; then | |||||
echo "Windows do not support strip/install by defaut" | |||||
SPECIFIED_TARGET="" | |||||
fi | |||||
echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}" | ||||
while getopts "nsrhdctmv" arg | |||||
while getopts "nsrhdctmve:" arg | |||||
do | do | ||||
case $arg in | case $arg in | ||||
d) | d) | ||||
@@ -72,6 +80,9 @@ do | |||||
MGE_WINDOWS_BUILD_MARCH=m32 | MGE_WINDOWS_BUILD_MARCH=m32 | ||||
MGE_ARCH=i386 | MGE_ARCH=i386 | ||||
;; | ;; | ||||
e) | |||||
SPECIFIED_TARGET=$OPTARG | |||||
;; | |||||
?) | ?) | ||||
echo "unkonw argument" | echo "unkonw argument" | ||||
usage | usage | ||||
@@ -83,9 +94,8 @@ echo "build config summary:" | |||||
echo "BUILD_TYPE: $BUILD_TYPE" | echo "BUILD_TYPE: $BUILD_TYPE" | ||||
echo "MGE_WITH_CUDA: $MGE_WITH_CUDA" | echo "MGE_WITH_CUDA: $MGE_WITH_CUDA" | ||||
echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY" | echo "MGE_INFERENCE_ONLY: $MGE_INFERENCE_ONLY" | ||||
echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}" | |||||
echo "------------------------------------" | echo "------------------------------------" | ||||
READLINK=readlink | |||||
OS=$(uname -s) | |||||
if [ $OS = "Darwin" ];then | if [ $OS = "Darwin" ];then | ||||
READLINK=greadlink | READLINK=greadlink | ||||
@@ -131,7 +141,7 @@ function cmake_build() { | |||||
${EXTRA_CMAKE_ARGS} \ | ${EXTRA_CMAKE_ARGS} \ | ||||
${SRC_DIR} " | ${SRC_DIR} " | ||||
config_ninja_target_cmd ${NINJA_VERBOSE} ${BUILD_DEVELOP} "install/strip" ${NINJA_DRY_RUN} | |||||
config_ninja_target_cmd ${NINJA_VERBOSE} ${BUILD_DEVELOP} "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} | |||||
bash -c "${NINJA_CMD}" | bash -c "${NINJA_CMD}" | ||||
} | } | ||||
@@ -260,7 +270,7 @@ function cmake_build_windows() { | |||||
-DCMAKE_MAKE_PROGRAM=ninja.exe \ | -DCMAKE_MAKE_PROGRAM=ninja.exe \ | ||||
${EXTRA_CMAKE_ARGS} ../../.. " | ${EXTRA_CMAKE_ARGS} ../../.. " | ||||
config_ninja_target_cmd ${NINJA_VERBOSE} ${BUILD_DEVELOP} "" ${NINJA_DRY_RUN} | |||||
config_ninja_target_cmd ${NINJA_VERBOSE} ${BUILD_DEVELOP} "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} | |||||
cmd.exe /c " vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && ${NINJA_CMD} " | cmd.exe /c " vcvarsall.bat $MGE_WINDOWS_BUILD_ARCH && ${NINJA_CMD} " | ||||
} | } | ||||
@@ -69,16 +69,22 @@ function try_remove_old_build() { | |||||
} | } | ||||
function config_ninja_target_cmd() { | function config_ninja_target_cmd() { | ||||
NINJA_CMD="${NINJA_BASE} all" | |||||
if [ $# -eq 4 ]; then | if [ $# -eq 4 ]; then | ||||
_NINJA_VERBOSE=$1 | _NINJA_VERBOSE=$1 | ||||
_BUILD_DEVELOP=$2 | _BUILD_DEVELOP=$2 | ||||
_INSTALL_ALL_TARGET=$3 | |||||
_NINJA_TARGET=$3 | |||||
_NINJA_DRY_RUN=$4 | _NINJA_DRY_RUN=$4 | ||||
else | else | ||||
echo "err call config_ninja_target_cmd" | echo "err call config_ninja_target_cmd" | ||||
exit -1 | exit -1 | ||||
fi | fi | ||||
if [ -z "${_NINJA_TARGET}" ]; then | |||||
NINJA_CMD="${NINJA_BASE} all" | |||||
elif [[ ${_NINJA_TARGET} =~ "install" ]]; then | |||||
NINJA_CMD="${NINJA_BASE} all && ${NINJA_BASE} ${_NINJA_TARGET}" | |||||
else | |||||
NINJA_CMD="${NINJA_BASE} ${_NINJA_TARGET}" | |||||
fi | |||||
if [ ${_NINJA_DRY_RUN} = "ON" ]; then | if [ ${_NINJA_DRY_RUN} = "ON" ]; then | ||||
NINJA_CMD="${NINJA_CMD} -d explain -n" | NINJA_CMD="${NINJA_CMD} -d explain -n" | ||||
@@ -90,9 +96,6 @@ function config_ninja_target_cmd() { | |||||
echo "add develop target" | echo "add develop target" | ||||
NINJA_CMD="${NINJA_CMD} && ${NINJA_BASE} develop" | NINJA_CMD="${NINJA_CMD} && ${NINJA_BASE} develop" | ||||
fi | fi | ||||
if [ -n "${_INSTALL_ALL_TARGET}" ]; then | |||||
NINJA_CMD="${NINJA_CMD} && ${NINJA_BASE} ${_INSTALL_ALL_TARGET}" | |||||
fi | |||||
fi | fi | ||||
echo "build ${NINJA_BASE} target command: ${NINJA_CMD}" | echo "build ${NINJA_BASE} target command: ${NINJA_CMD}" | ||||
@@ -223,7 +223,7 @@ enum class LogLevel { kInfo, kWarn, kDebug, kFatal }; | |||||
void Log(LogLevel level, char const* file, int line, char const* func, | void Log(LogLevel level, char const* file, int line, char const* func, | ||||
char const *fmt, ...) { | char const *fmt, ...) { | ||||
std::string new_fmt("[megwave] "); | |||||
std::string new_fmt("[wave] "); | |||||
new_fmt.append(fmt); | new_fmt.append(fmt); | ||||
va_list ap; | va_list ap; | ||||
va_start(ap, fmt); | va_start(ap, fmt); | ||||
@@ -31,10 +31,10 @@ const std::string polyline = | |||||
"<polyline points=\"{}\" style=\"fill:none;stroke:{};stroke-width:{}\" " | "<polyline points=\"{}\" style=\"fill:none;stroke:{};stroke-width:{}\" " | ||||
"/>"; | "/>"; | ||||
const std::string opr_info = | const std::string opr_info = | ||||
"mge:type=\"opr\" mge:id=\"{}\" mge:size=\"{}\" mge:name=\"{}\""; | |||||
"tag:type=\"opr\" tag:id=\"{}\" tag:size=\"{}\" tag:name=\"{}\""; | |||||
const std::string chunk_info = | const std::string chunk_info = | ||||
"mge:type=\"chunk\" mge:id=\"{}\" mge:time=\"{}\" mge:addr=\"{}\" " | |||||
"mge:size=\"{}\" mge:owner_var_name=\"{}\""; | |||||
"tag:type=\"chunk\" tag:id=\"{}\" tag:time=\"{}\" tag:addr=\"{}\" " | |||||
"tag:size=\"{}\" tag:owner_var_name=\"{}\""; | |||||
const std::string animate = | const std::string animate = | ||||
"<animate attributeName=\"opacity\" from=\"0\" to=\"1\" " | "<animate attributeName=\"opacity\" from=\"0\" to=\"1\" " | ||||
"begin=\"{}.mouseover\" fill=\"freeze\" dur=\"1s\"/>\n<animate " | "begin=\"{}.mouseover\" fill=\"freeze\" dur=\"1s\"/>\n<animate " | ||||
@@ -316,4 +316,4 @@ std::vector<std::vector<size_t>> StaticMemRecorder::get_chunk_construct( | |||||
} | } | ||||
} | } | ||||
return chunk_ids; | return chunk_ids; | ||||
} | |||||
} |
@@ -729,9 +729,9 @@ void GraphLoaderOSS::OprLoadContextImpl::load_single_opr( | |||||
auto registry = OprRegistry::find_by_unversioned_id(fbopr->type_id()); | auto registry = OprRegistry::find_by_unversioned_id(fbopr->type_id()); | ||||
mgb_throw_if(!registry, SerializationError, | mgb_throw_if(!registry, SerializationError, | ||||
"failed to find opr with type %s, use " | |||||
"mgb.config.dump_registered_oprs() " | |||||
"to get a dict that maps from opr id to opr name", | |||||
"failed to find opr with type %s, use python env " | |||||
"config.dump_registered_oprs() to get a dict that maps from " | |||||
"opr id to opr name", | |||||
std::to_string(fbopr->type_id()).c_str()); | std::to_string(fbopr->type_id()).c_str()); | ||||
// load inputs | // load inputs | ||||
@@ -812,7 +812,7 @@ GraphLoader::LoadResult GraphLoaderOSS::load(const LoadConfig& config, | |||||
uint32_t magic; | uint32_t magic; | ||||
m_file->read(&magic, sizeof(magic)); | m_file->read(&magic, sizeof(magic)); | ||||
mgb_throw_if(magic != MGB_MAGIC, SerializationError, | mgb_throw_if(magic != MGB_MAGIC, SerializationError, | ||||
"wrong magic: wanted %#08x, actual %#08x (not a MegBrain fbs " | |||||
"wrong magic: wanted %#08x, actual %#08x (not a invalid fbs " | |||||
"model?)", | "model?)", | ||||
MGB_MAGIC, magic); | MGB_MAGIC, magic); | ||||
m_file->skip(4); | m_file->skip(4); | ||||
@@ -833,7 +833,7 @@ GraphLoader::LoadResult GraphLoaderOSS::load(const LoadConfig& config, | |||||
m_file->skip(tensor_begin); | m_file->skip(tensor_begin); | ||||
mgb_throw_if(!fbs::GraphBufferHasIdentifier(m_graph_buf.data()), | mgb_throw_if(!fbs::GraphBufferHasIdentifier(m_graph_buf.data()), | ||||
SerializationError, "not a MegBrain fbs model"); | |||||
SerializationError, "invalid fbs model"); | |||||
{ | { | ||||
flatbuffers::Verifier verifier( | flatbuffers::Verifier verifier( | ||||
@@ -847,7 +847,7 @@ GraphLoader::LoadResult GraphLoaderOSS::load(const LoadConfig& config, | |||||
m_mgb_version = m_graph->mgb_version(); | m_mgb_version = m_graph->mgb_version(); | ||||
if (m_graph->mgb_version() > MGB_VERSION) { | if (m_graph->mgb_version() > MGB_VERSION) { | ||||
mgb_log_warn( | mgb_log_warn( | ||||
"loading model from future MegBrain: version=%u " | |||||
"loading model from future runtime: version=%u " | |||||
"model_version=%u", | "model_version=%u", | ||||
MGB_VERSION, m_graph->mgb_version()); | MGB_VERSION, m_graph->mgb_version()); | ||||
} | } | ||||