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
-)
|