diff --git a/CMakeLists.txt b/CMakeLists.txt index adb354226a9f2bfb5d1e5700c9c7c6a05dc02649..3c29745fe94193518e0d872140adea40d658dce9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,13 +21,15 @@ message("CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") # TODO enable sanitizer set(MACE_CC_FLAGS "${MACE_CC_FLAGS} -fPIC") if(MACE_ENABLE_OPT_SIZE) - if(NOT APPLE) + if(APPLE) + set(MACE_LINKER_FLAGS "${MACE_LINKER_FLAGS} -Wl,-dead_strip -Wl,-dead_strip_dylibs") + else(APPLE) set(MACE_LINKER_FLAGS "${MACE_LINKER_FLAGS} -Wl,--strip-all -Wl,--gc-sections") set(MACE_CC_FLAGS "${MACE_CC_FLAGS} -ffunction-sections -fdata-sections") - endif() + endif(APPLE) set(MACE_CC_FLAGS "${MACE_CC_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -fno-rtti -fno-exceptions -DGOOGLE_PROTOBUF_NO_RTTI -DPROTOBUF_USE_EXCEPTIONS=0") -endif() +endif(MACE_ENABLE_OPT_SIZE) # flags apply only to mace code (third_party excluded) set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -Wall -Werror") @@ -36,7 +38,7 @@ set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -std=c++11 -D_GLIBCXX_USE_C99_MATH if(IOS) # TODO correct the code set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -Wno-error=shorten-64-to-32") -endif() +endif(IOS) if(MACE_ENABLE_NEON) add_definitions(-DMACE_ENABLE_NEON) @@ -44,26 +46,26 @@ if(MACE_ENABLE_NEON) # Enable NEON fp16 support string(REPLACE "-mfpu=neon " "-mfpu=neon-fp16 " CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) endif(ANDROID_ABI STREQUAL "armeabi-v7a") -endif() +endif(MACE_ENABLE_NEON) if(MACE_ENABLE_QUANTIZE) add_definitions(-DMACE_ENABLE_QUANTIZE) add_definitions(-DGEMMLOWP_USE_MACE_THREAD_POOL) add_definitions(-DMACE_DEPTHWISE_U8_USE_MULTI_THREAD) -endif() +endif(MACE_ENABLE_QUANTIZE) if(MACE_ENABLE_OPENCL) if(IOS) message(FATAL_ERROR "OpenCL is not supported for iOS") - endif() + endif(IOS) add_definitions(-DMACE_ENABLE_OPENCL) -endif() +endif(MACE_ENABLE_OPENCL) if(MACE_ENABLE_CUDA) # new CUDA support requires 3.8 for Linux/Mac, and 3.9 for Windows cmake_minimum_required(VERSION 3.8 FATAL_ERROR) enable_language(CUDA) -endif() +endif(MACE_ENABLE_CUDA) if((MACE_ENABLE_HEXAGON_DSP OR MACE_ENABLE_HEXAGON_HTA)) if(ANDROID_ABI STREQUAL "arm64-v8a") @@ -78,24 +80,24 @@ if(MACE_ENABLE_HEXAGON_DSP) endif(NOT ANDROID) # TODO => -DMACE_ENABLE_HEXAGON_DSP add_definitions(-DMACE_ENABLE_HEXAGON) -endif() +endif(MACE_ENABLE_HEXAGON_DSP) if(MACE_ENABLE_HEXAGON_HTA) if(NOT ANDROID) message(FATAL_ERROR "Hexagon HTA is only supported on Android") endif(NOT ANDROID) add_definitions(-DMACE_ENABLE_HEXAGON_HTA) -endif() +endif(MACE_ENABLE_HEXAGON_HTA) if(MACE_ENABLE_OBFUSCATE) add_definitions(-DMACE_OBFUSCATE_LITERALS) -endif() +endif(MACE_ENABLE_OBFUSCATE) if(NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MACE_CODE_CC_FLAGS} ${MACE_CC_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MACE_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MACE_LINKER_FLAGS}") -endif() +endif(NOT MSVC) include(${PROJECT_SOURCE_DIR}/third_party/third_party.cmake) @@ -108,8 +110,8 @@ add_subdirectory(mace) if(MACE_ENABLE_EXAMPLES) add_subdirectory(examples) -endif() +endif(MACE_ENABLE_EXAMPLES) if(MACE_ENABLE_TESTS OR MACE_ENABLE_BENCHMARKS) add_subdirectory(test) -endif() +endif(MACE_ENABLE_TESTS OR MACE_ENABLE_BENCHMARKS) diff --git a/tools/cmake-build-standalone-lib.sh b/tools/cmake-build-standalone-lib.sh index 9adf9bb79fed92fce8769fc706a1e420091c8389..ecdf77bdbfd61dff1c8c9f62cc9b121b6671758c 100755 --- a/tools/cmake-build-standalone-lib.sh +++ b/tools/cmake-build-standalone-lib.sh @@ -1,112 +1,24 @@ -#!/bin/bash +#!/usr/bin/env sh set -e -LIB_DIR=builds/lib -INCLUDE_DIR=builds/include/mace/public +# build for local host +sh tools/cmake-build-host.sh -mkdir -p $LIB_DIR -mkdir -p $INCLUDE_DIR +# Nuild for Android arm64-v8a with NEON +sh tools/cmake-build-android-arm64-v8a-cpu.sh -# copy include headers -cp mace/public/*.h $INCLUDE_DIR/ +# Build for Android arm64-v8a with NEON, Quantize, OpenCL, Hexagon HTA, Hexagon DSP +sh tools/cmake-build-android-arm64-v8a-full.sh -# make directories -rm -rf $LIB_DIR/armeabi-v7a -mkdir -p $LIB_DIR/armeabi-v7a/cpu_gpu_dsp -mkdir -p $LIB_DIR/armeabi-v7a/cpu_gpu +# Nuild for Android armeabi-v7a with NEON +sh tools/cmake-build-android-armeabi-v7a-cpu.sh -rm -rf $LIB_DIR/arm64-v8a -mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu_dsp -mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu -mkdir -p $LIB_DIR/arm64-v8a/cpu_gpu_apu +# Build for Android armeabi-v7a with NEON, Quantize, OpenCL, Hexagon HTA, Hexagon DSP +sh tools/cmake-build-android-armeabi-v7a-full.sh -rm -rf $LIB_DIR/linux-x86-64 -mkdir -p $LIB_DIR/linux-x86-64 +# Build for arm-linux-gnueabihf with NEON, Quantize, OpenCL +sh tools/cmake-build-arm-linux-gnueabihf-full.sh -rm -rf $LIB_DIR/arm_linux_gnueabihf -mkdir -p $LIB_DIR/arm_linux_gnueabihf/cpu_gpu - -rm -rf $LIB_DIR/aarch64_linux_gnu -mkdir -p $LIB_DIR/aarch64_linux_gnu/cpu_gpu - - - -# build shared libraries -echo "build shared lib for armeabi-v7a + cpu_gpu_dsp" -bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define hexagon=true --define quantize=true --cpu=armeabi-v7a -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/ -cp third_party/nnlib/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/ - -echo "build shared lib for arm64-v8a + cpu_gpu_dsp" -bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define hexagon=true --define quantize=true --cpu=arm64-v8a -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/ -cp third_party/nnlib/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/ - -echo "build shared lib for armeabi-v7a + cpu_gpu" -bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define quantize=true --cpu=armeabi-v7a -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/armeabi-v7a/cpu_gpu/ - -echo "build shared lib for arm64-v8a + cpu_gpu" -bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define quantize=true --cpu=arm64-v8a -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu/ - -echo "build shared lib for arm64-v8a + cpu_gpu_apu" -bazel build --config android --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define apu=true --define quantize=true --cpu=arm64-v8a -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm64-v8a/cpu_gpu_apu/ -cp third_party/apu/libapu-frontend.so $LIB_DIR/arm64-v8a/cpu_gpu_apu/ - -echo "build shared lib for arm_linux_gnueabihf + cpu_gpu" -bazel build --config arm_linux_gnueabihf --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define quantize=true -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/arm_linux_gnueabihf/cpu_gpu/ - -echo "build shared lib for aarch64_linux_gnu + cpu_gpu" -bazel build --config aarch64_linux_gnu --config optimization mace/libmace:libmace_dynamic --define neon=true --define openmp=false --define opencl=true --define quantize=true -cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/aarch64_linux_gnu/cpu_gpu/ - -if [[ "$OSTYPE" != "darwin"* ]];then - echo "build shared lib for linux-x86-64" - bazel build mace/libmace:libmace_dynamic --config optimization --define quantize=true --define openmp=false - cp bazel-bin/mace/libmace/libmace.so $LIB_DIR/linux-x86-64/ -fi - -# build static libraries -echo "build static lib for armeabi-v7a + cpu_gpu_dsp" -bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define hexagon=true --define quantize=true --cpu=armeabi-v7a -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/ -cp third_party/nnlib/armeabi-v7a/*so $LIB_DIR/armeabi-v7a/cpu_gpu_dsp/ - -echo "build static lib for arm64-v8a + cpu_gpu_dsp" -bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define hexagon=true --define quantize=true --cpu=arm64-v8a -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu_dsp/ -cp third_party/nnlib/arm64-v8a/*so $LIB_DIR/arm64-v8a/cpu_gpu_dsp/ - -echo "build static lib for armeabi-v7a + cpu_gpu" -bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define quantize=true --cpu=armeabi-v7a -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/armeabi-v7a/cpu_gpu/ - -echo "build static lib for arm64-v8a + cpu_gpu" -bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define quantize=true --cpu=arm64-v8a -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu/ - -echo "build static lib for arm64-v8a + cpu_gpu_apu" -bazel build --config android --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define apu=true --define quantize=true --cpu=arm64-v8a -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm64-v8a/cpu_gpu_apu/ -cp third_party/apu/libapu-frontend.so $LIB_DIR/arm64-v8a/cpu_gpu_apu/ - -echo "build static lib for arm_linux_gnueabihf + cpu_gpu" -bazel build --config arm_linux_gnueabihf --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define quantize=true -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/arm_linux_gnueabihf/cpu_gpu/ - -echo "build static lib for aarch64_linux_gnu + cpu_gpu" -bazel build --config aarch64_linux_gnu --config optimization mace/libmace:libmace_static --config symbol_hidden --define neon=true --define openmp=false --define opencl=true --define quantize=true -cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/aarch64_linux_gnu/cpu_gpu/ - -if [[ "$OSTYPE" != "darwin"* ]];then - echo "build static lib for linux-x86-64" - bazel build mace/libmace:libmace_static --config optimization --define quantize=true --define openmp=false - cp bazel-genfiles/mace/libmace/libmace.a $LIB_DIR/linux-x86-64/ -fi - -echo "LIB PATH: $LIB_DIR" -echo "INCLUDE FILE PATH: $INCLUDE_DIR" +# Build for aarch64-linux-gnu with NEON, Quantize, OpenCL +sh tools/cmake-build-aarch64-linux-gnu-full.sh