diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fdf8f75f6cfc4f99845f77cff699e8b22a3a7534..9cad515c2bef7e44769ce0d452a96ed5bad7e3f0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,16 @@ stages: + - prepare - linting - build - test - extra +setenv: + stage: prepare + script: + - export CCACHE_NOHASHDIR=1 + - export CCACHE_BASEDIR=${CI_PROJECT_DIR} + cpplint: stage: linting script: diff --git a/CMakeLists.txt b/CMakeLists.txt index 9714b1456a1ecdc227b5861d114f09f7464cae97..1e0963e6fb92bf7118f7cbdb16de7a00efb738eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,9 +15,18 @@ option(MACE_ENABLE_BENCHMARKS "whether to build c++ micro benchmarks" OFF) option(MACE_ENABLE_EXAMPLES "whether to build examples" OFF) option(MACE_ENABLE_OPT_SIZE "whether to build with optimized binary size" ON) option(MACE_ENABLE_OBFUSCATE "whether to build with code obfuscation" ON) +option(MACE_ENABLE_CCACHE "whether to build with ccache" ON) message("CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}") +if(MACE_ENABLE_CCACHE) + find_program(CCACHE_FOUND ccache) + if(CCACHE_FOUND) + set(CMAKE_CXX_COMPILER_LAUNCHER ccache) + set(CMAKE_C_COMPILER_LAUNCHER ccache) + endif(CCACHE_FOUND) +endif(MACE_ENABLE_CCACHE) + # TODO make these flags well defined and organized # TODO enable sanitizer set(MACE_CC_FLAGS "${MACE_CC_FLAGS} -fPIC") @@ -33,7 +42,9 @@ if(MACE_ENABLE_OPT_SIZE) 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") +# -Wno-error=unused-command-line-argument: official Android toolchain contains +# unsupported argument and will break ccache preprocessor +set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -Wall -Werror -Wno-error=unused-command-line-argument") set(MACE_CODE_CC_FLAGS "${MACE_CODE_CC_FLAGS} -std=c++11 -D_GLIBCXX_USE_C99_MATH_TR1") if(IOS) diff --git a/docker/mace-dev/Dockerfile b/docker/mace-dev/Dockerfile index 8bb31a7d3a33c4c4d886f170c54fd7ca3d0b6d7d..5ae643a96e1ca49732982182d52d38ee1936a463 100644 --- a/docker/mace-dev/Dockerfile +++ b/docker/mace-dev/Dockerfile @@ -111,3 +111,6 @@ RUN pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors RUN pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com \ cpplint==1.4.4 + +RUN apt-get install -y --no-install-recommends \ + ccache diff --git a/mace/core/quantize.h b/mace/core/quantize.h index 00fb3db9121d6add2d16507f1bf7b1b3a92fadf3..c7b6666dda378e99ad7a99714a6c7dca74b41619 100644 --- a/mace/core/quantize.h +++ b/mace/core/quantize.h @@ -100,7 +100,6 @@ inline void QuantizeMultiplier(double multiplier, ++*shift; } *output_multiplier = static_cast(qint); - MACE_CHECK(*output_multiplier <= std::numeric_limits::max()); } inline void GetOutputMultiplierAndShift( diff --git a/third_party/gflags/gflags.cmake b/third_party/gflags/gflags.cmake index ded60019268e59a87e8acd612572a606a9562ebd..1134718ca28ef9fd09d62f0aba37120e0f60831d 100644 --- a/third_party/gflags/gflags.cmake +++ b/third_party/gflags/gflags.cmake @@ -24,6 +24,9 @@ ExternalProject_Add( UPDATE_COMMAND "" BUILD_BYPRODUCTS ${GFLAGS_LIBRARIES} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GFLAGS_INSTALL_DIR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DBUILD_STATIC_LIBS=ON -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} diff --git a/third_party/googletest/googletest.cmake b/third_party/googletest/googletest.cmake index 6b715c877003429fd65b8608a935e5e1887af43a..f5dd0974839275a9475f50f580399cc0aa061451 100644 --- a/third_party/googletest/googletest.cmake +++ b/third_party/googletest/googletest.cmake @@ -32,7 +32,10 @@ if(MACE_ENABLE_TESTS) PREFIX ${GTEST_SOURCES_DIR} UPDATE_COMMAND "" BUILD_BYPRODUCTS ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR} + CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} + -DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR} -DBUILD_GMOCK=ON -Dgtest_disable_pthreads=ON -Dgtest_force_shared_crt=ON diff --git a/third_party/protobuf/protobuf.cmake b/third_party/protobuf/protobuf.cmake index 4f95317de46f6e420f697d10ac9361c2881b2156..d38635136387c5f82b04b0a3b0a43b18fcd908dd 100644 --- a/third_party/protobuf/protobuf.cmake +++ b/third_party/protobuf/protobuf.cmake @@ -33,7 +33,9 @@ ExternalProject_Add( BUILD_BYPRODUCTS ${PROTOBUF_LITE_LIBRARIES} SOURCE_DIR "${PROTOBUF_SRCS_DIR}/src/protobuf" CONFIGURE_COMMAND ${CMAKE_COMMAND} ../protobuf/cmake/ - #-DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_INSTALL_PREFIX=${PROTOBUF_INSTALL_DIR} -DCMAKE_VERBOSE_MAKEFILE=OFF -Dprotobuf_BUILD_TESTS=OFF @@ -90,6 +92,8 @@ if(BUILD_PROTOC) SOURCE_DIR "${PROTOC_SRCS_DIR}/src/protoc" CONFIGURE_COMMAND ${CMAKE_COMMAND} ../protoc/cmake/ -DCMAKE_BUILD_TYPE=Release + -DCMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} + -DCMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} -DCMAKE_INSTALL_PREFIX=${PROTOC_INSTALL_DIR} -DCMAKE_VERBOSE_MAKEFILE=OFF -Dprotobuf_BUILD_TESTS=OFF