Skip to content

Commit d7489c8

Browse files
authored
[Feature] Enable read zip model in prebuild package. (#2185)
* support libzip * support windows * fix * update rpath * default build sdk zip model
1 parent 39c3b75 commit d7489c8

File tree

5 files changed

+111
-24
lines changed

5 files changed

+111
-24
lines changed

cmake/MMDeploy.cmake

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,25 @@ function (mmdeploy_export_impl NAME)
1212
RUNTIME DESTINATION bin)
1313
endfunction ()
1414

15+
function (mmdeploy_add_rpath NAME)
16+
if (MSVC)
17+
return()
18+
elseif(APPLE)
19+
set_target_properties(${NAME} PROPERTIES
20+
INSTALL_RPATH "@loader_path"
21+
BUILD_RPATH "@loader_path")
22+
else ()
23+
set_target_properties(${NAME} PROPERTIES
24+
INSTALL_RPATH "\$ORIGIN"
25+
BUILD_RPATH "\$ORIGIN")
26+
target_link_libraries(${NAME} PRIVATE -Wl,--disable-new-dtags)
27+
endif ()
28+
endfunction ()
29+
1530
macro(mmdeploy_add_net NAME)
1631
if (MMDEPLOY_DYNAMIC_BACKEND)
1732
mmdeploy_add_library(${NAME} SHARED ${ARGN})
33+
mmdeploy_add_rpath(${NAME})
1834
# DYNAMIC_BACKEND implies BUILD_SDK_MONOLITHIC
1935
mmdeploy_export_impl(${NAME})
2036
target_link_libraries(${PROJECT_NAME} PRIVATE mmdeploy)

csrc/mmdeploy/apis/c/CMakeLists.txt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright (c) OpenMMLab. All rights reserved.
22

33
project(capis)
4+
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
45

56
set(CAPI_OBJS)
67

@@ -80,14 +81,6 @@ if (MMDEPLOY_BUILD_SDK_CSHARP_API OR MMDEPLOY_BUILD_SDK_MONOLITHIC)
8081
set_target_properties(mmdeploy PROPERTIES
8182
VERSION ${MMDEPLOY_VERSION}
8283
SOVERSION ${MMDEPLOY_VERSION_MAJOR})
83-
if (APPLE)
84-
set_target_properties(mmdeploy PROPERTIES
85-
INSTALL_RPATH "@loader_path"
86-
BUILD_RPATH "@loader_path")
87-
else ()
88-
set_target_properties(mmdeploy PROPERTIES
89-
INSTALL_RPATH "\$ORIGIN"
90-
BUILD_RPATH "\$ORIGIN")
91-
endif ()
84+
mmdeploy_add_rpath(mmdeploy)
9285
mmdeploy_export_impl(mmdeploy)
9386
endif ()

csrc/mmdeploy/backend_ops/onnxruntime/CMakeLists.txt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
project(mmdeploy_onnxruntime_ops)
44

55
include(${CMAKE_SOURCE_DIR}/cmake/modules/FindONNXRUNTIME.cmake)
6+
include(${CMAKE_SOURCE_DIR}/cmake/MMDeploy.cmake)
67

78
# add plugin source
89
file(GLOB_RECURSE ORT_OPS_SRCS *.cpp)
@@ -22,15 +23,7 @@ target_link_libraries(${PROJECT_NAME}_obj PUBLIC onnxruntime)
2223

2324
mmdeploy_add_library(${PROJECT_NAME} SHARED EXCLUDE "")
2425
target_link_libraries(${PROJECT_NAME} PUBLIC ${PROJECT_NAME}_obj)
25-
if (APPLE)
26-
set_target_properties(${PROJECT_NAME} PROPERTIES
27-
BUILD_RPATH "@loader_path"
28-
INSTALL_RPATH "@loader_path")
29-
else ()
30-
set_target_properties(${PROJECT_NAME} PROPERTIES
31-
BUILD_RPATH "\$ORIGIN"
32-
INSTALL_RPATH "\$ORIGIN")
33-
endif ()
26+
mmdeploy_add_rpath(${PROJECT_NAME})
3427
add_library(mmdeploy::onnxruntime::ops ALIAS ${PROJECT_NAME})
3528

3629
set(_ORT_OPS_DIR ${CMAKE_SOURCE_DIR}/mmdeploy/lib)

csrc/mmdeploy/model/CMakeLists.txt

Lines changed: 90 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,102 @@ project(mmdeploy_model)
55
set(MODEL_NAMES "directory_model")
66
if (${MMDEPLOY_ZIP_MODEL})
77
set(MODEL_NAMES ${MODEL_NAMES} "zip_model")
8+
9+
if (MSVC)
10+
set(zlib zlibstatic)
11+
set(LIB_PREFIX "")
12+
set(LIB_SUFFIX ".lib")
13+
else()
14+
set(zlib z)
15+
set(LIB_PREFIX "lib")
16+
set(LIB_SUFFIX ".a")
17+
endif()
18+
set(ziplib zip)
19+
20+
set(zlib_name ${LIB_PREFIX}${zlib}${LIB_SUFFIX})
21+
set(ziplib_name ${LIB_PREFIX}${ziplib}${LIB_SUFFIX})
22+
23+
include(ExternalProject)
24+
set(ZLIB_BUILD_DIR ${CMAKE_BINARY_DIR}/zlib-build)
25+
set(ZLIB_INSTALL_DIR ${CMAKE_BINARY_DIR}/zlib-install)
26+
set(ZLIB_INCLUDE_DIR ${ZLIB_INSTALL_DIR}/include)
27+
set(ZLIB_LIBRARY_DIR ${ZLIB_INSTALL_DIR}/lib)
28+
ExternalProject_Add(
29+
zlib-external
30+
GIT_REPOSITORY https://github.com/madler/zlib
31+
GIT_TAG v1.2.13
32+
CMAKE_ARGS
33+
-DCMAKE_INSTALL_PREFIX=${ZLIB_INSTALL_DIR}
34+
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
35+
UPDATE_DISCONNECTED 1
36+
)
37+
add_custom_target(static_zlib ALL
38+
COMMAND ${CMAKE_COMMAND} -E remove ${ZLIB_LIBRARY_DIR}/zlib.lib
39+
COMMAND ${CMAKE_COMMAND} -E remove ${ZLIB_LIBRARY_DIR}/libz.so
40+
COMMAND ${CMAKE_COMMAND} -E remove ${ZLIB_LIBRARY_DIR}/libz.dylib
41+
)
42+
add_dependencies(static_zlib zlib-external)
43+
44+
add_library(${zlib} STATIC IMPORTED)
45+
set_target_properties(${zlib}
46+
PROPERTIES IMPORTED_LOCATION ${ZLIB_LIBRARY_DIR}/${zlib_name})
47+
add_dependencies(${zlib} zlib-external)
48+
49+
set(LIBZIP_BUILD_DIR ${CMAKE_BINARY_DIR}/libzip-build)
50+
set(LIBZIP_INSTALL_DIR ${CMAKE_BINARY_DIR}/libzip-install)
51+
set(LIBZIP_INCLUDE_DIR ${LIBZIP_INSTALL_DIR}/include)
52+
set(LIBZIP_LIBRARY_DIR ${LIBZIP_INSTALL_DIR}/lib)
53+
ExternalProject_Add(
54+
libzip-external
55+
GIT_REPOSITORY https://github.com/nih-at/libzip
56+
GIT_TAG v1.9.2
57+
CMAKE_ARGS
58+
-DZLIB_ROOT=${ZLIB_INSTALL_DIR}
59+
-DCMAKE_INSTALL_PREFIX=${LIBZIP_INSTALL_DIR}
60+
-DCMAKE_INSTALL_LIBDIR=lib
61+
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
62+
-DBUILD_SHARED_LIBS=OFF
63+
-DLIBZIP_DO_INSTALL=ON
64+
-DBUILD_TOOLS=OFF
65+
-DBUILD_DOC=OFF
66+
-DBUILD_REGRESS=OFF
67+
-DBUILD_EXAMPLES=OFF
68+
-DENABLE_OPENSSL=OFF
69+
-DENABLE_COMMONCRYPTO=OFF
70+
-DENABLE_GNUTLS=OFF
71+
-DENABLE_MBEDTLS=OFF
72+
-DENABLE_WINDOWS_CRYPTO=OFF
73+
-DENABLE_BZIP2=OFF
74+
-DENABLE_LZMA=OFF
75+
-DENABLE_ZSTD=OFF
76+
PREFIX libzip
77+
BINARY_DIR ${LIBZIP_BUILD_DIR}
78+
# INSTALL_COMMAND ""
79+
UPDATE_DISCONNECTED 1
80+
)
81+
add_library(${ziplib} STATIC IMPORTED)
82+
set_target_properties(${ziplib}
83+
PROPERTIES IMPORTED_LOCATION ${LIBZIP_LIBRARY_DIR}/${ziplib_name})
84+
add_dependencies(libzip-external static_zlib)
85+
add_dependencies(${ziplib} libzip-external)
86+
set(ziplibs ${ziplib} ${zlib})
87+
if (NOT MMDEPLOY_BUILD_SDK_MONOLITHIC)
88+
install(FILES ${LIBZIP_LIBRARY_DIR}/${ziplib_name}
89+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
90+
install(FILES ${ZLIB_LIBRARY_DIR}/${zlib_name}
91+
DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
92+
endif()
893
endif ()
994

1095
foreach (MODEL_NAME ${MODEL_NAMES})
1196
set(TARGET_MODEL_NAME mmdeploy_${MODEL_NAME})
1297
mmdeploy_add_module(${TARGET_MODEL_NAME} ${MODEL_NAME}_impl.cpp)
1398
if (${MODEL_NAME} STREQUAL "zip_model")
14-
find_package(libzip QUIET)
15-
if (libzip_FOUND)
16-
target_link_libraries(${TARGET_MODEL_NAME} PUBLIC libzip::zip)
17-
else ()
18-
target_link_libraries(${TARGET_MODEL_NAME} PUBLIC zip)
19-
endif ()
99+
target_link_libraries(${TARGET_MODEL_NAME} PRIVATE ${ziplibs})
100+
target_link_directories(${TARGET_MODEL_NAME} INTERFACE
101+
$<INSTALL_INTERFACE:lib>)
102+
target_include_directories(${TARGET_MODEL_NAME} PRIVATE
103+
$<BUILD_INTERFACE:${LIBZIP_INCLUDE_DIR}>)
20104
endif ()
21105
add_library(mmdeploy::${MODEL_NAME} ALIAS ${TARGET_MODEL_NAME})
22106
endforeach ()

tools/package_tools/generate_build_config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ def generate_config(args):
121121
cmake_cfg[
122122
'MMDEPLOY_DYNAMIC_BACKEND'] = 'ON' \
123123
if args.sdk_dynamic_net else 'OFF'
124+
cmake_cfg['MMDEPLOY_ZIP_MODEL'] = 'ON'
124125

125126
if args.opencv_dir:
126127
cmake_cfg['OpenCV_DIR'] = args.opencv_dir

0 commit comments

Comments
 (0)