Skip to content

Commit 1a09665

Browse files
authored
Merge pull request #487 from CesiumGS/vcpkg-swl
Build and CI improvements, building on vcpkg
2 parents e819812 + 0402763 commit 1a09665

20 files changed

+929
-896
lines changed

.github/workflows/build.yml

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ jobs:
6363
del ./UnityHubSetup.exe
6464
- name: Install Unity
6565
run: |
66-
Start-Process -FilePath "C:/Program Files/Unity Hub/Unity Hub.exe" -Args "-- --headless install --version 2021.3.13f1 --changeset 9e7d58001ecf" -Wait
67-
Start-Process -FilePath "C:/Program Files/Unity Hub/Unity Hub.exe" -Args "-- --headless install-modules --version 2021.3.13f1 --changeset 9e7d58001ecf --module android android-sdk-ndk-tools android-open-jdk-8u172-b11 universal-windows-platform uwp-il2cpp" -Wait
66+
Start-Process -FilePath "C:/Program Files/Unity Hub/Unity Hub.exe" -Args "-- --headless install --version 2022.3.41f1 --changeset 0f988161febf" -Wait
67+
Start-Process -FilePath "C:/Program Files/Unity Hub/Unity Hub.exe" -Args "-- --headless install-modules --version 2022.3.41f1 --changeset 0f988161febf --module android android-sdk-ndk-tools android-open-jdk-11.0.14.1+1 universal-windows-platform" -Wait
6868
- name: Create SSH tunnel to Unity License Server
6969
env:
7070
UNITY_LICENSE_SERVER_SSH_KEY: ${{ secrets.UNITY_LICENSE_SERVER_SSH_KEY }}
@@ -103,6 +103,10 @@ jobs:
103103
run: |
104104
mkdir -p d:\cesium\CesiumForUnityBuildProject\Packages\com.cesium.unity
105105
mv $ENV:GITHUB_WORKSPACE/* d:\cesium\CesiumForUnityBuildProject\Packages\com.cesium.unity
106+
# Disable Unity audio
107+
mkdir -p d:\cesium\CesiumForUnityBuildProject\Packages\com.cesium.unity\ProjectSettings
108+
$text="%YAML 1.1`n%TAG !u! tag:unity3d.com,2011:`n--- !u!11 &1`nAudioManager:`n m_DisableAudio: 1`n"
109+
[IO.File]::WriteAllLines("d:/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/ProjectSettings/AudioManager.asset",$text)
106110
- name: Build Reinterop
107111
run: |
108112
cd d:\cesium\CesiumForUnityBuildProject\Packages\com.cesium.unity
@@ -121,7 +125,12 @@ jobs:
121125
$ENV:EZVCPKG_BASEDIR="D:/.ezvcpkg"
122126
# Run the build
123127
dotnet run --project Build~
124-
cat D:\cesium\CesiumForUnityBuildProject\Packages\com.cesium.unity\native~\build-Android-arm64\build.log
128+
- name: Publish Logs
129+
if: success() || failure() # run this step even if previous step failed
130+
uses: actions/upload-artifact@v4
131+
with:
132+
name: Native Build Logs - Windows
133+
path: d:/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/native~/build-*/build.log
125134
- name: Publish package artifact
126135
if: ${{ success() }}
127136
uses: actions/upload-artifact@v4
@@ -130,7 +139,7 @@ jobs:
130139
path: d:\cesium\CesiumForUnityBuildProject\*.tgz
131140
- name: Run Tests
132141
run: |
133-
start -FilePath "C:\Program Files\Unity\Hub\Editor\2021.3.13f1\Editor\Unity.exe" -ArgumentList "-runTests -batchmode -projectPath d:\cesium\CesiumForUnityBuildProject -testResults d:\cesium\temp\TestResults.xml -testPlatform PlayMode -logFile d:\cesium\temp\test-log.txt" -Wait
142+
start -FilePath "C:\Program Files\Unity\Hub\Editor\2022.3.41f1\Editor\Unity.exe" -ArgumentList "-runTests -batchmode -projectPath d:\cesium\CesiumForUnityBuildProject -testResults d:\cesium\temp\TestResults.xml -testPlatform PlayMode -logFile d:\cesium\temp\test-log.txt" -Wait
134143
cat d:\cesium\temp\test-log.txt
135144
- name: Test Report
136145
uses: kring/[email protected]
@@ -166,14 +175,14 @@ jobs:
166175
sudo cp -R "./UnityHubSetup/Unity Hub.app" /Applications
167176
hdiutil detach ./UnityHubSetup
168177
rm ./UnityHubSetup.dmg
169-
- name: Install Unity 2021.3.13f1
178+
- name: Install Unity 2022.3.41f1
170179
# This command sometimes returns exit code 130, despite actually succeeding.
171180
continue-on-error: true
172181
run: |
173-
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install --version 2021.3.13f1 --changeset 9e7d58001ecf --architecture x86_64
182+
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install --version 2022.3.41f1 --changeset 0f988161febf --architecture arm64
174183
- name: Install Unity iOS Support
175184
run: |
176-
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install-modules --version 2021.3.13f1 --changeset 9e7d58001ecf --module ios --architecture x86_64
185+
/Applications/Unity\ Hub.app/Contents/MacOS/Unity\ Hub -- --headless install-modules --version 2022.3.41f1 --changeset 0f988161febf --module ios --architecture arm64
177186
- name: Configure Unity to Use the License Server
178187
run: |
179188
sudo mkdir -p "/Library/Application Support/Unity/config"
@@ -213,6 +222,9 @@ jobs:
213222
run: |
214223
mkdir -p ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity
215224
mv $GITHUB_WORKSPACE/* ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity
225+
# Disable Unity audio
226+
mkdir -p ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/ProjectSettings
227+
echo '%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!11 &1\nAudioManager:\n m_DisableAudio: 1\n' > ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/ProjectSettings/AudioManager.asset
216228
- name: Build Reinterop
217229
run: |
218230
cd ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity
@@ -224,12 +236,12 @@ jobs:
224236
cd ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity
225237
dotnet run --project Build~
226238
ls -l ~/cesium/CesiumForUnityBuildProject
227-
- name: Print log
228-
if: ${{ failure() }}
229-
run: |
230-
cat /Users/runner/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/native~/build-Standalone-x86_64/build.log
231-
cat /Users/runner/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/native~/build-Standalone-arm64/build.log
232-
cat /Users/runner/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/native~/build-iOS/build.log
239+
- name: Publish Logs
240+
if: success() || failure() # run this step even if previous step failed
241+
uses: actions/upload-artifact@v4
242+
with:
243+
name: Native Build Logs - macOS
244+
path: ~/cesium/CesiumForUnityBuildProject/Packages/com.cesium.unity/native~/build-*/build.log
233245
- name: Publish package artifact
234246
if: ${{ success() }}
235247
uses: actions/upload-artifact@v4
@@ -238,7 +250,7 @@ jobs:
238250
path: ~/cesium/CesiumForUnityBuildProject/*.tgz
239251
- name: Run Tests
240252
run: |
241-
/Applications/Unity/Hub/Editor/2021.3.13f1/Unity.app/Contents/MacOS/Unity -runTests -batchmode -projectPath ~/cesium/CesiumForUnityBuildProject -testResults ~/cesium/CesiumForUnityBuildProject/TestResults.xml -testPlatform PlayMode -logFile ~/cesium/CesiumForUnityBuildProject/test-log.txt
253+
/Applications/Unity/Hub/Editor/2022.3.41f1/Unity.app/Contents/MacOS/Unity -runTests -batchmode -projectPath ~/cesium/CesiumForUnityBuildProject -testResults ~/cesium/CesiumForUnityBuildProject/TestResults.xml -testPlatform PlayMode -logFile ~/cesium/CesiumForUnityBuildProject/test-log.txt
242254
cat ~/cesium/CesiumForUnityBuildProject/test-log.txt
243255
ls /Users/runner/cesium/CesiumForUnityBuildProject/TestResults.xml
244256
- name: Test Report

.gitmodules

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@
66
url = https://github.com/htacg/tidy-html5.git
77
[submodule "native~/extern/enum-flags"]
88
path = native~/extern/enum-flags
9-
url = https://github.com/grisumbras/enum-flags.git
9+
url = https://github.com/kring/enum-flags.git
10+
[submodule "native~/extern/swl-variant"]
11+
path = native~/extern/swl-variant
12+
url = https://github.com/kring/swl-variant.git
13+
branch = exception-public-inheritance

Build~/Package.cs

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@ public void Run()
3636
Directory.CreateDirectory(outputPackagePath);
3737

3838
Console.WriteLine("**** Modifying the csc.rsp files to write generated files to disk");
39-
string generatedRuntimePath = Path.Combine(tempPath, "generated", "Runtime");
40-
Directory.CreateDirectory(generatedRuntimePath);
41-
string generatedEditorPath = Path.Combine(tempPath, "generated", "Editor");
42-
Directory.CreateDirectory(generatedEditorPath);
39+
string generatedRuntimeBasePath = Path.Combine(tempPath, "generated", "Runtime");
40+
Directory.CreateDirectory(generatedRuntimeBasePath);
41+
string generatedEditorBasePath = Path.Combine(tempPath, "generated", "Editor");
42+
Directory.CreateDirectory(generatedEditorBasePath);
4343

44-
File.AppendAllText(runtimeCscRspPath, "-generatedfilesout:\"" + generatedRuntimePath + "\"" + Environment.NewLine, Encoding.UTF8);
45-
File.AppendAllText(editorCscRspPath, "-generatedfilesout:\"" + generatedEditorPath + "\"" + Environment.NewLine, Encoding.UTF8);
44+
File.AppendAllText(runtimeCscRspPath, "-generatedfilesout:\"" + generatedRuntimeBasePath + "\"" + Environment.NewLine, Encoding.UTF8);
45+
File.AppendAllText(editorCscRspPath, "-generatedfilesout:\"" + generatedEditorBasePath + "\"" + Environment.NewLine, Encoding.UTF8);
46+
47+
string generatedRuntimePath = Path.Combine(generatedRuntimeBasePath, "Reinterop");
48+
string generatedEditorPath = Path.Combine(generatedEditorBasePath, "Reinterop");
4649

4750
string sceneDirectory = Path.Combine(Utility.ProjectRoot, "Assets", "Scenes");
4851
Directory.CreateDirectory(sceneDirectory);
@@ -57,6 +60,24 @@ public void Run()
5760
}
5861
}
5962

63+
// Disable Unity audio, because we don't need it and because it seems to take 10-20 minutes
64+
// to time out on macOS on GitHub Actions every time we start up Unity.
65+
string projectSettingsDirectory = Path.Combine(Utility.ProjectRoot, "ProjectSettings");
66+
Directory.CreateDirectory(projectSettingsDirectory);
67+
string audioManagerPath = Path.Combine(projectSettingsDirectory, "AudioManager.asset");
68+
if (!File.Exists(audioManagerPath))
69+
{
70+
Console.WriteLine("**** Creating AudioManager.asset to disable Unity audio");
71+
using (StreamWriter audioManager = new StreamWriter(audioManagerPath))
72+
{
73+
audioManager.WriteLine("%YAML 1.1");
74+
audioManager.WriteLine("%TAG !u! tag:unity3d.com,2011:");
75+
audioManager.WriteLine("--- !u!11 &1");
76+
audioManager.WriteLine("AudioManager:");
77+
audioManager.WriteLine(" m_DisableAudio: 1");
78+
}
79+
}
80+
6081
Console.WriteLine("**** Compiling C# code for the Editor");
6182
unity.Run(new[]
6283
{

Editor/CompileCesiumForUnityNative.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,9 @@ private static string GetDirectoryNameForPlatform(BuildTargetGroup platformGroup
418418
return "Editor";
419419
else if (IsIOS(platformGroup, platform))
420420
return "iOS";
421+
// Make sure we use "WSA" and not "Metro"
422+
else if (platformGroup == BuildTargetGroup.WSA)
423+
return "WSA";
421424
return platformGroup.ToString();
422425
}
423426

@@ -440,7 +443,7 @@ internal static void BuildNativeLibrary(LibraryToBuild library)
440443
string projectPath = Path.Combine(Application.dataPath, "..");
441444
string logDisplayName = Path.GetRelativePath(projectPath, logFilename);
442445

443-
EditorUtility.DisplayProgressBar($"Building CesiumForUnityNative", $"See {logDisplayName}.", 0.0f);
446+
EditorUtility.DisplayProgressBar($"Building CesiumForUnityNative: {Path.GetFileName(library.BuildDirectory)}", $"See {logDisplayName}.", 0.0f);
444447

445448
using (StreamWriter log = new StreamWriter(logFilename, false, Encoding.UTF8))
446449
{

Runtime/CesiumFlyToController.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,9 @@ private void Reset()
219219
private bool DetectMovementInput()
220220
{
221221
double3 currentPositionECEF = this._globeAnchor.positionGlobeFixed;
222-
bool3 positionEquality = currentPositionECEF == this._previousPositionECEF;
223-
return !positionEquality.x || !positionEquality.y || !positionEquality.z;
222+
double distanceSquared = math.lengthsq(currentPositionECEF - this._previousPositionECEF);
223+
const double distanceConsideredMovement = 1e-6; // 1/1000 of a millimeter
224+
return distanceSquared >= (distanceConsideredMovement * distanceConsideredMovement);
224225
}
225226

226227
/// <summary>

Tests/TestCesiumFlyToController.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,63 @@ public IEnumerator FlyToLocationLongitudeLatitudeHeight()
7474
Assert.That(goFlyer.transform.position.y, Is.EqualTo(0.0f).Using(FloatEqualityComparer.Instance));
7575
Assert.That(goFlyer.transform.position.z, Is.EqualTo(0.0f).Using(FloatEqualityComparer.Instance));
7676
}
77+
78+
[UnityTest]
79+
public IEnumerator FlyToLocationLongitudeLatitudeHeightInterrupted()
80+
{
81+
GameObject goGeoreference = new GameObject("Georeference");
82+
CesiumGeoreference georeference = goGeoreference.AddComponent<CesiumGeoreference>();
83+
georeference.longitude = -55.0;
84+
georeference.latitude = 55.0;
85+
georeference.height = 1000.0;
86+
87+
GameObject goFlyer = new GameObject("Flyer");
88+
goFlyer.transform.parent = goGeoreference.transform;
89+
90+
CesiumGlobeAnchor anchor = goFlyer.AddComponent<CesiumGlobeAnchor>();
91+
goFlyer.AddComponent<CesiumOriginShift>();
92+
CesiumFlyToController flyToController = goFlyer.AddComponent<CesiumFlyToController>();
93+
94+
// Make the flight fast so the test doesn't take too long.
95+
flyToController.flyToDuration = 0.25;
96+
97+
anchor.adjustOrientationForGlobeWhenMoving = false;
98+
anchor.longitudeLatitudeHeight = new double3(20.0, -25.0, 1000.0);
99+
anchor.adjustOrientationForGlobeWhenMoving = true;
100+
101+
yield return null;
102+
103+
// The origin should have been shifted so the flyer is at the origin.
104+
Assert.That(goFlyer.transform.position.x, Is.EqualTo(0.0f).Using(FloatEqualityComparer.Instance));
105+
Assert.That(goFlyer.transform.position.y, Is.EqualTo(0.0f).Using(FloatEqualityComparer.Instance));
106+
Assert.That(goFlyer.transform.position.z, Is.EqualTo(0.0f).Using(FloatEqualityComparer.Instance));
107+
108+
// Start a flight to elsewhere
109+
bool flightComplete = false;
110+
flyToController.OnFlightComplete += () =>
111+
{
112+
flightComplete = true;
113+
};
114+
115+
bool flightInterrupted = false;
116+
flyToController.OnFlightInterrupted += () =>
117+
{
118+
flightInterrupted = true;
119+
};
120+
121+
flyToController.FlyToLocationLongitudeLatitudeHeight(new double3(100.0, 25.0, 800.0), 0.0f, 0.0f, true);
122+
123+
yield return null;
124+
125+
Assert.IsFalse(flightComplete);
126+
Assert.IsFalse(flightInterrupted);
127+
128+
// Give the object a new position, which should abort the flight.
129+
goFlyer.transform.position = new Vector3(100.0f, 200.0f, 300.0f);
130+
131+
yield return null;
132+
133+
Assert.IsFalse(flightComplete);
134+
Assert.IsTrue(flightInterrupted);
135+
}
77136
}

Tests/TestCesiumGeoreference.cs

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,22 @@ public IEnumerator ChangingOriginAtRuntimeUpdatesGlobeAnchors()
2424

2525
yield return null;
2626

27-
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f));
28-
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(0.0f));
29-
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f));
27+
IEqualityComparer<float> epsilon8f = new FloatEqualityComparer(1e-8f);
28+
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f).Using(epsilon8f));
29+
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(0.0f).Using(epsilon8f));
30+
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f).Using(epsilon8f));
3031

3132
georeference.SetOriginLongitudeLatitudeHeight(-55.1, 54.9, 1001.0);
3233

33-
Assert.That(goAnchored.transform.localPosition.x, Is.Not.EqualTo(0.0f));
34-
Assert.That(goAnchored.transform.localPosition.y, Is.Not.EqualTo(0.0f));
35-
Assert.That(goAnchored.transform.localPosition.z, Is.Not.EqualTo(0.0f));
34+
Assert.That(goAnchored.transform.localPosition.x, Is.Not.EqualTo(0.0f).Using(epsilon8f));
35+
Assert.That(goAnchored.transform.localPosition.y, Is.Not.EqualTo(0.0f).Using(epsilon8f));
36+
Assert.That(goAnchored.transform.localPosition.z, Is.Not.EqualTo(0.0f).Using(epsilon8f));
3637

3738
yield return null;
3839

39-
Assert.That(goAnchored.transform.localPosition.x, Is.Not.EqualTo(0.0f));
40-
Assert.That(goAnchored.transform.localPosition.y, Is.Not.EqualTo(0.0f));
41-
Assert.That(goAnchored.transform.localPosition.z, Is.Not.EqualTo(0.0f));
40+
Assert.That(goAnchored.transform.localPosition.x, Is.Not.EqualTo(0.0f).Using(epsilon8f));
41+
Assert.That(goAnchored.transform.localPosition.y, Is.Not.EqualTo(0.0f).Using(epsilon8f));
42+
Assert.That(goAnchored.transform.localPosition.z, Is.Not.EqualTo(0.0f).Using(epsilon8f));
4243
}
4344

4445
[UnityTest]
@@ -56,9 +57,10 @@ public IEnumerator ChangingParentTransformAndGeoreferenceMaintainsCorrectGlobePo
5657

5758
yield return null;
5859

59-
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f));
60-
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(0.0f));
61-
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f));
60+
IEqualityComparer<float> epsilon8f = new FloatEqualityComparer(1e-8f);
61+
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f).Using(epsilon8f));
62+
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(0.0f).Using(epsilon8f));
63+
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f).Using(epsilon8f));
6264

6365
// Change both the origin and the transform.
6466
georeference.transform.localPosition = new Vector3(100.0f, 200.0f, 300.0f);
@@ -74,10 +76,10 @@ public IEnumerator ChangingParentTransformAndGeoreferenceMaintainsCorrectGlobePo
7476

7577
// Its local local position should be affected by the georeference origin change
7678
// but not by the parent transform change.
77-
IEqualityComparer<float> epsilon4 = new FloatEqualityComparer(1e-3f);
78-
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f).Using(epsilon4));
79-
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(-1000.0f).Using(epsilon4));
80-
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f).Using(epsilon4));
79+
IEqualityComparer<float> epsilon3 = new FloatEqualityComparer(1e-3f);
80+
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(0.0f).Using(epsilon3));
81+
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(-1000.0f).Using(epsilon3));
82+
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(0.0f).Using(epsilon3));
8183
}
8284

8385
[UnityTest]
@@ -97,13 +99,14 @@ public IEnumerator GeoreferenceScaleAffectsGlobeAnchors()
9799

98100
yield return null;
99101

100-
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(1.0f));
101-
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(2.0f));
102-
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(3.0f));
102+
IEqualityComparer<float> epsilon8f = new FloatEqualityComparer(1e-8f);
103+
Assert.That(goAnchored.transform.localPosition.x, Is.EqualTo(1.0f).Using(epsilon8f));
104+
Assert.That(goAnchored.transform.localPosition.y, Is.EqualTo(2.0f).Using(epsilon8f));
105+
Assert.That(goAnchored.transform.localPosition.z, Is.EqualTo(3.0f).Using(epsilon8f));
103106

104-
Assert.That(goAnchored.transform.localScale.x, Is.EqualTo(4.0f));
105-
Assert.That(goAnchored.transform.localScale.y, Is.EqualTo(5.0f));
106-
Assert.That(goAnchored.transform.localScale.z, Is.EqualTo(6.0f));
107+
Assert.That(goAnchored.transform.localScale.x, Is.EqualTo(4.0f).Using(epsilon8f));
108+
Assert.That(goAnchored.transform.localScale.y, Is.EqualTo(5.0f).Using(epsilon8f));
109+
Assert.That(goAnchored.transform.localScale.z, Is.EqualTo(6.0f).Using(epsilon8f));
107110

108111
// The globe anchor's scale initially matches the local scale.
109112
IEqualityComparer<double> epsilon8 = Comparers.Double(1e-8);

0 commit comments

Comments
 (0)