1+ tasks. register(' cleanFFmpeg' )
2+ tasks. register(' cleanAV1' )
3+ clean. configure {
4+ dependsOn ' cleanFFmpeg'
5+ dependsOn ' cleanAV1'
6+ }
7+
8+ String checkCrossPrefix (String crossToolchain ) {
9+ def tc = crossToolchain
10+ if (tc == null || System . getProperty(" os.name" ). startsWith(" Win" )) return " "
11+ def result = project. exec {
12+ ignoreExitValue = true
13+ commandLine " bash" , " -l" , " -c" ,
14+ " (command -v $tc -g++ && command -v $tc -ar && command -v $tc -ld)>/dev/null"
15+ }
16+ if (result. getExitValue() == 0 ) {
17+ return " $tc -"
18+ }
19+ return " "
20+ }
21+
22+ String checkCrossFile (String buildName , String crossToolchain ) {
23+ String prefix = checkCrossPrefix(crossToolchain)
24+ if (prefix. isEmpty()) {
25+ return " "
26+ }
27+ def options = [
28+ " Windows32" : " i686-w64-mingw32" ,
29+ " Windows64" : " x86_64-w64-mingw32" ,
30+ " LinuxARM64" : " aarch64-linux"
31+ ]
32+ def name = options[buildName]
33+ if (name == null ) return " "
34+ return " src/dav1d/package/crossfiles/${ name} .meson"
35+ }
36+
37+
38+ void registerBuild (String buildName , String crossToolchain , String ... extraArgs ) {
39+ String outDir = file(" build/${ buildName.toLowerCase()} " ). absolutePath
40+ String av1Dir = " $outDir /src/dav1d"
41+ String ffDir = " $outDir /src/FFmpeg"
42+
43+ def crossPrefix = checkCrossPrefix(crossToolchain)
44+ def crossFile = checkCrossFile(buildName, crossToolchain)
45+
46+ tasks. register(" cleanAV1$buildName " , Delete ) {
47+ delete av1Dir
48+ delete " $outDir /lib/libdav1d.a"
49+ }
50+ cleanAV1. configure {
51+ dependsOn " cleanAV1$buildName "
52+ }
53+ tasks. register(" buildAV1$buildName " ) {
54+ doFirst {
55+ mkdir av1Dir
56+ String [] crossArgs = []
57+ String crossPath = " "
58+ if (! crossFile. isEmpty()) {
59+ crossPath = file(crossFile). absolutePath
60+ } else if (buildName == " Macos64" ) {
61+ crossPath = file(" src/x86_64-macos.meson" ). absolutePath
62+ } else if (buildName == " MacosARM64" ) {
63+ crossPath = file(" src/arm64-macos.meson" ). absolutePath
64+ } else if (buildName == " Linux64" && System . getProperty(" os.name" ) != " Linux" ) {
65+ crossPath = file(" src/x86_64-linux.meson" ). absolutePath
66+ } else if (buildName == " LinuxARM32" ) {
67+ crossPath = file(" src/arm32-linux.meson" ). absolutePath
68+ }
69+ if (! crossPath. isEmpty()) {
70+ crossArgs = [" --cross-file=$crossPath " ]
71+ }
72+ project. exec {
73+ workingDir av1Dir
74+ executable ' meson'
75+ args ' setup' , ' -Denable_tools=false' , ' -Denable_tests=false'
76+ args crossArgs
77+ args ' ../../../../src/dav1d' , ' --default-library=static'
78+ args ' --prefix' , " $outDir "
79+ args " --libdir=$outDir /lib"
80+ }
81+ project. exec {
82+ workingDir av1Dir
83+ commandLine ' ninja'
84+ }
85+ project. exec {
86+ workingDir av1Dir
87+ commandLine ' ninja' , ' install'
88+ }
89+ }
90+ outputs. upToDateWhen { file(" $outDir /lib/libdav1d.a" ). exists() }
91+ }
92+
93+ tasks. register(" cleanFFmpeg$buildName " , Delete ) {
94+ delete ffDir
95+ delete " $outDir /lib/libavformat.a"
96+ }
97+ cleanFFmpeg. configure {
98+ dependsOn " cleanFFmpeg$buildName "
99+ }
100+ tasks. register(" buildFFmpeg$buildName " ) {
101+ dependsOn " buildAV1$buildName "
102+ doFirst {
103+ mkdir ffDir
104+ String [] crossArgs = []
105+ if (! crossPrefix. isEmpty()) {
106+ crossArgs = [" --enable-cross-compile" , " --cross-prefix=$crossPrefix " ]
107+ }
108+ project. exec {
109+ workingDir ffDir
110+ environment[" PKG_CONFIG_PATH" ] = " $outDir /lib/pkgconfig"
111+ executable ' ../../../../src/FFmpeg/configure'
112+ args ' --pkg-config=pkg-config' , ' --pkg-config-flags=--static'
113+ args ' --disable-autodetect'
114+ args ' --enable-pic' , ' --disable-symver' , ' --disable-doc' , ' --disable-shared' , ' --enable-static'
115+ args crossArgs
116+ args ' --disable-everything'
117+ args ' --enable-protocol=file' , ' --enable-filter=aresample' , ' --enable-filter=deshake'
118+ args ' --enable-demuxer=ogg' , ' --enable-demuxer=matroska' , ' --enable-demuxer=mov'
119+ args ' --enable-decoder=vorbis' , ' --enable-decoder=opus' , ' --enable-decoder=aac'
120+ args ' --enable-decoder=vp8' , ' --enable-decoder=vp9' , ' --enable-decoder=theora' , ' --enable-decoder=av1'
121+ args ' --enable-libdav1d' , ' --enable-decoder=libdav1d'
122+ args " --extra-cflags=-I$outDir /include"
123+ args " --extra-ldflags=-L$outDir /lib"
124+ args " --prefix=$outDir "
125+ // Uncomment the following line for MP4 video support:
126+ // args '--enable-decoder=h264', '--enable-decoder=hevc'
127+ args extraArgs
128+ }
129+ project. exec {
130+ workingDir ffDir
131+ commandLine ' make' , ' -j16'
132+ }
133+ project. exec {
134+ workingDir ffDir
135+ commandLine ' make' , ' install'
136+ }
137+ }
138+ outputs. upToDateWhen { file(" $outDir /lib/libavformat.a" ). exists() }
139+ }
140+ }
141+
142+ registerBuild ' Windows32' , ' i686-w64-mingw32' , ' --arch=x86' , ' --target-os=mingw32'
143+ registerBuild ' Windows64' , ' x86_64-w64-mingw32' , ' --arch=x86_64' , ' --target-os=mingw32'
144+
145+ registerBuild ' Linux64' , ' x86_64-linux-gnu' , ' --arch=x86_64' , ' --target-os=linux' , ' --disable-cuda' , ' --disable-cuvid'
146+
147+ registerBuild ' LinuxARM32' , ' arm-linux-gnueabihf' , ' --arch=arm' , ' --target-os=linux'
148+ registerBuild ' LinuxARM64' , ' aarch64-linux-gnu' , ' --arch=aarch64' , ' --target-os=linux'
149+
150+ registerBuild ' Macos64' , null , ' --enable-cross-compile' ,// '--enable-hwaccel=h264_videotoolbox', '--enable-hwaccel=hevc_videotoolbox',
151+ ' --arch=x86_64' , ' --target-os=darwin' , ' --cc=clang' , ' --cxx=clang++' , ' --dep-cc=clang' ,
152+ ' --extra-cflags=-mmacosx-version-min=10.11 -arch x86_64' , ' --extra-cxxflags=-mmacosx-version-min=10.11 -arch x86_64' , ' --extra-ldflags=-mmacosx-version-min=10.11 -arch x86_64'
153+ registerBuild ' MacosARM64' , null , ' --enable-cross-compile' ,// '--enable-hwaccel=h264_videotoolbox', '--enable-hwaccel=hevc_videotoolbox',
154+ ' --arch=arm64' , ' --target-os=darwin' , ' --cc=clang' , ' --cxx=clang++' , ' --dep-cc=clang' ,
155+ ' --extra-cflags=-mmacosx-version-min=10.11 -arch arm64' , ' --extra-cxxflags=-mmacosx-version-min=10.11 -arch arm64' , ' --extra-ldflags=-mmacosx-version-min=10.11 -arch arm64'
156+
157+ tasks. register(' buildFFmpegWindowsAll' ) {
158+ dependsOn buildFFmpegWindows32, buildFFmpegWindows64
159+ }
160+
161+ tasks. register(' buildFFmpegLinuxAll' ) {
162+ dependsOn buildFFmpegLinux64, buildFFmpegLinuxARM32, buildFFmpegLinuxARM64
163+ }
164+
165+ tasks. register(' buildFFmpegMacosAll' ) {
166+ dependsOn buildFFmpegMacos64, buildFFmpegMacosARM64
167+ }
0 commit comments