File: cmake-shared-and-static-targets

package info (click to toggle)
codec2 1.0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 121,056 kB
  • sloc: ansic: 414,118; sh: 2,612; objc: 2,574; python: 2,105; cpp: 2,091; asm: 683; makefile: 598
file content (138 lines) | stat: -rw-r--r-- 4,407 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -129,7 +129,9 @@
 # Default options
 #
 option(BUILD_SHARED_LIBS
-    "Build shared library. Set to OFF for static library." ON)
+    "Build shared library." ON)
+option(BUILD_STATIC_LIBS
+    "Build static library." ON)
 option(UNITTEST "Build unittest binaries." OFF)
 option(INSTALL_EXAMPLES "Install example code." OFF)
 if(INSTALL_EXAMPLES)
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -241,6 +241,87 @@
 # Patch level version bumps should not change API/ABI.
 set(SOVERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}")
 message(STATUS "codec2 version: ${CODEC2_VERSION}")
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+if(${BUILD_SHARED_LIBS} AND ${BUILD_STATIC_LIBS})
+add_library(codec2-shared SHARED ${CODEC2_SRCS})
+if(UNIX)
+    target_link_libraries(codec2-shared PUBLIC m)
+endif(UNIX)
+if(LPCNET AND lpcnetfreedv_FOUND)
+    target_link_libraries(codec2-shared PRIVATE lpcnetfreedv)
+    list(APPEND CODEC2_PUBLIC_HEADERS ${CMAKE_SOURCE_DIR}/lpcnet/src/lpcnet_freedv.h)
+endif()
+set_target_properties(codec2-shared PROPERTIES
+    OUTPUT_NAME codec2
+    CLEAN_DIRECT_OUTPUT 1
+    SOVERSION ${SOVERSION}
+    PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}"
+)
+
+add_library(codec2-static ${CODEC2_SRCS})
+if(UNIX)
+    target_link_libraries(codec2-static PUBLIC m)
+endif(UNIX)
+if(LPCNET AND lpcnetfreedv_FOUND)
+    target_link_libraries(codec2-static PRIVATE lpcnetfreedv)
+endif()
+set_target_properties(codec2-static PROPERTIES
+    OUTPUT_NAME codec2
+    CLEAN_DIRECT_OUTPUT 1
+    PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}"
+)
+
+add_library(codec2 INTERFACE)
+target_link_libraries(codec2 INTERFACE codec2-shared)
+
+# Required include directories for export
+target_include_directories(codec2-shared INTERFACE
+    $<INSTALL_INTERFACE:include/codec2>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+    $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
+)
+target_include_directories(codec2-static INTERFACE
+    $<INSTALL_INTERFACE:include/codec2>
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+    $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>
+)
+
+# Export config for import from full install
+install(EXPORT codec2Targets
+    FILE codec2Targets.cmake
+    NAMESPACE codec2::
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2
+)
+
+# Export config for import from build tree.
+export(TARGETS codec2 codec2-shared
+    FILE ${CMAKE_BINARY_DIR}/codec2.cmake
+)
+
+install(TARGETS codec2 codec2-shared codec2-static EXPORT codec2Targets
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 COMPONENT dev
+)
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/codec2Config.cmake"
+  "include(\${CMAKE_CURRENT_LIST_DIR}/codec2Targets.cmake)\n"
+  )
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file("codec2ConfigVersion.cmake"
+  VERSION ${CODEC2_VERSION}
+  COMPATIBILITY SameMajorVersion
+  )
+install(FILES
+  "${CMAKE_CURRENT_BINARY_DIR}/codec2Config.cmake"
+   "${CMAKE_CURRENT_BINARY_DIR}/codec2ConfigVersion.cmake"
+  DESTINATION
+  ${CMAKE_INSTALL_LIBDIR}/cmake/codec2
+  )
+
+else()
 add_library(codec2 ${CODEC2_SRCS})
 if(UNIX)
     target_link_libraries(codec2 PUBLIC m)
@@ -263,7 +344,7 @@
 )
 
 # Export config for import from full install
-install(EXPORT codec2-config
+install(EXPORT codec2Config
     DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2
 )
 
@@ -272,6 +353,14 @@
     FILE ${CMAKE_BINARY_DIR}/codec2.cmake
 )
 
+install(TARGETS codec2 EXPORT codec2Config
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 COMPONENT dev
+)
+endif()
+
 add_executable(c2enc c2enc.c)
 target_link_libraries(c2enc codec2)
 
@@ -396,10 +485,3 @@
 
 add_executable(ldpc_dec ldpc_dec.c)
 target_link_libraries(ldpc_dec codec2)
-
-install(TARGETS codec2 EXPORT codec2-config
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib
-    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 COMPONENT dev
-)