CMakeLists.txt 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # This file is part of Desktop App Toolkit,
  2. # a set of libraries for developing nice desktop applications.
  3. #
  4. # For license and copyright information please follow this link:
  5. # https://github.com/desktop-app/legal/blob/master/LEGAL
  6. add_library(external_ffmpeg INTERFACE IMPORTED GLOBAL)
  7. add_library(desktop-app::external_ffmpeg ALIAS external_ffmpeg)
  8. if (DESKTOP_APP_USE_PACKAGED)
  9. find_package(PkgConfig REQUIRED)
  10. pkg_check_modules(AVFILTER REQUIRED IMPORTED_TARGET libavfilter)
  11. pkg_check_modules(AVFORMAT REQUIRED IMPORTED_TARGET libavformat)
  12. pkg_check_modules(AVCODEC REQUIRED IMPORTED_TARGET libavcodec)
  13. pkg_check_modules(AVUTIL REQUIRED IMPORTED_TARGET libavutil)
  14. pkg_check_modules(SWSCALE REQUIRED IMPORTED_TARGET libswscale)
  15. pkg_check_modules(SWRESAMPLE REQUIRED IMPORTED_TARGET libswresample)
  16. target_link_libraries(external_ffmpeg
  17. INTERFACE
  18. PkgConfig::AVFILTER
  19. PkgConfig::AVFORMAT
  20. PkgConfig::AVCODEC
  21. PkgConfig::AVUTIL
  22. PkgConfig::SWSCALE
  23. PkgConfig::SWRESAMPLE
  24. )
  25. return()
  26. endif()
  27. set(ffmpeg_lib_list)
  28. if (LINUX)
  29. list(APPEND ffmpeg_lib_list
  30. -lavfilter
  31. -lavformat
  32. -lavcodec
  33. -lswresample
  34. -lswscale
  35. -lavutil
  36. )
  37. else()
  38. set(ffmpeg_lib_loc ${libs_loc}/ffmpeg)
  39. target_include_directories(external_ffmpeg SYSTEM
  40. INTERFACE
  41. ${ffmpeg_lib_loc}
  42. )
  43. list(APPEND ffmpeg_lib_list
  44. ${ffmpeg_lib_loc}/libavfilter/libavfilter.a
  45. ${ffmpeg_lib_loc}/libavformat/libavformat.a
  46. ${ffmpeg_lib_loc}/libavcodec/libavcodec.a
  47. ${ffmpeg_lib_loc}/libswresample/libswresample.a
  48. ${ffmpeg_lib_loc}/libswscale/libswscale.a
  49. ${ffmpeg_lib_loc}/libavutil/libavutil.a
  50. )
  51. endif()
  52. list(APPEND ffmpeg_lib_list
  53. $<TARGET_FILE:desktop-app::external_opus>
  54. $<TARGET_FILE:desktop-app::external_vpx>
  55. )
  56. if (WIN32)
  57. list(APPEND ffmpeg_lib_list
  58. ${libs_loc}/dav1d/builddir-$<IF:$<CONFIG:Debug>,debug,release>/src/libdav1d.a
  59. )
  60. elseif (APPLE)
  61. list(APPEND ffmpeg_lib_list
  62. bz2
  63. )
  64. elseif (LINUX)
  65. list(APPEND ffmpeg_lib_list
  66. -ldav1d
  67. -llzma
  68. $<TARGET_FILE:implib_vdpau>
  69. $<TARGET_FILE:implib_va_x11>
  70. $<TARGET_FILE:implib_va_drm>
  71. $<TARGET_FILE:implib_va>
  72. $<TARGET_FILE:implib_drm>
  73. -lXv
  74. -lXext
  75. )
  76. endif()
  77. # Workaround cmake's random order on Linux...
  78. if (LINUX)
  79. generate_implib(
  80. vdpau
  81. va-x11
  82. va-drm
  83. va
  84. drm
  85. )
  86. list(JOIN ffmpeg_lib_list , ffmpeg_lib_link)
  87. target_link_libraries(external_ffmpeg
  88. INTERFACE
  89. -Wl,--push-state,-Bstatic,${ffmpeg_lib_link},--pop-state
  90. $<LINK_ONLY:implib_vdpau>
  91. $<LINK_ONLY:implib_va_x11>
  92. $<LINK_ONLY:implib_va_drm>
  93. $<LINK_ONLY:implib_va>
  94. $<LINK_ONLY:implib_drm>
  95. X11
  96. )
  97. else()
  98. target_link_libraries(external_ffmpeg
  99. INTERFACE
  100. ${ffmpeg_lib_list}
  101. )
  102. endif()
  103. target_link_libraries(external_ffmpeg
  104. INTERFACE
  105. $<LINK_ONLY:desktop-app::external_opus>
  106. $<LINK_ONLY:desktop-app::external_vpx>
  107. )