From: 오형석/On-Device Lab(SR)/Staff Engineer/삼성전자 Date: Thu, 28 Nov 2019 04:18:48 +0000 (+0900) Subject: [cmake] Change external package rebuild policy (#9239) X-Git-Tag: submit/tizen/20191205.083104~87 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4effb76ce974e59df4e1a7b989fe1f291269ad09;p=platform%2Fcore%2Fml%2Fnnfw.git [cmake] Change external package rebuild policy (#9239) * [cmake] Change external package rebuild policy - Divide build stamp and install stamp - Introduce identifier and check version - Skip if build stamp exists (build success/fail on workspace) - Skip if install stamp exists (installed) Signed-off-by: Hyeongseok Oh --- diff --git a/infra/cmake/modules/ExternalBuildTools.cmake b/infra/cmake/modules/ExternalBuildTools.cmake index 0c8e31d..391fd04 100644 --- a/infra/cmake/modules/ExternalBuildTools.cmake +++ b/infra/cmake/modules/ExternalBuildTools.cmake @@ -1,21 +1,51 @@ function(ExternalBuild_CMake) + # CMAKE_DIR Path to cmake root script to build (required) + # BUILD_DIR Path to build workspace (required) + # INSTALL_DIR Path to install (required) + # PKG_NAME External package name word for logging and stamp file name (required) + # IDENTIFIER String to identify package version (optional) + # BUILD_FLAGS Multiple argument to set compiler flag + # EXTRA_OPTS Multiple argument to pass options, etc for cmake configuration include(CMakeParseArguments) - cmake_parse_arguments(ARG "" "CMAKE_DIR;BUILD_DIR;INSTALL_DIR;PKG_NAME" "BUILD_FLAGS;EXTRA_OPTS" ${ARGN}) + cmake_parse_arguments(ARG + "" + "CMAKE_DIR;BUILD_DIR;INSTALL_DIR;PKG_NAME;IDENTIFIER" + "BUILD_FLAGS;EXTRA_OPTS" + ${ARGN} + ) - set(STAMP_PATH "${ARG_INSTALL_DIR}/${ARG_PKG_NAME}.stamp") - set(LOG_PATH "${ARG_INSTALL_DIR}/${ARG_PKG_NAME}.log") + set(BUILD_STAMP_PATH "${ARG_BUILD_DIR}/${ARG_PKG_NAME}.stamp") + set(BUILD_LOG_PATH "${ARG_BUILD_DIR}/${ARG_PKG_NAME}.log") + set(INSTALL_STAMP_PATH "${ARG_INSTALL_DIR}/${ARG_PKG_NAME}.stamp") + set(INSTALL_LOG_PATH "${ARG_INSTALL_DIR}/${ARG_PKG_NAME}.log") - if(EXISTS ${STAMP_PATH}) - return() - endif(EXISTS ${STAMP_PATH}) + set(PKG_IDENTIFIER "") + if(${ARG_IDENTIFIER}) + set(PKG_IDENTIFIER "${ARG_IDENTIFIER}") + endif(${ARG_IDENTIFIER}) + + # NOTE Do NOT retry build once it fails + if(EXISTS ${BUILD_STAMP_PATH}) + file(READ ${BUILD_STAMP_PATH} READ_IDENTIFIER) + if("${READ_IDENTIFIER}" STREQUAL "${PKG_IDENTIFIER}") + return() + endif("${READ_IDENTIFIER}" STREQUAL "${PKG_IDENTIFIER}") + endif(EXISTS ${BUILD_STAMP_PATH}) + + # NOTE Do NOT build pre-installed exists + if(EXISTS ${INSTALL_STAMP_PATH}) + file(READ ${INSTALL_STAMP_PATH} READ_IDENTIFIER) + if("${READ_IDENTIFIER}" STREQUAL "${PKG_IDENTIFIER}") + return() + endif("${READ_IDENTIFIER}" STREQUAL "${PKG_IDENTIFIER}") + endif(EXISTS ${INSTALL_STAMP_PATH}) message(STATUS "Build ${ARG_PKG_NAME} from ${ARG_CMAKE_DIR}") file(MAKE_DIRECTORY ${ARG_BUILD_DIR}) file(MAKE_DIRECTORY ${ARG_INSTALL_DIR}) - # NOTE Do NOT retry Flatbuffers build once it fails - file(WRITE "${STAMP_PATH}") + file(WRITE "${BUILD_STAMP_PATH}" "${PKG_IDENTIFIER}") execute_process(COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${ARG_INSTALL_DIR} @@ -23,24 +53,26 @@ function(ExternalBuild_CMake) -DCMAKE_CXX_FLAGS=${ARG_BUILD_FLAGS} ${ARG_EXTRA_OPTS} ${ARG_CMAKE_DIR} - OUTPUT_FILE ${LOG_PATH} - ERROR_FILE ${LOG_PATH} + OUTPUT_FILE ${BUILD_LOG_PATH} + ERROR_FILE ${BUILD_LOG_PATH} WORKING_DIRECTORY ${ARG_BUILD_DIR} RESULT_VARIABLE BUILD_EXITCODE) if(NOT BUILD_EXITCODE EQUAL 0) - message(FATAL_ERROR "${ARG_PKG_NAME} Package: Build failed (check '${LOG_PATH}' for details)") + message(FATAL_ERROR "${ARG_PKG_NAME} Package: Build failed (check '${BUILD_LOG_PATH}' for details)") endif(NOT BUILD_EXITCODE EQUAL 0) execute_process(COMMAND ${CMAKE_COMMAND} --build . -- install - OUTPUT_FILE ${LOG_PATH} - ERROR_FILE ${LOG_PATH} + OUTPUT_FILE ${INSTALL_LOG_PATH} + ERROR_FILE ${INSTALL_LOG_PATH} WORKING_DIRECTORY ${ARG_BUILD_DIR} RESULT_VARIABLE INSTALL_EXITCODE) if(NOT INSTALL_EXITCODE EQUAL 0) - message(FATAL_ERROR "${ARG_PKG_NAME} Package: Installation failed (check '${LOG_PATH}' for details)") + message(FATAL_ERROR "${ARG_PKG_NAME} Package: Installation failed (check '${INSTALL_LOG_PATH}' for details)") endif(NOT INSTALL_EXITCODE EQUAL 0) + file(WRITE "${INSTALL_STAMP_PATH}" "${PKG_IDENTIFIER}") + message(STATUS "${ARG_PKG_NAME} Package: Done") endfunction(ExternalBuild_CMake) diff --git a/infra/cmake/packages/FlatBuffersConfig.cmake b/infra/cmake/packages/FlatBuffersConfig.cmake index a0e9356..ed3f466 100644 --- a/infra/cmake/packages/FlatBuffersConfig.cmake +++ b/infra/cmake/packages/FlatBuffersConfig.cmake @@ -25,6 +25,7 @@ function(_FlatBuffers_build) BUILD_DIR ${CMAKE_BINARY_DIR}/externals/FLATBUFFERS/build INSTALL_DIR ${NNAS_OVERLAY_DIR} BUILD_FLAGS ${ADDITIONAL_CXX_FLAGS} + IDENTIFIER "1.10" PKG_NAME "FLATBUFFERS") endfunction(_FlatBuffers_build) diff --git a/infra/cmake/packages/GTestConfig.cmake b/infra/cmake/packages/GTestConfig.cmake index bcec282..9c74e57 100644 --- a/infra/cmake/packages/GTestConfig.cmake +++ b/infra/cmake/packages/GTestConfig.cmake @@ -13,6 +13,7 @@ function(_GTest_build) ExternalBuild_CMake(CMAKE_DIR ${GTestSource_DIR} BUILD_DIR ${CMAKE_BINARY_DIR}/externals/GTEST/build INSTALL_DIR ${NNAS_OVERLAY_DIR} + IDENTIFIER "1.8.0" PKG_NAME "GTEST") endfunction(_GTest_build) diff --git a/infra/cmake/packages/ProtobufConfig.cmake b/infra/cmake/packages/ProtobufConfig.cmake index 5be9ade..f517b49 100644 --- a/infra/cmake/packages/ProtobufConfig.cmake +++ b/infra/cmake/packages/ProtobufConfig.cmake @@ -58,6 +58,7 @@ function(_Protobuf_build) INSTALL_DIR ${NNAS_OVERLAY_DIR} BUILD_FLAGS -fPIC EXTRA_OPTS -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_WITH_ZLIB=OFF + IDENTIFIER "3.5.2" PKG_NAME "PROTOBUF") endfunction(_Protobuf_build)