bare-ffmpeg 1.0.0-9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CMakeLists.txt +32 -10
  2. package/README.md +65 -769
  3. package/binding.cc +5372 -0
  4. package/cmake/ports/ffmpeg/port.cmake +513 -0
  5. package/cmake/ports/libdrm/port.cmake +32 -0
  6. package/cmake/ports/libva/port.cmake +53 -0
  7. package/cmake/ports/opus/patches/01-windows-clang.patch +52 -0
  8. package/cmake/ports/opus/port.cmake +42 -0
  9. package/cmake/ports/svt-av1/port.cmake +42 -0
  10. package/cmake/ports/x264/patches/01-windows-clang.patch +33 -0
  11. package/cmake/ports/x264/port.cmake +162 -0
  12. package/index.js +28 -9
  13. package/lib/audio-fifo.js +47 -0
  14. package/lib/channel-layout.js +35 -0
  15. package/lib/codec-context.js +185 -7
  16. package/lib/codec-parameters.js +252 -4
  17. package/lib/codec.js +16 -0
  18. package/lib/constants.js +339 -12
  19. package/lib/dictionary.js +20 -0
  20. package/lib/errors.js +26 -0
  21. package/lib/filter-context.js +7 -0
  22. package/lib/filter-graph.js +42 -0
  23. package/lib/filter-inout.js +52 -0
  24. package/lib/filter.js +7 -0
  25. package/lib/format-context.js +42 -23
  26. package/lib/frame.js +81 -12
  27. package/lib/hw-device-context.js +31 -0
  28. package/lib/hw-frames-constraints.js +54 -0
  29. package/lib/hw-frames-context.js +92 -0
  30. package/lib/image.js +14 -3
  31. package/lib/input-format.js +36 -2
  32. package/lib/io-context.js +29 -4
  33. package/lib/log.js +16 -0
  34. package/lib/output-format.js +33 -2
  35. package/lib/packet.js +143 -1
  36. package/lib/rational.js +46 -1
  37. package/lib/resampler.js +23 -17
  38. package/lib/samples.js +85 -0
  39. package/lib/scaler.js +3 -9
  40. package/lib/stream.js +51 -14
  41. package/package.json +9 -5
  42. package/prebuilds/android-arm/bare-ffmpeg.bare +0 -0
  43. package/prebuilds/android-arm64/bare-ffmpeg.bare +0 -0
  44. package/prebuilds/android-ia32/bare-ffmpeg.bare +0 -0
  45. package/prebuilds/android-x64/bare-ffmpeg.bare +0 -0
  46. package/prebuilds/darwin-arm64/bare-ffmpeg.bare +0 -0
  47. package/prebuilds/darwin-x64/bare-ffmpeg.bare +0 -0
  48. package/prebuilds/ios-arm64/bare-ffmpeg.bare +0 -0
  49. package/prebuilds/ios-arm64-simulator/bare-ffmpeg.bare +0 -0
  50. package/prebuilds/ios-x64-simulator/bare-ffmpeg.bare +0 -0
  51. package/prebuilds/linux-arm64/bare-ffmpeg/libva-drm.so.2 +0 -0
  52. package/prebuilds/linux-arm64/bare-ffmpeg/libva.so.2 +0 -0
  53. package/prebuilds/linux-arm64/bare-ffmpeg.bare +0 -0
  54. package/prebuilds/linux-x64/bare-ffmpeg/libva-drm.so.2 +0 -0
  55. package/prebuilds/linux-x64/bare-ffmpeg/libva.so.2 +0 -0
  56. package/prebuilds/linux-x64/bare-ffmpeg.bare +0 -0
  57. package/prebuilds/win32-arm64/bare-ffmpeg.bare +0 -0
  58. package/prebuilds/win32-x64/bare-ffmpeg.bare +0 -0
@@ -0,0 +1,513 @@
1
+ include_guard(GLOBAL)
2
+
3
+ set(libraries
4
+ avcodec
5
+ avdevice
6
+ avfilter
7
+ avformat
8
+ avutil
9
+ swresample
10
+ swscale
11
+ )
12
+
13
+ set(byproducts)
14
+
15
+ foreach(name IN LISTS libraries)
16
+ add_library(${name} STATIC IMPORTED GLOBAL)
17
+
18
+ list(APPEND byproducts lib/lib${name}.a)
19
+ endforeach()
20
+
21
+ set(path)
22
+ set(args
23
+ --disable-autodetect
24
+ --disable-doc
25
+ --disable-programs
26
+ --disable-network
27
+
28
+ --enable-pic
29
+ --enable-cross-compile
30
+ )
31
+
32
+ if(CMAKE_BUILD_TYPE MATCHES "Release")
33
+ list(APPEND args --disable-debug)
34
+ elseif(CMAKE_BUILD_TYPE MATCHES "Debug")
35
+ list(APPEND args --disable-optimizations)
36
+ elseif(CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
37
+ list(APPEND args --disable-debug --enable-small)
38
+ endif()
39
+
40
+ if(APPLE AND CMAKE_OSX_ARCHITECTURES)
41
+ set(arch ${CMAKE_OSX_ARCHITECTURES})
42
+ elseif(MSVC AND CMAKE_GENERATOR_PLATFORM)
43
+ set(arch ${CMAKE_GENERATOR_PLATFORM})
44
+ elseif(ANDROID AND CMAKE_ANDROID_ARCH_ABI)
45
+ set(arch ${CMAKE_ANDROID_ARCH_ABI})
46
+ elseif(CMAKE_SYSTEM_PROCESSOR)
47
+ set(arch ${CMAKE_SYSTEM_PROCESSOR})
48
+ else()
49
+ set(arch ${CMAKE_HOST_SYSTEM_PROCESSOR})
50
+ endif()
51
+
52
+ string(TOLOWER "${arch}" arch)
53
+
54
+ if(arch MATCHES "arm64|aarch64")
55
+ set(arch "aarch64")
56
+ elseif(arch MATCHES "armv7-a|armeabi-v7a")
57
+ set(arch "arm")
58
+ elseif(arch MATCHES "x64|x86_64|amd64")
59
+ set(arch "x64")
60
+ elseif(arch MATCHES "x86|i386|i486|i586|i686")
61
+ set(arch "x86_32")
62
+ else()
63
+ message(FATAL_ERROR "Unsupported architecture '${arch}'")
64
+ endif()
65
+
66
+ list(APPEND args --arch=${arch})
67
+
68
+ if(APPLE)
69
+ list(APPEND args
70
+ --target-os=darwin
71
+
72
+ "--sysroot=${CMAKE_OSX_SYSROOT}"
73
+
74
+ --enable-avfoundation
75
+ --enable-videotoolbox
76
+ )
77
+
78
+ if(NOT IOS)
79
+ list(APPEND args
80
+ --enable-appkit
81
+ --enable-audiotoolbox
82
+ )
83
+ endif()
84
+ elseif(LINUX)
85
+ list(APPEND args
86
+ --target-os=linux
87
+
88
+ "--sysroot=${CMAKE_SYSROOT}"
89
+
90
+ --enable-pthreads
91
+ )
92
+ elseif(ANDROID)
93
+ list(APPEND args
94
+ --target-os=android
95
+
96
+ "--sysroot=${CMAKE_SYSROOT}"
97
+
98
+ --enable-jni
99
+ --enable-mediacodec
100
+ )
101
+
102
+ if(arch MATCHES "x86_32")
103
+ list(APPEND args --disable-asm)
104
+ endif()
105
+ elseif(WIN32)
106
+ list(APPEND args
107
+ --target-os=win32
108
+
109
+ --enable-w32threads
110
+ --enable-d3d11va
111
+ --enable-d3d12va
112
+ --enable-dxva2
113
+ --enable-mediafoundation
114
+ )
115
+ endif()
116
+
117
+ set(env)
118
+
119
+ if(CMAKE_C_COMPILER)
120
+ cmake_path(GET CMAKE_C_COMPILER PARENT_PATH CC_path)
121
+ cmake_path(GET CMAKE_C_COMPILER FILENAME CC_filename)
122
+
123
+ if(WIN32 AND CC_filename MATCHES "clang-cl.exe")
124
+ set(CC_filename "clang.exe")
125
+ endif()
126
+
127
+ list(APPEND path "${CC_path}")
128
+ list(APPEND args
129
+ "--cc=${CC_filename}"
130
+ "--host-cc=${CC_filename}"
131
+ "--extra-cflags=--target=${CMAKE_C_COMPILER_TARGET}"
132
+ "--ld=${CC_filename}"
133
+ "--host-ld=${CC_filename}"
134
+ "--extra-ldflags=--target=${CMAKE_C_COMPILER_TARGET}"
135
+ )
136
+
137
+ if(CMAKE_LINKER_TYPE MATCHES "LLD")
138
+ list(APPEND args --extra-ldflags=-fuse-ld=lld)
139
+ endif()
140
+ endif()
141
+
142
+ if(CMAKE_CXX_COMPILER)
143
+ cmake_path(GET CMAKE_CXX_COMPILER PARENT_PATH CXX_path)
144
+ cmake_path(GET CMAKE_CXX_COMPILER FILENAME CXX_filename)
145
+
146
+ if(WIN32 AND CXX_filename MATCHES "clang-cl.exe")
147
+ set(CXX_filename "clang.exe")
148
+ endif()
149
+
150
+ list(APPEND path "${CXX_path}")
151
+ list(APPEND args
152
+ "--cxx=${CXX_filename}"
153
+ "--extra-cxxflags=--target=${CMAKE_CXX_COMPILER_TARGET}"
154
+ )
155
+ endif()
156
+
157
+ if(CMAKE_OBJC_COMPILER)
158
+ cmake_path(GET CMAKE_OBJC_COMPILER PARENT_PATH OBJC_path)
159
+ cmake_path(GET CMAKE_OBJC_COMPILER FILENAME OBJC_filename)
160
+
161
+ list(APPEND path "${OBJC_path}")
162
+ list(APPEND args
163
+ "--objcc=${OBJC_filename}"
164
+ "--extra-objcflags=--target=${CMAKE_OBJC_COMPILER_TARGET}"
165
+ )
166
+ endif()
167
+
168
+ if(CMAKE_ASM_COMPILER)
169
+ cmake_path(GET CMAKE_ASM_COMPILER PARENT_PATH AS_path)
170
+ cmake_path(GET CMAKE_ASM_COMPILER FILENAME AS_filename)
171
+
172
+ if(WIN32 AND AS_filename MATCHES "clang-cl.exe")
173
+ set(AS_filename "clang.exe")
174
+ endif()
175
+
176
+ list(APPEND path "${AS_path}")
177
+ list(APPEND args "--as=${AS_filename}")
178
+ endif()
179
+
180
+ if(CMAKE_RC_COMPILER)
181
+ cmake_path(GET CMAKE_RC_COMPILER PARENT_PATH RC_path)
182
+ cmake_path(GET CMAKE_RC_COMPILER FILENAME RC_filename)
183
+
184
+ list(APPEND path "${RC_path}")
185
+ list(APPEND args "--windres=${RC_filename}")
186
+ endif()
187
+
188
+ if(CMAKE_AR)
189
+ cmake_path(GET CMAKE_AR PARENT_PATH AR_path)
190
+ cmake_path(GET CMAKE_AR FILENAME AR_filename)
191
+
192
+ if(WIN32 AND AR_filename MATCHES "llvm-lib.exe")
193
+ set(AR_filename "llvm-ar.exe")
194
+ endif()
195
+
196
+ list(APPEND path "${AR_path}")
197
+ list(APPEND args "--ar=${AR_filename}")
198
+ endif()
199
+
200
+ if(CMAKE_NM)
201
+ cmake_path(GET CMAKE_NM PARENT_PATH NM_path)
202
+ cmake_path(GET CMAKE_NM FILENAME NM_filename)
203
+
204
+ list(APPEND path "${NM_path}")
205
+ list(APPEND args "--nm=${NM_filename}")
206
+ endif()
207
+
208
+ if(CMAKE_RANLIB)
209
+ cmake_path(GET CMAKE_RANLIB PARENT_PATH RANLIB_path)
210
+ cmake_path(GET CMAKE_RANLIB FILENAME RANLIB_filename)
211
+
212
+ list(APPEND path "${RANLIB_path}")
213
+ list(APPEND args "--ranlib=${RANLIB_filename}")
214
+ endif()
215
+
216
+ if(CMAKE_STRIP)
217
+ cmake_path(GET CMAKE_STRIP PARENT_PATH STRIP_path)
218
+ cmake_path(GET CMAKE_STRIP FILENAME STRIP_filename)
219
+
220
+ list(APPEND path "${STRIP_path}")
221
+ list(APPEND args "--strip=${STRIP_filename}")
222
+ endif()
223
+
224
+ set(depends)
225
+ set(pkg_config_path)
226
+
227
+ if("gpl" IN_LIST features)
228
+ list(APPEND args --enable-gpl)
229
+ endif()
230
+
231
+ if("zlib" IN_LIST features)
232
+ list(APPEND args --enable-zlib)
233
+ endif()
234
+
235
+ if("dav1d" IN_LIST features)
236
+ find_port(dav1d)
237
+
238
+ list(APPEND depends dav1d)
239
+ list(APPEND args --enable-libdav1d)
240
+ list(APPEND pkg_config_path "${dav1d_PREFIX}/lib/pkgconfig")
241
+
242
+ target_link_libraries(avcodec INTERFACE dav1d)
243
+ endif()
244
+
245
+ if("svt-av1" IN_LIST features)
246
+ find_port(svt-av1)
247
+
248
+ list(APPEND depends svt-av1)
249
+ list(APPEND args --enable-libsvtav1)
250
+ list(APPEND pkg_config_path "${svt-av1_PREFIX}/lib/pkgconfig")
251
+
252
+ target_link_libraries(avcodec INTERFACE svt-av1)
253
+ endif()
254
+
255
+ if("x264" IN_LIST features)
256
+ find_port(x264)
257
+
258
+ list(APPEND depends x264)
259
+ list(APPEND args --enable-libx264)
260
+ list(APPEND pkg_config_path "${x264_PREFIX}/lib/pkgconfig")
261
+
262
+ target_link_libraries(avcodec INTERFACE x264)
263
+ endif()
264
+
265
+ if("opus" IN_LIST features)
266
+ find_port(opus)
267
+
268
+ list(APPEND depends opus)
269
+ list(APPEND args --enable-libopus)
270
+ list(APPEND pkg_config_path "${opus_PREFIX}/lib/pkgconfig")
271
+
272
+ target_link_libraries(avcodec INTERFACE opus)
273
+ endif()
274
+
275
+ if(LINUX)
276
+ find_port(libva)
277
+
278
+ list(APPEND args --enable-vaapi)
279
+ list(APPEND pkg_config_path "${libva_PREFIX}/lib/pkgconfig")
280
+ list(APPEND pkg_config_path "${libdrm_PREFIX}/lib/pkgconfig")
281
+ endif()
282
+
283
+ if(CMAKE_HOST_WIN32)
284
+ find_path(
285
+ msys2
286
+ NAMES msys2.exe
287
+ PATHS "C:/tools/msys64"
288
+ REQUIRED
289
+ )
290
+
291
+ find_program(
292
+ pkg-config
293
+ NAMES pkg-config
294
+ PATHS "${msys2}/usr/bin"
295
+ REQUIRED
296
+ NO_DEFAULT_PATH
297
+ )
298
+ else()
299
+ find_program(
300
+ pkg-config
301
+ NAMES pkg-config
302
+ REQUIRED
303
+ )
304
+ endif()
305
+
306
+ foreach(part "$ENV{PATH}")
307
+ cmake_path(NORMAL_PATH part)
308
+
309
+ list(APPEND path "${part}")
310
+ endforeach()
311
+
312
+ list(APPEND args
313
+ "--pkg-config=${pkg-config}"
314
+ "--pkg-config-flags=--static"
315
+ )
316
+
317
+ list(REMOVE_DUPLICATES path)
318
+ list(REMOVE_DUPLICATES pkg_config_path)
319
+
320
+ if(CMAKE_HOST_WIN32)
321
+ list(TRANSFORM path REPLACE "([A-Z]):" "/\\1")
322
+ list(TRANSFORM pkg_config_path REPLACE "([A-Z]):" "/\\1")
323
+ endif()
324
+
325
+ list(JOIN path ":" path)
326
+ list(JOIN pkg_config_path ":" pkg_config_path)
327
+
328
+ list(APPEND env
329
+ "PATH=${path}"
330
+ "PKG_CONFIG_PATH=${pkg_config_path}"
331
+ )
332
+
333
+ declare_port(
334
+ "github:FFmpeg/FFmpeg#n8.0"
335
+ ffmpeg
336
+ AUTOTOOLS
337
+ DEPENDS ${depends}
338
+ BYPRODUCTS ${byproducts}
339
+ ARGS ${args}
340
+ ENV ${env}
341
+ )
342
+
343
+ file(MAKE_DIRECTORY "${ffmpeg_PREFIX}/include")
344
+
345
+ foreach(name IN LISTS libraries)
346
+ add_dependencies(${name} ${ffmpeg})
347
+
348
+ set_target_properties(
349
+ ${name}
350
+ PROPERTIES
351
+ IMPORTED_LOCATION "${ffmpeg_PREFIX}/lib/lib${name}.a"
352
+ )
353
+
354
+ target_include_directories(
355
+ ${name}
356
+ INTERFACE "${ffmpeg_PREFIX}/include"
357
+ )
358
+
359
+ if(LINUX OR ANDROID)
360
+ target_link_options(
361
+ ${name}
362
+ INTERFACE
363
+ "-Wl,-Bsymbolic"
364
+ )
365
+ endif()
366
+ endforeach()
367
+
368
+ target_link_libraries(
369
+ avcodec
370
+ INTERFACE
371
+ avutil
372
+ swresample
373
+ )
374
+
375
+ target_link_libraries(
376
+ avdevice
377
+ INTERFACE
378
+ avcodec
379
+ avfilter
380
+ avformat
381
+ avutil
382
+ swresample
383
+ swscale
384
+ )
385
+
386
+ target_link_libraries(
387
+ avfilter
388
+ INTERFACE
389
+ avcodec
390
+ avformat
391
+ avutil
392
+ swresample
393
+ swscale
394
+ )
395
+
396
+ target_link_libraries(
397
+ avformat
398
+ INTERFACE
399
+ avcodec
400
+ avutil
401
+ swresample
402
+ )
403
+
404
+ target_link_libraries(
405
+ swresample
406
+ INTERFACE
407
+ avutil
408
+ )
409
+
410
+ target_link_libraries(
411
+ swscale
412
+ INTERFACE
413
+ avutil
414
+ )
415
+
416
+ if(APPLE)
417
+ target_link_libraries(
418
+ avcodec
419
+ INTERFACE
420
+ "-framework VideoToolbox"
421
+ "-framework CoreFoundation"
422
+ "-framework CoreMedia"
423
+ "-framework CoreVideo"
424
+ "-framework CoreServices"
425
+ )
426
+
427
+ target_link_libraries(
428
+ avdevice
429
+ INTERFACE
430
+ "-framework AVFoundation"
431
+ "-framework CoreAudio"
432
+ "-framework CoreGraphics"
433
+ "-framework CoreMedia"
434
+ "-framework CoreVideo"
435
+ "-framework Foundation"
436
+ )
437
+
438
+ target_link_libraries(
439
+ avutil
440
+ INTERFACE
441
+ "-framework VideoToolbox"
442
+ "-framework CoreFoundation"
443
+ "-framework CoreMedia"
444
+ "-framework CoreVideo"
445
+ "-framework CoreServices"
446
+ )
447
+
448
+ if(NOT IOS)
449
+ target_link_libraries(
450
+ avcodec
451
+ INTERFACE
452
+ "-framework AudioToolbox"
453
+ )
454
+
455
+ target_link_libraries(
456
+ avdevice
457
+ INTERFACE
458
+ "-framework AudioToolbox"
459
+ )
460
+ endif()
461
+ elseif(ANDROID)
462
+ target_link_libraries(
463
+ avcodec
464
+ INTERFACE
465
+ android
466
+ mediandk
467
+ )
468
+
469
+ target_link_libraries(
470
+ avdevice
471
+ INTERFACE
472
+ android
473
+ camera2ndk
474
+ mediandk
475
+ )
476
+
477
+ target_link_libraries(
478
+ avutil
479
+ INTERFACE
480
+ android
481
+ mediandk
482
+ )
483
+ elseif(WIN32)
484
+ target_link_libraries(
485
+ avcodec
486
+ INTERFACE
487
+ mfuuid
488
+ ole32
489
+ ole32
490
+ strmiids
491
+ user32
492
+ )
493
+
494
+ target_link_libraries(
495
+ avdevice
496
+ INTERFACE
497
+ gdi32
498
+ ole32
499
+ oleaut32
500
+ psapi
501
+ shlwapi
502
+ strmiids
503
+ uuid
504
+ vfw32
505
+ )
506
+
507
+ target_link_libraries(
508
+ avutil
509
+ INTERFACE
510
+ user32
511
+ bcrypt
512
+ )
513
+ endif()
@@ -0,0 +1,32 @@
1
+ include_guard(GLOBAL)
2
+
3
+ declare_port(
4
+ "git:gitlab.freedesktop.org/mesa/drm#libdrm-2.4.128"
5
+ libdrm
6
+ MESON
7
+ BYPRODUCTS
8
+ lib/libdrm.a
9
+ ARGS
10
+ -Dcairo-tests=disabled
11
+ -Dman-pages=disabled
12
+ -Dvalgrind=disabled
13
+ -Dinstall-test-programs=false
14
+ -Dudev=true
15
+ )
16
+
17
+ add_library(drm STATIC IMPORTED GLOBAL)
18
+
19
+ add_dependencies(drm ${libdrm})
20
+
21
+ set_target_properties(
22
+ drm
23
+ PROPERTIES
24
+ IMPORTED_LOCATION "${libdrm_PREFIX}/lib/libdrm.a"
25
+ )
26
+
27
+ file(MAKE_DIRECTORY "${libdrm_PREFIX}/include")
28
+
29
+ target_include_directories(
30
+ drm
31
+ INTERFACE "${libdrm_PREFIX}/include"
32
+ )
@@ -0,0 +1,53 @@
1
+ include_guard(GLOBAL)
2
+
3
+ find_port(libdrm)
4
+
5
+ declare_port(
6
+ "github:intel/libva#2.22.0"
7
+ libva
8
+ MESON
9
+ DEPENDS drm
10
+ BYPRODUCTS
11
+ lib/libva.so.2.2200.0
12
+ lib/libva-drm.so.2.2200.0
13
+ ARGS
14
+ -Denable_docs=false
15
+ -Ddisable_drm=false
16
+ ENV
17
+ "PKG_CONFIG_PATH=${libdrm_PREFIX}/lib/pkgconfig"
18
+ )
19
+
20
+ add_library(va SHARED IMPORTED GLOBAL)
21
+ add_library(va-drm SHARED IMPORTED GLOBAL)
22
+
23
+ add_dependencies(va ${libva})
24
+ add_dependencies(va-drm ${libva})
25
+
26
+ set_target_properties(
27
+ va
28
+ PROPERTIES
29
+ IMPORTED_LOCATION "${libva_PREFIX}/lib/libva.so.2.2200.0"
30
+ IMPORTED_SONAME libva.so.2
31
+ )
32
+
33
+ set_target_properties(
34
+ va-drm
35
+ PROPERTIES
36
+ IMPORTED_LOCATION "${libva_PREFIX}/lib/libva-drm.so.2.2200.0"
37
+ IMPORTED_SONAME libva-drm.so.2
38
+ )
39
+
40
+ file(MAKE_DIRECTORY "${libva_PREFIX}/include")
41
+
42
+ target_include_directories(
43
+ va
44
+ INTERFACE "${libva_PREFIX}/include"
45
+ )
46
+
47
+ target_include_directories(
48
+ va-drm
49
+ INTERFACE "${libva_PREFIX}/include"
50
+ )
51
+
52
+ target_link_libraries(va INTERFACE drm)
53
+ target_link_libraries(va-drm INTERFACE drm va)
@@ -0,0 +1,52 @@
1
+ From 7dba6a92ee0eb2d114495106367ddb327eca6428 Mon Sep 17 00:00:00 2001
2
+ From: DoumanAsh <douman@gmx.se>
3
+ Date: Sat, 11 May 2024 16:54:02 +0900
4
+ Subject: [PATCH] Add sse4.1 flag when using clang-cl on MSVC targets
5
+
6
+ ---
7
+ CMakeLists.txt | 14 +++++++++++---
8
+ 1 file changed, 11 insertions(+), 3 deletions(-)
9
+
10
+ diff --git a/CMakeLists.txt b/CMakeLists.txt
11
+ index 8535ad5f3..702a7ec82 100644
12
+ --- a/CMakeLists.txt
13
+ +++ b/CMakeLists.txt
14
+ @@ -14,6 +14,14 @@ include(GNUInstallDirs)
15
+ include(CMakeDependentOption)
16
+ include(FeatureSummary)
17
+
18
+ +# Detect clang-cl
19
+ +set(MSVC_CLANG_CL false BOOL)
20
+ +if (MSVC)
21
+ + if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang")
22
+ + set(MSVC_CLANG_CL true BOOL)
23
+ + endif()
24
+ +endif()
25
+ +
26
+ set(OPUS_BUILD_SHARED_LIBRARY_HELP_STR "build shared library.")
27
+ option(OPUS_BUILD_SHARED_LIBRARY ${OPUS_BUILD_SHARED_LIBRARY_HELP_STR} OFF)
28
+ if(OPUS_BUILD_SHARED_LIBRARY OR BUILD_SHARED_LIBS OR OPUS_BUILD_FRAMEWORK)
29
+ @@ -484,20 +492,20 @@ if(NOT OPUS_DISABLE_INTRINSICS)
30
+ add_sources_group(opus lpcnet ${dnn_sources_sse4_1})
31
+ endif()
32
+ target_compile_definitions(opus PRIVATE OPUS_X86_MAY_HAVE_SSE4_1)
33
+ - if(NOT MSVC)
34
+ + if(NOT MSVC OR MSVC_CLANG_CL)
35
+ set_source_files_properties(${celt_sources_sse4_1} ${silk_sources_sse4_1} ${dnn_sources_sse4_1} PROPERTIES COMPILE_FLAGS -msse4.1)
36
+ endif()
37
+
38
+ if(OPUS_FIXED_POINT)
39
+ add_sources_group(opus silk ${silk_sources_fixed_sse4_1})
40
+ - if(NOT MSVC)
41
+ + if(NOT MSVC OR MSVC_CLANG_CL)
42
+ set_source_files_properties(${silk_sources_fixed_sse4_1} PROPERTIES COMPILE_FLAGS -msse4.1)
43
+ endif()
44
+ endif()
45
+ endif()
46
+ if(OPUS_X86_PRESUME_SSE4_1)
47
+ target_compile_definitions(opus PRIVATE OPUS_X86_PRESUME_SSE4_1)
48
+ - if(NOT MSVC)
49
+ + if(NOT MSVC OR MSVC_CLANG_CL)
50
+ target_compile_options(opus PRIVATE -msse4.1)
51
+ endif()
52
+ endif()
@@ -0,0 +1,42 @@
1
+ include_guard(GLOBAL)
2
+
3
+ if(WIN32)
4
+ set(lib opus.lib)
5
+ else()
6
+ set(lib libopus.a)
7
+ endif()
8
+
9
+ set(args
10
+ -DBUILD_SHARED_LIBS=OFF
11
+ -DBUILD_TESTING=OFF
12
+ )
13
+
14
+ if(WIN32)
15
+ list(APPEND args -DOPUS_DISABLE_INTRINSICS=ON)
16
+ endif()
17
+
18
+ declare_port(
19
+ "github:xiph/opus@v1.5.2"
20
+ opus
21
+ BYPRODUCTS lib/${lib}
22
+ ARGS ${args}
23
+ PATCHES
24
+ patches/01-windows-clang.patch
25
+ )
26
+
27
+ add_library(opus STATIC IMPORTED GLOBAL)
28
+
29
+ add_dependencies(opus ${opus})
30
+
31
+ set_target_properties(
32
+ opus
33
+ PROPERTIES
34
+ IMPORTED_LOCATION "${opus_PREFIX}/lib/${lib}"
35
+ )
36
+
37
+ file(MAKE_DIRECTORY "${opus_PREFIX}/include")
38
+
39
+ target_include_directories(
40
+ opus
41
+ INTERFACE "${opus_PREFIX}/include"
42
+ )