Skip to content

Commit 6ec9b72

Browse files
committed
build: cmake: Support platform-aware dynamic/static targets matching backup branch logic
1 parent fd1dc92 commit 6ec9b72

1 file changed

Lines changed: 113 additions & 64 deletions

File tree

CMakeLists.txt

Lines changed: 113 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -129,29 +129,9 @@ function(opencsd_stage_shared_libs target)
129129
return()
130130
endif()
131131

132-
foreach(shared_tgt IN ITEMS opencsd opencsd_c_api)
133-
if(WIN32)
134-
add_custom_command(TARGET ${target} POST_BUILD
135-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
136-
$<TARGET_FILE:${shared_tgt}>
137-
$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_NAME:${shared_tgt}>
138-
VERBATIM
139-
)
140-
else()
141-
add_custom_command(TARGET ${target} POST_BUILD
142-
COMMAND ${CMAKE_COMMAND} -E copy_if_different
143-
$<TARGET_FILE:${shared_tgt}>
144-
$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_NAME:${shared_tgt}>
145-
COMMAND ${CMAKE_COMMAND} -E create_symlink
146-
$<TARGET_FILE_NAME:${shared_tgt}>
147-
$<TARGET_FILE_DIR:${target}>/$<TARGET_SONAME_FILE_NAME:${shared_tgt}>
148-
COMMAND ${CMAKE_COMMAND} -E create_symlink
149-
$<TARGET_SONAME_FILE_NAME:${shared_tgt}>
150-
$<TARGET_FILE_DIR:${target}>/$<TARGET_LINKER_FILE_NAME:${shared_tgt}>
151-
VERBATIM
152-
)
153-
endif()
154-
endforeach()
132+
if(TARGET stage_shared_libs)
133+
add_dependencies(${target} stage_shared_libs)
134+
endif()
155135
endfunction()
156136

157137
function(opencsd_add_test_executable target)
@@ -229,28 +209,7 @@ set(SNAPSHOT_PARSER_SRCS
229209
decoder/tests/snapshot_parser_lib/source/ss_to_dcdtree.cpp
230210
)
231211

232-
if(OPENCSD_BUILD_MIN_LIB_STATIC)
233-
add_library(opencsd STATIC ${OPENCSD_SRCS})
234-
add_library(OpenCSD::opencsd ALIAS opencsd)
235-
target_link_libraries(opencsd PUBLIC opencsd_options)
236-
target_include_directories(opencsd PRIVATE decoder/source)
237-
set_target_properties(opencsd PROPERTIES
238-
VERSION ${PROJECT_VERSION}
239-
SOVERSION ${PROJECT_VERSION_MAJOR}
240-
)
241-
242-
add_library(opencsd_c_api STATIC ${OPENCSD_C_API_SRCS})
243-
add_library(OpenCSD::opencsd_c_api ALIAS opencsd_c_api)
244-
target_link_libraries(opencsd_c_api PUBLIC opencsd PRIVATE opencsd_options)
245-
target_include_directories(opencsd_c_api PRIVATE decoder/source)
246-
if(WIN32)
247-
target_compile_definitions(opencsd_c_api PUBLIC OCSD_USE_STATIC_C_API)
248-
endif()
249-
set_target_properties(opencsd_c_api PROPERTIES
250-
VERSION ${PROJECT_VERSION}
251-
SOVERSION ${PROJECT_VERSION_MAJOR}
252-
)
253-
else()
212+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
254213
add_library(opencsd_obj OBJECT ${OPENCSD_SRCS})
255214
target_link_libraries(opencsd_obj PRIVATE opencsd_options)
256215
target_include_directories(opencsd_obj PRIVATE decoder/source)
@@ -262,20 +221,20 @@ else()
262221
VERSION ${PROJECT_VERSION}
263222
SOVERSION ${PROJECT_VERSION_MAJOR}
264223
)
265-
if(WIN32)
266-
set_target_properties(opencsd PROPERTIES
267-
RUNTIME_OUTPUT_NAME opencsd
268-
ARCHIVE_OUTPUT_NAME opencsd_dll
269-
)
270-
endif()
271224
opencsd_set_output_dirs(opencsd "lib")
272225

273226
add_library(opencsd_static STATIC $<TARGET_OBJECTS:opencsd_obj>)
274227
add_library(OpenCSD::opencsd_static ALIAS opencsd_static)
275228
target_link_libraries(opencsd_static PUBLIC opencsd_options)
276-
set_target_properties(opencsd_static PROPERTIES
277-
OUTPUT_NAME opencsd
278-
)
229+
if(WIN32)
230+
set_target_properties(opencsd_static PROPERTIES
231+
OUTPUT_NAME opencsd
232+
)
233+
else()
234+
set_target_properties(opencsd_static PROPERTIES
235+
OUTPUT_NAME opencsd_static
236+
)
237+
endif()
279238
opencsd_set_output_dirs(opencsd_static "lib")
280239

281240
add_library(opencsd_c_api_obj_shared OBJECT ${OPENCSD_C_API_SRCS})
@@ -296,12 +255,6 @@ else()
296255
VERSION ${PROJECT_VERSION}
297256
SOVERSION ${PROJECT_VERSION_MAJOR}
298257
)
299-
if(WIN32)
300-
set_target_properties(opencsd_c_api PROPERTIES
301-
RUNTIME_OUTPUT_NAME opencsd_c_api
302-
ARCHIVE_OUTPUT_NAME opencsd_c_api_dll
303-
)
304-
endif()
305258
opencsd_set_output_dirs(opencsd_c_api "lib")
306259

307260
add_library(opencsd_c_api_obj_static OBJECT ${OPENCSD_C_API_SRCS})
@@ -317,17 +270,81 @@ else()
317270
if(WIN32)
318271
target_compile_definitions(opencsd_c_api_static INTERFACE OCSD_USE_STATIC_C_API)
319272
endif()
320-
set_target_properties(opencsd_c_api_static PROPERTIES
321-
OUTPUT_NAME opencsd_c_api
322-
)
273+
if(WIN32)
274+
set_target_properties(opencsd_c_api_static PROPERTIES
275+
OUTPUT_NAME opencsd_c_api
276+
)
277+
else()
278+
set_target_properties(opencsd_c_api_static PROPERTIES
279+
OUTPUT_NAME opencsd_c_api_static
280+
)
281+
endif()
323282
opencsd_set_output_dirs(opencsd_c_api_static "lib")
324283

284+
if(OPENCSD_FULL_PROJECT_LAYOUT)
285+
if(WIN32)
286+
add_custom_target(stage_shared_libs
287+
COMMAND ${CMAKE_COMMAND} -E make_directory "${OPENCSD_BIN_OUT}"
288+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
289+
$<TARGET_FILE:opencsd>
290+
"${OPENCSD_BIN_OUT}/$<TARGET_FILE_NAME:opencsd>"
291+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
292+
$<TARGET_FILE:opencsd_c_api>
293+
"${OPENCSD_BIN_OUT}/$<TARGET_FILE_NAME:opencsd_c_api>"
294+
)
295+
else()
296+
add_custom_target(stage_shared_libs
297+
COMMAND ${CMAKE_COMMAND} -E make_directory "${OPENCSD_BIN_OUT}"
298+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
299+
$<TARGET_FILE:opencsd>
300+
"${OPENCSD_BIN_OUT}/$<TARGET_FILE_NAME:opencsd>"
301+
COMMAND ${CMAKE_COMMAND} -E create_symlink
302+
$<TARGET_FILE_NAME:opencsd>
303+
"${OPENCSD_BIN_OUT}/$<TARGET_SONAME_FILE_NAME:opencsd>"
304+
COMMAND ${CMAKE_COMMAND} -E create_symlink
305+
$<TARGET_SONAME_FILE_NAME:opencsd>
306+
"${OPENCSD_BIN_OUT}/$<TARGET_LINKER_FILE_NAME:opencsd>"
307+
COMMAND ${CMAKE_COMMAND} -E copy_if_different
308+
$<TARGET_FILE:opencsd_c_api>
309+
"${OPENCSD_BIN_OUT}/$<TARGET_FILE_NAME:opencsd_c_api>"
310+
COMMAND ${CMAKE_COMMAND} -E create_symlink
311+
$<TARGET_FILE_NAME:opencsd_c_api>
312+
"${OPENCSD_BIN_OUT}/$<TARGET_SONAME_FILE_NAME:opencsd_c_api>"
313+
COMMAND ${CMAKE_COMMAND} -E create_symlink
314+
$<TARGET_SONAME_FILE_NAME:opencsd_c_api>
315+
"${OPENCSD_BIN_OUT}/$<TARGET_LINKER_FILE_NAME:opencsd_c_api>"
316+
)
317+
endif()
318+
add_dependencies(stage_shared_libs opencsd opencsd_c_api)
319+
endif()
320+
325321
add_custom_target(libs DEPENDS
326322
opencsd
327323
opencsd_static
328324
opencsd_c_api
329325
opencsd_c_api_static
330326
)
327+
else()
328+
add_library(opencsd STATIC ${OPENCSD_SRCS})
329+
add_library(OpenCSD::opencsd ALIAS opencsd)
330+
target_link_libraries(opencsd PUBLIC opencsd_options)
331+
target_include_directories(opencsd PRIVATE decoder/source)
332+
set_target_properties(opencsd PROPERTIES
333+
VERSION ${PROJECT_VERSION}
334+
SOVERSION ${PROJECT_VERSION_MAJOR}
335+
)
336+
337+
add_library(opencsd_c_api STATIC ${OPENCSD_C_API_SRCS})
338+
add_library(OpenCSD::opencsd_c_api ALIAS opencsd_c_api)
339+
target_link_libraries(opencsd_c_api PUBLIC opencsd PRIVATE opencsd_options)
340+
target_include_directories(opencsd_c_api PRIVATE decoder/source)
341+
if(WIN32)
342+
target_compile_definitions(opencsd_c_api PUBLIC OCSD_USE_STATIC_C_API)
343+
endif()
344+
set_target_properties(opencsd_c_api PROPERTIES
345+
VERSION ${PROJECT_VERSION}
346+
SOVERSION ${PROJECT_VERSION_MAJOR}
347+
)
331348
endif()
332349

333350
if(BUILD_TESTING)
@@ -506,7 +523,39 @@ if(BUILD_TESTING AND NOT OPENCSD_BUILD_MIN_LIB_STATIC)
506523
install(FILES decoder/docs/man/trc_pkt_lister.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
507524
endif()
508525

509-
install(DIRECTORY decoder/include/opencsd/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd)
526+
install(FILES
527+
decoder/include/opencsd/trc_gen_elem_types.h
528+
decoder/include/opencsd/ocsd_if_types.h
529+
decoder/include/opencsd/ocsd_if_version.h
530+
decoder/include/opencsd/trc_pkt_types.h
531+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd
532+
)
533+
install(FILES
534+
decoder/include/opencsd/ptm/trc_pkt_types_ptm.h
535+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/ptm
536+
)
537+
install(FILES
538+
decoder/include/opencsd/stm/trc_pkt_types_stm.h
539+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/stm
540+
)
541+
install(FILES
542+
decoder/include/opencsd/etmv3/trc_pkt_types_etmv3.h
543+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/etmv3
544+
)
545+
install(FILES
546+
decoder/include/opencsd/etmv4/trc_pkt_types_etmv4.h
547+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/etmv4
548+
)
549+
install(FILES
550+
decoder/include/opencsd/ete/trc_pkt_types_ete.h
551+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/ete
552+
)
553+
install(FILES
554+
decoder/include/opencsd/c_api/ocsd_c_api_types.h
555+
decoder/include/opencsd/c_api/opencsd_c_api.h
556+
decoder/include/opencsd/c_api/ocsd_c_api_custom.h
557+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/opencsd/c_api
558+
)
510559

511560
install(EXPORT OpenCSDTargets
512561
FILE OpenCSDTargets.cmake

0 commit comments

Comments
 (0)