From 14a32ae19be59d5686026a72d49cdb5f18b0fac1 Mon Sep 17 00:00:00 2001 From: Megvii Engine Team Date: Tue, 21 Jul 2020 14:19:07 +0800 Subject: [PATCH] fix(cmake/cross-build): misc fix 1: fix cmake cross-ios failed caused by df118a87 build static lib for APPLE define for XCODE third_party framework including require 2: megbrain_test/megdnn_test build when MGE_INFERENCE_ONLY=ON now u can build megbrain_test/megdnn_test by: EXTRA_CMAKE_ARGS="-DMGE_WITH_TEST=ON" ./scripts/cmake-build/xxx.sh example macos-cross-ios build megdnn_test for IOS by EXTRA_CMAKE_ARGS="-DMGE_WITH_TEST=ON" ./scripts/cmake-build/cross_build_ios_arm_inference.sh 3: reuse host flatc build when cross build mode GitOrigin-RevId: 132f4bf893567bdb1d54de506449950513a5841f --- CMakeLists.txt | 9 ++++-- dnn/test/CMakeLists.txt | 9 ++++-- .../arm_common/conv_bias_multi_thread.cpp | 1 + dnn/test/arm_common/matrix_mul.cpp | 1 + .../cross_build_android_arm_inference.sh | 2 +- .../cross_build_ios_arm_inference.sh | 2 +- .../cross_build_linux_arm_inference.sh | 2 +- scripts/cmake-build/utils/utils.sh | 30 +++++++++++++------ sdk/load-and-run/CMakeLists.txt | 2 +- test/CMakeLists.txt | 4 ++- 10 files changed, 43 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7877624d6..f4b43a775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,11 @@ option(MGE_USE_SYSTEM_LIB "Build MegEngine with system libraries." OFF) option(MGB_WITH_FLATBUFFERS "Build MegBrain with FlatBuffers serialization support." ON) option(BUILD_SHARED_LIBS "Build shared libraries" ON) +if (APPLE) + set (BUILD_SHARED_LIBS OFF) + message("build static for xcode framework require") +endif() + if (MGE_USE_SYSTEM_LIB) set (MGE_CUDA_USE_STATIC OFF) endif() @@ -245,8 +250,6 @@ if(MGE_INFERENCE_ONLY) set(MGE_WITH_DISTRIBUTED OFF) message("-- Disable python module for inference only build.") set(MGE_WITH_PYTHON_MODULE OFF) - message("-- Disable tests for inference only build.") - set(MGE_WITH_TEST OFF) endif() if(MGE_WITH_DISTRIBUTED) @@ -469,7 +472,7 @@ endif() set(MGB_ENABLE_TENSOR_RT ${MGE_WITH_TRT}) # Inference only -if(MGE_INFERENCE_ONLY) +if(MGE_INFERENCE_ONLY AND NOT MGE_WITH_TEST) set(MGB_ENABLE_GRAD 0) set(MGB_BUILD_SLIM_SERVING 1) else() diff --git a/dnn/test/CMakeLists.txt b/dnn/test/CMakeLists.txt index 2a50bdd89..823aa8871 100644 --- a/dnn/test/CMakeLists.txt +++ b/dnn/test/CMakeLists.txt @@ -28,6 +28,7 @@ endif() add_executable(megdnn_test ${SOURCES}) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing") target_link_libraries(megdnn_test gtest) target_link_libraries(megdnn_test megdnn ${MGE_BLAS_LIBS}) @@ -36,7 +37,9 @@ target_include_directories(megdnn_test ${PROJECT_SOURCE_DIR}/third_party/midout/src ) -if(UNIX) +if(APPLE OR ANDROID) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") +else() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") endif() @@ -44,6 +47,8 @@ if(MGE_ENABLE_COVERAGE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") endif() -if(UNIX) +if(APPLE OR ANDROID) + target_link_libraries(megdnn_test dl) +else() target_link_libraries(megdnn_test dl rt) endif() diff --git a/dnn/test/arm_common/conv_bias_multi_thread.cpp b/dnn/test/arm_common/conv_bias_multi_thread.cpp index 8eb1c033c..279f9e4c3 100644 --- a/dnn/test/arm_common/conv_bias_multi_thread.cpp +++ b/dnn/test/arm_common/conv_bias_multi_thread.cpp @@ -79,6 +79,7 @@ std::vector get_nchw44_conv_bias_args( using NLMode = param::ConvBias::NonlineMode; std::vector args; + MEGDNN_MARK_USED_VAR(no_pad); auto pack = [&](size_t n, size_t oc, size_t ic, size_t h, size_t w, size_t kernel, size_t stride, size_t group, NLMode nlmode, diff --git a/dnn/test/arm_common/matrix_mul.cpp b/dnn/test/arm_common/matrix_mul.cpp index 73db7dcd6..582b05223 100644 --- a/dnn/test/arm_common/matrix_mul.cpp +++ b/dnn/test/arm_common/matrix_mul.cpp @@ -175,6 +175,7 @@ TEST_F(ARM_COMMON, QINT8x8x32_GEMV_MK4) { checker.set_rng(0, rng.get()).set_rng(1, rng.get()); auto run = [&](size_t M, size_t K, size_t N) { + MEGDNN_MARK_USED_VAR(N); Param param; param.format = param::MatrixMul::Format::MK4; param.transposeA = false; diff --git a/scripts/cmake-build/cross_build_android_arm_inference.sh b/scripts/cmake-build/cross_build_android_arm_inference.sh index cf68b7d03..64f099dce 100755 --- a/scripts/cmake-build/cross_build_android_arm_inference.sh +++ b/scripts/cmake-build/cross_build_android_arm_inference.sh @@ -138,7 +138,7 @@ function cmake_build() { make install/strip } -build_flatc $SRC_DIR +build_flatc $SRC_DIR $REMOVE_OLD_BUILD api_level=16 abi="armeabi-v7a with NEON" diff --git a/scripts/cmake-build/cross_build_ios_arm_inference.sh b/scripts/cmake-build/cross_build_ios_arm_inference.sh index 3dcb21a6e..934b694ff 100755 --- a/scripts/cmake-build/cross_build_ios_arm_inference.sh +++ b/scripts/cmake-build/cross_build_ios_arm_inference.sh @@ -136,7 +136,7 @@ function cmake_build() { make install } -build_flatc $SRC_DIR +build_flatc $SRC_DIR $REMOVE_OLD_BUILD # refs for ../../toolchains/ios.toolchain.cmake # to config this, if u want to build other, diff --git a/scripts/cmake-build/cross_build_linux_arm_inference.sh b/scripts/cmake-build/cross_build_linux_arm_inference.sh index 541e08fdc..3b1034cf2 100755 --- a/scripts/cmake-build/cross_build_linux_arm_inference.sh +++ b/scripts/cmake-build/cross_build_linux_arm_inference.sh @@ -128,7 +128,7 @@ function cmake_build() { make install/strip } -build_flatc $SRC_DIR +build_flatc $SRC_DIR $REMOVE_OLD_BUILD toolchain=null if [ "$ARCH" = "arm64-v8a" ]; then diff --git a/scripts/cmake-build/utils/utils.sh b/scripts/cmake-build/utils/utils.sh index 39aa8077b..226588fe4 100755 --- a/scripts/cmake-build/utils/utils.sh +++ b/scripts/cmake-build/utils/utils.sh @@ -12,18 +12,30 @@ 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 + REMOVE_OLD_BUILD=$2 + + if [ $REMOVE_OLD_BUILD = "true" ]; then + 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 + else + echo "strip remove old build" + fi + + if [ ! -e $BUILD_DIR ];then + echo "create build: $BUILD_DIR" + mkdir -p $BUILD_DIR fi - if [ -e $INSTALL_DIR ];then - echo "clean old dir: $INSTALL_DIR" - rm -rf $INSTALL_DIR + if [ ! -e $INSTALL_DIR ];then + echo "create install $INSTALL_DIR" + mkdir -p $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 \ diff --git a/sdk/load-and-run/CMakeLists.txt b/sdk/load-and-run/CMakeLists.txt index 486c05728..159fa2d6d 100755 --- a/sdk/load-and-run/CMakeLists.txt +++ b/sdk/load-and-run/CMakeLists.txt @@ -2,7 +2,7 @@ include_directories(src) file (GLOB_RECURSE SOURCES src/*.cpp main.cpp) add_executable (load_and_run ${SOURCES}) -if (WIN32) +if (WIN32) # Windows does not support implicitly importing data members from DLL. target_link_libraries(load_and_run megbrain megdnn) else() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 767715b60..45cc3d690 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -28,7 +28,9 @@ if(CXX_SUPPORT_WCLASS_MEMACCESS) endif() endif() -if(UNIX) +if(APPLE OR ANDROID) + target_link_libraries(megbrain_test dl) +else() target_link_libraries(megbrain_test dl rt) endif() -- GitLab