11include (CMakeDependentOption )
22cmake_dependent_option (LPAC_DYNAMIC_DRIVERS "Build lpac/libeuicc driver backends as a dynamic library" OFF "LPAC_DYNAMIC_LIBEUICC" OFF )
3+ cmake_dependent_option (LPAC_DYNAMIC_DRIVERS_SOLID "Build lpac/libeuicc driver backends as a solid dynamic library" OFF "LPAC_DYNAMIC_LIBEUICC AND LPAC_DYNAMIC_DRIVERS" OFF )
34
45option (LPAC_WITH_APDU_PCSC "Build APDU PCSC Backend (requires PCSC libraries)" ON )
56option (LPAC_WITH_APDU_AT "Build APDU AT Backend" ON )
@@ -14,7 +15,7 @@ cmake_dependent_option(LPAC_WITH_HTTP_WINHTTP "Build HTTP WinHTTP interface (Win
1415aux_source_directory (${CMAKE_CURRENT_SOURCE_DIR} DIR_INTERFACE_SRCS )
1516if (LPAC_DYNAMIC_DRIVERS)
1617 add_library (euicc-drivers SHARED ${DIR_INTERFACE_SRCS} )
17- list (APPEND LIBEUICC_DRIVERS_REQUIRES "libeuicc = ${PROJECT_VERSION} " )
18+ list (APPEND LIBEUICC_DRIVERS_REQUIRES0 "libeuicc = ${PROJECT_VERSION} " )
1819else ()
1920 add_library (euicc-drivers STATIC ${DIR_INTERFACE_SRCS} )
2021endif ()
@@ -24,11 +25,17 @@ target_include_directories(euicc-drivers PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
2425target_sources (euicc-drivers PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /apdu/stdio.c )
2526target_sources (euicc-drivers PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /http/stdio.c )
2627
28+ if ((LPAC_DYNAMIC_DRIVERS AND LPAC_DYNAMIC_DRIVERS_SOLID) OR NOT LPAC_DYNAMIC_DRIVERS)
29+ set (DRIVER_BUILD_TYPE OBJECT)
30+ else ()
31+ set (DRIVER_BUILD_TYPE SHARED)
32+ endif ()
33+
2734if (LPAC_WITH_APDU_PCSC)
28- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_PCSC )
29- add_library (driver_apdu_pcsc OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /apdu/pcsc.c )
35+ add_library (driver_apdu_pcsc ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /apdu/pcsc.c )
3036 target_include_directories (driver_apdu_pcsc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
3137 target_link_libraries (driver_apdu_pcsc PRIVATE euicc cjson-ext lpac-utils )
38+ set_target_properties (driver_apdu_pcsc PROPERTIES PREFIX "" )
3239 if (WIN32 )
3340 target_sources (driver_apdu_pcsc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /apdu/pcsc_win32.c )
3441 target_link_libraries (driver_apdu_pcsc PRIVATE winscard )
@@ -40,18 +47,16 @@ if (LPAC_WITH_APDU_PCSC)
4047 else ()
4148 find_package (PCSCLite REQUIRED )
4249 target_link_libraries (driver_apdu_pcsc PRIVATE PCSCLite::PCSCLite )
43- if (LPAC_DYNAMIC_DRIVERS)
44- list (APPEND LIBEUICC_DRIVERS_REQUIRES "libpcsclite" )
45- endif ()
50+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "libpcsclite" )
4651 endif ()
4752 list (APPEND LPAC_DRIVERS "driver_apdu_pcsc" )
4853endif ()
4954
5055if (LPAC_WITH_APDU_AT)
51- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_AT )
52- add_library (driver_apdu_at OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /apdu/at_common.c )
56+ add_library (driver_apdu_at ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /apdu/at_common.c )
5357 target_include_directories (driver_apdu_at PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
5458 target_link_libraries (driver_apdu_at PRIVATE euicc lpac-utils )
59+ set_target_properties (driver_apdu_at PROPERTIES PREFIX "" )
5560 if (UNIX )
5661 target_sources (driver_apdu_at PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /apdu/at_unix.c )
5762 elseif (WIN32 )
@@ -64,17 +69,15 @@ if (LPAC_WITH_APDU_AT)
6469endif ()
6570
6671if (LPAC_WITH_APDU_GBINDER)
67- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_GBINDER )
68- add_library (driver_apdu_gbinder OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /apdu/gbinder_hidl.c )
72+ add_library (driver_apdu_gbinder ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /apdu/gbinder_hidl.c )
6973 target_include_directories (driver_apdu_gbinder PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
74+ set_target_properties (driver_apdu_gbinder PROPERTIES PREFIX "" )
7075 find_package (PkgConfig REQUIRED )
7176 pkg_check_modules (GBINDER REQUIRED IMPORTED_TARGET libgbinder )
7277 pkg_check_modules (GLIB REQUIRED IMPORTED_TARGET glib-2.0 )
7378 target_link_libraries (driver_apdu_gbinder PkgConfig::GBINDER PkgConfig::GLIB )
74- if (LPAC_DYNAMIC_DRIVERS)
75- list (APPEND LIBEUICC_DRIVERS_REQUIRES "libgbinder" )
76- list (APPEND LIBEUICC_DRIVERS_REQUIRES "glib-2.0" )
77- endif ()
79+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "libgbinder" )
80+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "glib-2.0" )
7881 list (APPEND LPAC_DRIVERS "driver_apdu_gbinder" )
7982endif ()
8083
@@ -89,14 +92,11 @@ if (LPAC_WITH_APDU_QMI OR LPAC_WITH_APDU_QMI_QRTR)
8992 pkg_check_modules (QMI_GLIB REQUIRED IMPORTED_TARGET qmi-glib>=1.35.5 )
9093 target_link_libraries (qmi_common PkgConfig::QMI_GLIB )
9194
92- if (LPAC_DYNAMIC_DRIVERS)
93- list (APPEND LIBEUICC_DRIVERS_REQUIRES "qmi-glib" )
94- endif ()
95+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "qmi-glib" )
9596endif ()
9697
9798if (LPAC_WITH_APDU_QMI)
98- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_QMI )
99- add_library (driver_apdu_qmi OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /apdu/qmi.c )
99+ add_library (driver_apdu_qmi ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /apdu/qmi.c )
100100 target_include_directories (driver_apdu_qmi PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
101101 target_link_libraries (driver_apdu_qmi PRIVATE qmi_common )
102102 set_target_properties (driver_apdu_qmi PROPERTIES PREFIX "" )
@@ -105,22 +105,17 @@ if (LPAC_WITH_APDU_QMI)
105105endif ()
106106
107107if (LPAC_WITH_APDU_QMI_QRTR)
108- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_QMI_QRTR )
109- add_library (driver_apdu_qmi_qrtr OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /apdu/qmi_qrtr.c )
108+ add_library (driver_apdu_qmi_qrtr ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /apdu/qmi_qrtr.c )
110109 target_include_directories (driver_apdu_qmi_qrtr PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
111110 target_link_libraries (driver_apdu_qmi_qrtr PRIVATE qmi_common )
112111 set_target_properties (driver_apdu_qmi_qrtr PROPERTIES PREFIX "" )
113112 target_compile_definitions (qmi_common PRIVATE LPAC_WITH_DRIVER_APDU_QMI_QRTR )
114-
115- if (LPAC_DYNAMIC_DRIVERS)
116- list (APPEND LIBEUICC_DRIVERS_REQUIRES "qrtr-glib" )
117- endif ()
113+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "qrtr-glib" )
118114 list (APPEND LPAC_DRIVERS "driver_apdu_qmi_qrtr" )
119115endif ()
120116
121117if (LPAC_WITH_APDU_MBIM)
122- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_APDU_MBIM )
123- add_library (driver_apdu_mbim OBJECT
118+ add_library (driver_apdu_mbim ${DRIVER_BUILD_TYPE}
124119 ${CMAKE_CURRENT_SOURCE_DIR} /apdu/mbim.c
125120 ${CMAKE_CURRENT_SOURCE_DIR} /apdu/mbim_helpers.c )
126121 target_include_directories (driver_apdu_mbim PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
@@ -131,39 +126,46 @@ if (LPAC_WITH_APDU_MBIM)
131126 pkg_check_modules (MBIM_GLIB REQUIRED IMPORTED_TARGET mbim-glib>=1.26.0 )
132127 target_link_libraries (driver_apdu_mbim PkgConfig::MBIM_GLIB PkgConfig::MBIM_GLIB )
133128
134- if (LPAC_DYNAMIC_DRIVERS)
135- list (APPEND LIBEUICC_DRIVERS_REQUIRES "mbim-glib" )
136- endif ()
129+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "mbim-glib" )
137130 list (APPEND LPAC_DRIVERS "driver_apdu_mbim" )
138131endif ()
139132
140133if (LPAC_WITH_HTTP_CURL)
141- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_HTTP_CURL )
142- add_library (driver_http_curl OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /http/curl.c )
134+ add_library (driver_http_curl ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /http/curl.c )
143135 target_include_directories (driver_http_curl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
144136 target_link_libraries (driver_http_curl PRIVATE euicc lpac-utils )
137+ set_target_properties (driver_http_curl PROPERTIES PREFIX "" )
145138 if (WIN32 )
146139 target_link_libraries (driver_http_curl PRIVATE ${DL_LIBRARY} )
147140 else ()
148141 find_package (CURL REQUIRED )
149142 target_link_libraries (driver_http_curl PRIVATE curl )
150- if (LPAC_DYNAMIC_DRIVERS)
151- list (APPEND LIBEUICC_DRIVERS_REQUIRES "libcurl" )
152- endif ()
143+ list (APPEND LIBEUICC_DRIVERS_REQUIRES "libcurl" )
153144 endif ()
154145 list (APPEND LPAC_DRIVERS "driver_http_curl" )
155146endif ()
156147
157148if (LPAC_WITH_HTTP_WINHTTP)
158- target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_HTTP_WINHTTP )
159- add_library (driver_http_winhttp OBJECT ${CMAKE_CURRENT_SOURCE_DIR} /http/winhttp.c )
149+ add_library (driver_http_winhttp ${DRIVER_BUILD_TYPE} ${CMAKE_CURRENT_SOURCE_DIR} /http/winhttp.c )
160150 target_include_directories (driver_http_winhttp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
161151 target_link_libraries (driver_http_winhttp PRIVATE winhttp euicc lpac-utils )
162152 set_target_properties (driver_http_winhttp PROPERTIES PREFIX "" )
163153 list (APPEND LPAC_DRIVERS "driver_http_winhttp" )
164154endif ()
165155
166- target_link_libraries (euicc-drivers PUBLIC ${LPAC_DRIVERS} )
156+ if ((LPAC_DYNAMIC_DRIVERS AND LPAC_DYNAMIC_DRIVERS_SOLID) OR NOT LPAC_DYNAMIC_DRIVERS)
157+ foreach (driver ${LPAC_DRIVERS} )
158+ string (TOUPPER ${driver} DRIVER_MACRO)
159+ target_compile_definitions (euicc-drivers PRIVATE LPAC_WITH_${DRIVER_MACRO} )
160+ endforeach ()
161+ target_link_libraries (euicc-drivers PUBLIC ${LPAC_DRIVERS} )
162+ list (APPEND LIBEUICC_DRIVERS_REQUIRES0 ${LIBEUICC_DRIVERS_REQUIRES} )
163+ else ()
164+ foreach (driver ${LPAC_DRIVERS} )
165+ install (TARGETS ${driver} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} /lpac)
166+ endforeach ()
167+ endif ()
168+
167169
168170if (LPAC_DYNAMIC_DRIVERS)
169171 # Install headers
@@ -176,7 +178,7 @@ if(LPAC_DYNAMIC_DRIVERS)
176178 set_target_properties (euicc-drivers PROPERTIES PUBLIC_HEADER "${ALL_HEADERS} " )
177179 # Install a pkg-config file (mainly for Linux; macOS is untested; Win32 is not supported)
178180 if (UNIX )
179- list (JOIN LIBEUICC_DRIVERS_REQUIRES ", " LIBEUICC_DRIVERS_REQUIRES)
181+ list (JOIN LIBEUICC_DRIVERS_REQUIRES0 ", " LIBEUICC_DRIVERS_REQUIRES)
180182 configure_file (libeuicc-drivers.pc.in libeuicc-drivers.pc @ONLY )
181183 install (FILES ${CMAKE_CURRENT_BINARY_DIR} /libeuicc-drivers.pc DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
182184 endif ()
0 commit comments