-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBuildLinuxTask.cs
More file actions
90 lines (80 loc) · 4.72 KB
/
BuildLinuxTask.cs
File metadata and controls
90 lines (80 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
namespace BuildScripts;
[TaskName("Build Linux")]
[IsDependentOn(typeof(PrepTask))]
[IsDependeeOf(typeof(BuildToolTask))]
public sealed class BuildLinuxTask : FrostingTask<BuildContext>
{
public override bool ShouldRun(BuildContext context) => context.IsRunningOnLinux();
public override void Run(BuildContext context)
{
// Absolute path to the artifact directory is needed for flags since they don't allow relative path
var artifactDir = context.MakeAbsolute(new DirectoryPath(context.ArtifactsDir));
var dependencyDir = context.MakeAbsolute(new DirectoryPath($"{context.ArtifactsDir}/../dependencies-linux-x64"));
var prefixFlag = $"--prefix=\"{dependencyDir}\"";
var hostFlag = "--host=\"x86_64-linux-gnu\"";
var binDirFlag = $"--bindir=\"{artifactDir}\"";
var envVariables = new Dictionary<string, string>
{
{"CFLAGS", $"-w -I{dependencyDir}/include"},
{"CPPFLAGS", $"-I{dependencyDir}/include"},
{"LDFLAGS", $"--static -L{dependencyDir}/lib"},
{"PKG_CONFIG_PATH", $"{dependencyDir}/lib/pkgconfig"}
};
var configureFlags = GetFFMpegConfigureFlags(context);
var processSettings = new ProcessSettings();
processSettings.EnvironmentVariables = envVariables;
var shellCommandPath = "sh";
// Build libogg
processSettings.WorkingDirectory = "./ogg";
processSettings.Arguments = $"-c \"make distclean\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"./autogen.sh\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"./configure --disable-shared {prefixFlag} {hostFlag}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make -j{Environment.ProcessorCount}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make install\"";
context.StartProcess(shellCommandPath, processSettings);
// build libvorbis
processSettings.WorkingDirectory = "./vorbis";
processSettings.Arguments = $"-c \"make distclean\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"./autogen.sh\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"./configure --disable-examples --disable-docs --disable-shared {prefixFlag} {hostFlag}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make -j{Environment.ProcessorCount}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make install\"";
context.StartProcess(shellCommandPath, processSettings);
// build lame
processSettings.WorkingDirectory = "./lame";
processSettings.Arguments = $"-c \"make distclean\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"./configure --disable-frontend --disable-decoder --disable-shared {prefixFlag} {hostFlag}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make -j{Environment.ProcessorCount}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make install\"";
context.StartProcess(shellCommandPath, processSettings);
// Build ffmpeg (with XAudio2 fix)
processSettings.WorkingDirectory = "./ffmpeg";
processSettings.Arguments = $"-c \"make distclean\"";
context.StartProcess(shellCommandPath, processSettings);
BuildCommon.FFmpegApplyXAudio2Fix(context);
processSettings.Arguments = $"-c \"./configure {binDirFlag} {configureFlags}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make -j{Environment.ProcessorCount}\"";
context.StartProcess(shellCommandPath, processSettings);
processSettings.Arguments = $"-c \"make install\"";
context.StartProcess(shellCommandPath, processSettings);
}
private static string GetFFMpegConfigureFlags(BuildContext context)
{
var ignoreCommentsAndNewLines = (string line) => !string.IsNullOrWhiteSpace(line) && !line.StartsWith('#');
var configureFlags = context.FileReadLines("ffmpeg.config").Where(ignoreCommentsAndNewLines);
var osConfigureFlags = context.FileReadLines($"ffmpeg.linux-x64.config").Where(ignoreCommentsAndNewLines);
return string.Join(' ', configureFlags) + " " + string.Join(' ', osConfigureFlags);
}
}