1
0
Fork 0

Workaround cmake's random library order in external_ffmpeg

This commit is contained in:
Ilya Fedin 2022-04-19 15:54:00 +04:00 committed by John Preston
parent b8b517a5e0
commit 2e1d9c80d9

View file

@ -24,45 +24,64 @@ if (DESKTOP_APP_USE_PACKAGED)
PkgConfig::SWSCALE PkgConfig::SWSCALE
PkgConfig::SWRESAMPLE PkgConfig::SWRESAMPLE
) )
return()
endif()
set(ffmpeg_lib_list)
if (LINUX)
list(APPEND ffmpeg_lib_list
-lavformat
-lavcodec
-lswresample
-lswscale
-lavutil
)
else() else()
if (LINUX) set(ffmpeg_lib_loc ${libs_loc}/ffmpeg)
target_link_static_libraries(external_ffmpeg
INTERFACE
avformat
avcodec
swresample
swscale
avutil
)
else()
set(ffmpeg_lib_loc ${libs_loc}/ffmpeg)
target_include_directories(external_ffmpeg SYSTEM target_include_directories(external_ffmpeg SYSTEM
INTERFACE
${ffmpeg_lib_loc}
)
target_link_libraries(external_ffmpeg
INTERFACE
${ffmpeg_lib_loc}/libavformat/libavformat.a
${ffmpeg_lib_loc}/libavcodec/libavcodec.a
${ffmpeg_lib_loc}/libswresample/libswresample.a
${ffmpeg_lib_loc}/libswscale/libswscale.a
${ffmpeg_lib_loc}/libavutil/libavutil.a
)
endif()
target_link_libraries(external_ffmpeg
INTERFACE INTERFACE
$<LINK_ONLY:desktop-app::external_opus> ${ffmpeg_lib_loc}
$<TARGET_FILE:desktop-app::external_opus>
$<LINK_ONLY:desktop-app::external_vpx>
$<TARGET_FILE:desktop-app::external_vpx>
) )
if (APPLE) list(APPEND ffmpeg_lib_list
target_link_libraries(external_ffmpeg INTERFACE bz2) ${ffmpeg_lib_loc}/libavformat/libavformat.a
elseif (LINUX) ${ffmpeg_lib_loc}/libavcodec/libavcodec.a
target_link_static_libraries(external_ffmpeg INTERFACE lzma) ${ffmpeg_lib_loc}/libswresample/libswresample.a
endif() ${ffmpeg_lib_loc}/libswscale/libswscale.a
${ffmpeg_lib_loc}/libavutil/libavutil.a
)
endif() endif()
list(APPEND ffmpeg_lib_list
$<TARGET_FILE:desktop-app::external_opus>
$<TARGET_FILE:desktop-app::external_vpx>
)
if (APPLE)
list(APPEND ffmpeg_lib_list bz2)
elseif (LINUX)
list(APPEND ffmpeg_lib_list -llzma)
endif()
# Workaround cmake's random order on Linux...
if (LINUX)
list(JOIN ffmpeg_lib_list , ffmpeg_lib_link)
target_link_libraries(external_ffmpeg
INTERFACE
-Wl,--push-state,-Bstatic,${ffmpeg_lib_link},--pop-state
)
else()
target_link_libraries(external_ffmpeg
INTERFACE
${ffmpeg_lib_list}
)
endif()
target_link_libraries(external_ffmpeg
INTERFACE
$<LINK_ONLY:desktop-app::external_opus>
$<LINK_ONLY:desktop-app::external_vpx>
)