-
Notifications
You must be signed in to change notification settings - Fork 123
Expand file tree
/
Copy pathAirSim.Build.cs
More file actions
160 lines (134 loc) · 5.4 KB
/
Copy pathAirSim.Build.cs
File metadata and controls
160 lines (134 loc) · 5.4 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using UnrealBuildTool;
using System.IO;
public class AirSim : ModuleRules
{
private string ModulePath
{
get { return ModuleDirectory; }
}
private string AirLibPath
{
get { return Path.Combine(ModulePath, "AirLib"); }
}
private string AirSimPluginPath
{
get { return Directory.GetParent(ModulePath).FullName; }
}
private string ProjectBinariesPath
{
get { return Path.Combine(
Directory.GetParent(AirSimPluginPath).Parent.FullName, "Binaries");
}
}
private string AirSimPluginDependencyPath
{
get { return Path.Combine(AirSimPluginPath, "Dependencies"); }
}
private enum CompileMode
{
HeaderOnlyNoRpc,
HeaderOnlyWithRpc,
CppCompileNoRpc,
CppCompileWithRpc
}
private void SetupCompileMode(CompileMode mode, ReadOnlyTargetRules Target)
{
switch (mode)
{
case CompileMode.HeaderOnlyNoRpc:
PublicDefinitions.Add("AIRLIB_HEADER_ONLY=1");
PublicDefinitions.Add("AIRLIB_NO_RPC=1");
AddLibDependency("AirLib", Path.Combine(AirLibPath, "lib"), "AirLib", Target, false);
break;
case CompileMode.HeaderOnlyWithRpc:
PublicDefinitions.Add("AIRLIB_HEADER_ONLY=1");
AddLibDependency("AirLib", Path.Combine(AirLibPath, "lib"), "AirLib", Target, false);
LoadAirSimDependency(Target, "rpclib", "rpc");
break;
case CompileMode.CppCompileNoRpc:
PublicDefinitions.Add("AIRLIB_NO_RPC=1");
break;
case CompileMode.CppCompileWithRpc:
LoadAirSimDependency(Target, "rpclib", "rpc");
break;
default:
throw new System.Exception("CompileMode specified in plugin's Build.cs file is not recognized");
}
}
public AirSim(ReadOnlyTargetRules Target) : base(Target)
{
//bEnforceIWYU = true; //to support 4.16
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
bEnableExceptions = true;
PublicDependencyModuleNames.AddRange(new string[] {
"Core",
"CoreUObject",
"Engine",
"HTTP",
"InputCore",
"ImageWrapper",
"RenderCore",
"RHI",
"ChaosVehicles",
"Landscape"
});
PrivateDependencyModuleNames.AddRange(new string[] { "UMG", "Slate", "SlateCore", "RenderCore" });
//suppress VC++ proprietary warnings
PublicDefinitions.Add("_SCL_SECURE_NO_WARNINGS=1");
PublicDefinitions.Add("_CRT_SECURE_NO_WARNINGS=1");
PublicDefinitions.Add("HMD_MODULE_INCLUDED=0");
PublicIncludePaths.Add(Path.Combine(AirLibPath, "include"));
PublicIncludePaths.Add(Path.Combine(AirLibPath, "deps", "eigen3"));
AddOSLibDependencies(Target);
SetupCompileMode(CompileMode.CppCompileWithRpc, Target);
}
private void AddOSLibDependencies(ReadOnlyTargetRules Target)
{
if (Target.Platform == UnrealTargetPlatform.Win64)
{
// for SHGetFolderPath.
PublicAdditionalLibraries.Add("Shell32.lib");
//for joystick support
PublicAdditionalLibraries.Add("dinput8.lib");
PublicAdditionalLibraries.Add("dxguid.lib");
}
}
static void CopyFileIfNewer(string srcFilePath, string destFolder)
{
FileInfo srcFile = new FileInfo(srcFilePath);
FileInfo destFile = new FileInfo(Path.Combine(destFolder, srcFile.Name));
if (!destFile.Exists || srcFile.LastWriteTime > destFile.LastWriteTime)
{
srcFile.CopyTo(destFile.FullName, true);
}
//else skip
}
private bool LoadAirSimDependency(ReadOnlyTargetRules Target, string LibName, string LibFileName)
{
string LibrariesPath = Path.Combine(AirLibPath, "deps", LibName, "lib");
return AddLibDependency(LibName, LibrariesPath, LibFileName, Target, true);
}
private bool AddLibDependency(string LibName, string LibPath, string LibFileName, ReadOnlyTargetRules Target, bool IsAddLibInclude)
{
string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64 || Target.Platform == UnrealTargetPlatform.Mac) ? "x64" : "x86";
string ConfigurationString = (Target.Configuration == UnrealTargetConfiguration.Debug) ? "Debug" : "Release";
bool isLibrarySupported = false;
if (Target.Platform == UnrealTargetPlatform.Win64)
{
isLibrarySupported = true;
PublicAdditionalLibraries.Add(Path.Combine(LibPath, PlatformString, ConfigurationString, LibFileName + ".lib"));
} else if (Target.Platform == UnrealTargetPlatform.Linux || Target.Platform == UnrealTargetPlatform.Mac) {
isLibrarySupported = true;
PublicAdditionalLibraries.Add(Path.Combine(LibPath, "lib" + LibFileName + ".a"));
}
if (isLibrarySupported && IsAddLibInclude)
{
// Include path
PublicIncludePaths.Add(Path.Combine(AirLibPath, "deps", LibName, "include"));
}
PublicDefinitions.Add(string.Format("WITH_" + LibName.ToUpper() + "_BINDING={0}", isLibrarySupported ? 1 : 0));
return isLibrarySupported;
}
}