|  | 
|  | 1 | +# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. | 
|  | 2 | +# | 
|  | 3 | +# Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 4 | +# you may not use this file except in compliance with the License. | 
|  | 5 | +# You may obtain a copy of the License at | 
|  | 6 | +# | 
|  | 7 | +# http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 8 | +# | 
|  | 9 | +# Unless required by applicable law or agreed to in writing, software | 
|  | 10 | +# distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 11 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 12 | +# See the License for the specific language governing permissions and | 
|  | 13 | +# limitations under the License. | 
|  | 14 | + | 
|  | 15 | +if(NOT WITH_ONNXRUNTIME) | 
|  | 16 | +  return() | 
|  | 17 | +endif() | 
|  | 18 | + | 
|  | 19 | +if (WITH_ARM) | 
|  | 20 | +  message(SEND_ERROR "The current onnxruntime backend doesn't support ARM cpu") | 
|  | 21 | +  return() | 
|  | 22 | +endif () | 
|  | 23 | + | 
|  | 24 | +INCLUDE(ExternalProject) | 
|  | 25 | + | 
|  | 26 | +SET(PADDLE2ONNX_PROJECT        "extern_paddle2onnx") | 
|  | 27 | +SET(PADDLE2ONNX_PREFIX_DIR     ${THIRD_PARTY_PATH}/paddle2onnx) | 
|  | 28 | +SET(PADDLE2ONNX_INSTALL_DIR    ${THIRD_PARTY_PATH}/install/paddle2onnx) | 
|  | 29 | +SET(PADDLE2ONNX_INC_DIR        "${PADDLE2ONNX_INSTALL_DIR}/include" CACHE PATH "paddle2onnx include directory." FORCE) | 
|  | 30 | +SET(PADDLE2ONNX_REPOSITORY     ${GIT_URL}/PaddlePaddle/Paddle2ONNX.git) | 
|  | 31 | +SET(PADDLE2ONNX_TAG            cpp) | 
|  | 32 | +SET(LIBDIR "lib") | 
|  | 33 | +SET(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}") | 
|  | 34 | + | 
|  | 35 | +INCLUDE_DIRECTORIES(${PADDLE2ONNX_INC_DIR}) # For PADDLE2ONNX code to include internal headers. | 
|  | 36 | +if(WIN32) | 
|  | 37 | +    SET(PADDLE2ONNX_LIB "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/paddle2onnx.lib" CACHE FILEPATH "paddle2onnx static library." FORCE) | 
|  | 38 | +    SET(PADDLE2ONNX_SHARED_LIB "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/paddle2onnx.dll" CACHE FILEPATH "paddle2onnx shared library." FORCE) | 
|  | 39 | +elseif(APPLE) | 
|  | 40 | +    SET(PADDLE2ONNX_LIB "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/libpaddle2onnx.dylib" CACHE FILEPATH "PADDLE2ONNX library." FORCE) | 
|  | 41 | +else() | 
|  | 42 | +    SET(PADDLE2ONNX_LIB "${PADDLE2ONNX_INSTALL_DIR}/${LIBDIR}/libpaddle2onnx.so" CACHE FILEPATH "PADDLE2ONNX library." FORCE) | 
|  | 43 | +endif(WIN32) | 
|  | 44 | + | 
|  | 45 | + | 
|  | 46 | +# The protoc path is required to compile onnx. | 
|  | 47 | +string(REPLACE "/" ";" PROTOC_BIN_PATH ${PROTOBUF_PROTOC_EXECUTABLE}) | 
|  | 48 | +list(POP_BACK PROTOC_BIN_PATH) | 
|  | 49 | +list(JOIN PROTOC_BIN_PATH "/" PROTOC_BIN_PATH) | 
|  | 50 | + | 
|  | 51 | + | 
|  | 52 | +set(PADDLE2ONNX_OPTIONAL_ARGS | 
|  | 53 | +      -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} | 
|  | 54 | +      -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} | 
|  | 55 | +      -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} | 
|  | 56 | +      -DCMAKE_CXX_FLAGS_RELEASE=${CMAKE_CXX_FLAGS_RELEASE} | 
|  | 57 | +      -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} | 
|  | 58 | +      -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} | 
|  | 59 | +      -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG} | 
|  | 60 | +      -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE} | 
|  | 61 | +      -DONNX_CUSTOM_PROTOC_PATH=${PROTOC_BIN_PATH} | 
|  | 62 | +      -DWITH_STATIC=OFF | 
|  | 63 | +      -DCMAKE_INSTALL_PREFIX=${PADDLE2ONNX_INSTALL_DIR} | 
|  | 64 | +      -DCMAKE_POSITION_INDEPENDENT_CODE=ON | 
|  | 65 | +      -DCMAKE_BUILD_TYPE=${THIRD_PARTY_BUILD_TYPE} | 
|  | 66 | +      ${EXTERNAL_OPTIONAL_ARGS} | 
|  | 67 | +) | 
|  | 68 | + | 
|  | 69 | +if (WITH_PYTHON) | 
|  | 70 | +  set(PADDLE2ONNX_OPTIONAL_ARGS ${PADDLE2ONNX_OPTIONAL_ARGS} | 
|  | 71 | +    -DPYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE} | 
|  | 72 | +    -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR} | 
|  | 73 | +    -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY} | 
|  | 74 | +  ) | 
|  | 75 | +endif () | 
|  | 76 | + | 
|  | 77 | + | 
|  | 78 | +ExternalProject_Add( | 
|  | 79 | +    ${PADDLE2ONNX_PROJECT} | 
|  | 80 | +    ${EXTERNAL_PROJECT_LOG_ARGS} | 
|  | 81 | +    ${SHALLOW_CLONE} | 
|  | 82 | +    GIT_REPOSITORY      ${PADDLE2ONNX_REPOSITORY} | 
|  | 83 | +    GIT_TAG             ${PADDLE2ONNX_TAG} | 
|  | 84 | +    DEPENDS             protobuf | 
|  | 85 | +    PREFIX              ${PADDLE2ONNX_PREFIX_DIR} | 
|  | 86 | +    UPDATE_COMMAND      "" | 
|  | 87 | +    CMAKE_ARGS       ${PADDLE2ONNX_OPTIONAL_ARGS} | 
|  | 88 | +    CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PADDLE2ONNX_INSTALL_DIR} | 
|  | 89 | +                     -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON | 
|  | 90 | +                     -DCMAKE_BUILD_TYPE:STRING=${THIRD_PARTY_BUILD_TYPE} | 
|  | 91 | +    BUILD_BYPRODUCTS    ${PADDLE2ONNX_LIB} | 
|  | 92 | +) | 
|  | 93 | + | 
|  | 94 | +ADD_LIBRARY(paddle2onnx STATIC IMPORTED GLOBAL) | 
|  | 95 | +SET_PROPERTY(TARGET paddle2onnx PROPERTY IMPORTED_LOCATION ${PADDLE2ONNX_LIB}) | 
|  | 96 | +ADD_DEPENDENCIES(paddle2onnx ${PADDLE2ONNX_PROJECT}) | 
0 commit comments