Skip to content

Commit

Permalink
Merge pull request #150 from HappySeaFox/feature/remove-sail-codecs-o…
Browse files Browse the repository at this point in the history
…bjects

CODECS: Remove sail-codecs-objects as it's not needed anymore. enable…
  • Loading branch information
HappySeaFox committed Feb 7, 2022
2 parents cf6f5a4 + d4f4417 commit 3d93b90
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 117 deletions.
93 changes: 16 additions & 77 deletions src/sail-codecs-archive/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,86 +46,25 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/enabled_codecs.c.in

# Add a combined library
#
if (BUILD_SHARED_LIBS)
add_library(sail-codecs ${CMAKE_CURRENT_BINARY_DIR}/enabled_codecs.c)
target_link_libraries(sail-codecs PRIVATE sail-common)
add_library(sail-codecs ${CMAKE_CURRENT_BINARY_DIR}/enabled_codecs.c)
target_link_libraries(sail-codecs PRIVATE sail-common)

foreach(CODEC ${ENABLED_CODECS})
target_link_libraries(sail-codecs PRIVATE $<BUILD_INTERFACE:sail-codec-${CODEC}>)
endforeach()

sail_install_pdb(TARGET sail-codecs)

install(TARGETS sail-codecs
EXPORT SailCodecsTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sail/sail-codecs)
else()
add_library(sail-codecs-objects codecs_objects_stub.c)
target_link_libraries(sail-codecs-objects PRIVATE sail-common)

# BUILD_INTERFACE is needed as CMake tries to export all the sail-codec-${CODEC} dependencies
# in the below install(TARGETS) command even though they are OBJECT libraries. This is why we also
# use target_link_libraries(sail-codecs INTERFACE ...) later.
#
foreach(CODEC ${ENABLED_CODECS})
target_link_libraries(sail-codecs-objects PRIVATE $<BUILD_INTERFACE:sail-codec-${CODEC}>)
endforeach()

sail_install_pdb(TARGET sail-codecs-objects)

# Add an extra library to link against it with a special 'whole archive' option.
# Without that option compilers throw functions away as they think they're unreferenced.
# We use dlsym/GetProcAddress to access them.
#
add_library(sail-codecs ${CMAKE_CURRENT_BINARY_DIR}/enabled_codecs.c)
target_link_libraries(sail-codecs PRIVATE sail-common)

sail_install_pdb(TARGET sail-codecs)

# Generate a 'whole archive' expression per compiler
#
set(ALLOWED_COMPILERS "MSVC" "Clang" "AppleClang" "GNU")
list(FIND ALLOWED_COMPILERS ${CMAKE_C_COMPILER_ID} ALLOWED_COMPILERS_INDEX)

if (ALLOWED_COMPILERS_INDEX LESS 0)
message(FATAL_ERROR "Don't know how to build a compiler option for '${CMAKE_C_COMPILER_ID}'")
endif()

target_link_libraries(
sail-codecs
PRIVATE
$<BUILD_INTERFACE:$<$<C_COMPILER_ID:MSVC>:-WHOLEARCHIVE:$<TARGET_FILE:sail-codecs-objects>>>
$<BUILD_INTERFACE:$<$<C_COMPILER_ID:Clang>:-Wl,-force_load,$<TARGET_FILE:sail-codecs-objects>>>
$<BUILD_INTERFACE:$<$<C_COMPILER_ID:AppleClang>:-Wl,-force_load,$<TARGET_FILE:sail-codecs-objects>>>
$<BUILD_INTERFACE:$<$<C_COMPILER_ID:GNU>:-Wl,--whole-archive\ $<TARGET_FILE:sail-codecs-objects>\ -Wl,--no-whole-archive>>
$<INSTALL_INTERFACE:$<$<C_COMPILER_ID:MSVC>:-WHOLEARCHIVE:$<TARGET_FILE:SAIL::sail-codecs-objects>>>
$<INSTALL_INTERFACE:$<$<C_COMPILER_ID:Clang>:-Wl,-force_load,$<TARGET_FILE:SAIL::sail-codecs-objects>>>
$<INSTALL_INTERFACE:$<$<C_COMPILER_ID:AppleClang>:-Wl,-force_load,$<TARGET_FILE:SAIL::sail-codecs-objects>>>
$<INSTALL_INTERFACE:$<$<C_COMPILER_ID:GNU>:-Wl,--whole-archive\ $<TARGET_FILE:SAIL::sail-codecs-objects>\ -Wl,--no-whole-archive>>
)

# sail-codecs depends on sail-codecs-objects indirectly through the above link command.
# Make the dependency explicit.
#
add_dependencies(sail-codecs sail-codecs-objects)
# BUILD_INTERFACE is needed as CMake tries to export all the sail-codec-${CODEC} dependencies
# in the below install(TARGETS) command even though they are OBJECT libraries.
#
foreach(CODEC ${ENABLED_CODECS})
target_link_libraries(sail-codecs PRIVATE $<BUILD_INTERFACE:sail-codec-${CODEC}>)
endforeach()

# External dependencies like libavif are exported through interfaces, grab them
#
foreach(CODEC ${ENABLED_CODECS})
target_link_libraries(sail-codecs INTERFACE $<BUILD_INTERFACE:sail-codec-${CODEC}>)
endforeach()
target_include_directories(sail-codecs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../libsail)

install(TARGETS sail-codecs-objects sail-codecs
EXPORT SailCodecsTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sail/sail-codecs)
endif()
sail_install_pdb(TARGET sail-codecs)

target_include_directories(sail-codecs PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../libsail)
install(TARGETS sail-codecs
EXPORT SailCodecsTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sail/sail-codecs)

sail_install_cmake_config(TARGET "SailCodecs" FOLDER "sailcodecs" VERSION 1.0.0)
40 changes: 0 additions & 40 deletions src/sail-codecs-archive/codecs_objects_stub.c

This file was deleted.

0 comments on commit 3d93b90

Please sign in to comment.