diff --git a/.gitignore b/.gitignore
index d3721023fe5..f0391264e09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,8 +48,10 @@ capture_webrender/
support/hololens/x64/
support/hololens/ARM/
+support/hololens/ARM64/
support/hololens/ServoApp/x64/
support/hololens/ServoApp/ARM/
+support/hololens/ServoApp/ARM64/
support/hololens/ServoApp/Generated\ Files
# Ignore thumbnails created by Windows
diff --git a/etc/taskcluster/decision_task.py b/etc/taskcluster/decision_task.py
index d959ca5c633..17019fd4211 100644
--- a/etc/taskcluster/decision_task.py
+++ b/etc/taskcluster/decision_task.py
@@ -125,7 +125,6 @@ linux_build_env = {
macos_build_env = {}
windows_build_env = {
"x86_64": {
- "LIB": "%HOMEDRIVE%%HOMEPATH%\\gst\\gstreamer\\1.0\\x86_64\\lib;%LIB%",
"GSTREAMER_1_0_ROOT_X86_64": "%HOMEDRIVE%%HOMEPATH%\\gst\\gstreamer\\1.0\\x86_64\\",
},
"arm64": {
@@ -376,7 +375,7 @@ def android_x86_wpt():
def windows_arm64():
return (
- windows_cross_build_task("Dev build", arch="arm64", package=False)
+ windows_build_task("Dev build", arch="arm64", package=False)
.with_treeherder("Windows arm64")
.with_script(
"python mach build --dev --libsimpleservo \
@@ -741,17 +740,6 @@ def android_build_task(name):
)
-def windows_cross_build_task(name, arch, package):
- return (
- windows_build_task(name, package, arch)
- .with_env(**{
- "VCINSTALLDIR_SERVO": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC\\",
- "VisualStudioVersion": "15.0",
- "WindowsSdkDir": "C:\\Program Files (x86)\\Windows Kits\\10\\",
- })
- )
-
-
def windows_build_task(name, package=True, arch="x86_64"):
hashes = {
"devel": {
diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py
index d7370881a47..f434ea4222e 100644
--- a/python/servo/build_commands.py
+++ b/python/servo/build_commands.py
@@ -164,13 +164,14 @@ class MachCommands(CommandBase):
@CommandArgument('--very-verbose', '-vv',
action='store_true',
help='Print very verbose output')
+ @CommandArgument('--win-arm64', action='store_true', help="Use arm64 Windows target")
@CommandArgument('params', nargs='...',
help="Command-line arguments to be passed through to Cargo")
@CommandBase.build_like_command_arguments
def build(self, release=False, dev=False, jobs=None, params=None,
no_package=False, verbose=False, very_verbose=False,
target=None, android=False, magicleap=False, libsimpleservo=False, uwp=False,
- features=None, **kwargs):
+ features=None, win_arm64=False, **kwargs):
opts = params or []
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
@@ -219,6 +220,12 @@ class MachCommands(CommandBase):
if very_verbose:
opts += ["-vv"]
+ if win_arm64:
+ if target:
+ print("Can't specify explicit --target value with --win-arm64.")
+ sys.exit(1)
+ target = "aarch64-pc-windows-msvc"
+
if target:
if self.config["tools"]["use-rustup"]:
# 'rustup target add' fails if the toolchain is not installed at all.
@@ -235,11 +242,37 @@ class MachCommands(CommandBase):
env["CARGO_TARGET_DIR"] = target_path
host = host_triple()
- if 'apple-darwin' in host and (not target or target == host):
+ target_triple = target or host_triple()
+ if 'apple-darwin' in host and target_triple == host:
if 'CXXFLAGS' not in env:
env['CXXFLAGS'] = ''
env["CXXFLAGS"] += "-mmacosx-version-min=10.10"
+ vcinstalldir = None
+ vs_version = None
+ if host != target_triple and 'windows' in target_triple:
+ if os.environ.get('VisualStudioVersion'):
+ print("Can't cross-compile for Windows inside of a Visual Studio shell.\n"
+ "Please run `python mach build [arguments]` to bypass automatic "
+ "Visual Studio shell.")
+ sys.exit(1)
+ editions = ["Enterprise", "Professional", "Community", "BuildTools"]
+ prog_files = os.environ.get("ProgramFiles(x86)")
+ base_vs_path = os.path.join(prog_files, "Microsoft Visual Studio", "2017")
+ vs_version = "15.0"
+ for edition in editions:
+ vcinstalldir = os.path.join(base_vs_path, edition, "VC")
+ if os.path.exists(vcinstalldir):
+ break
+ else:
+ print("Can't find Visual Studio 2017 installation at %s." % base_vs_path)
+ sys.exit(1)
+
+ if 'windows' in target_triple:
+ gst_root = gstreamer_root(target_triple)
+ if gst_root:
+ append_to_path_env(os.path.join(gst_root, "lib"), env, "LIB")
+
if uwp:
# Don't try and build a desktop port.
libsimpleservo = True
@@ -603,13 +636,12 @@ class MachCommands(CommandBase):
package_generated_shared_libraries(["libEGL.dll", "libGLESv2.dll"], build_path, servo_exe_dir)
# copy needed gstreamer DLLs in to servo.exe dir
- target_triple = target or host_triple()
if "aarch64" not in target_triple:
print("Packaging gstreamer DLLs")
if not package_gstreamer_dlls(servo_exe_dir, target_triple, uwp):
status = 1
print("Packaging MSVC DLLs")
- if not package_msvc_dlls(servo_exe_dir, target_triple):
+ if not package_msvc_dlls(servo_exe_dir, target_triple, vcinstalldir, vs_version):
status = 1
elif sys.platform == "darwin":
@@ -658,17 +690,26 @@ class MachCommands(CommandBase):
return check_call(["cargo", "clean"] + opts, env=self.build_env(), verbose=verbose)
-def package_gstreamer_dlls(servo_exe_dir, target, uwp):
- msvc_x64 = "64" if "x86_64" in target else ""
- gst_x64 = "X86_64" if msvc_x64 == "64" else "X86"
- gst_root = ""
+def gstreamer_root(target):
+ arch = {
+ "x86_64": "X86_64",
+ "x86": "X86",
+ "aarch64": "ARM64",
+ }
+ gst_x64 = arch[target.split('-')[0]]
gst_default_path = path.join("C:\\gstreamer\\1.0", gst_x64)
gst_env = "GSTREAMER_1_0_ROOT_" + gst_x64
if os.environ.get(gst_env) is not None:
- gst_root = os.environ.get(gst_env)
+ return os.environ.get(gst_env)
elif os.path.exists(path.join(gst_default_path, "bin", "ffi-7.dll")):
- gst_root = gst_default_path
+ return gst_default_path
else:
+ return None
+
+
+def package_gstreamer_dlls(servo_exe_dir, target, uwp):
+ gst_root = gstreamer_root(target)
+ if not gst_root:
print("Could not find GStreamer installation directory.")
return False
@@ -799,7 +840,7 @@ def package_gstreamer_dlls(servo_exe_dir, target, uwp):
return not missing
-def package_msvc_dlls(servo_exe_dir, target):
+def package_msvc_dlls(servo_exe_dir, target, vcinstalldir, vs_version):
# copy some MSVC DLLs to servo.exe dir
msvc_redist_dir = None
vs_platforms = {
@@ -809,8 +850,9 @@ def package_msvc_dlls(servo_exe_dir, target):
}
target_arch = target.split('-')[0]
vs_platform = vs_platforms[target_arch]
- vc_dir = os.environ.get("VCINSTALLDIR", "") or os.environ.get("VCINSTALLDIR_SERVO")
- vs_version = os.environ.get("VisualStudioVersion", "")
+ vc_dir = vcinstalldir or os.environ.get("VCINSTALLDIR", "")
+ if not vs_version:
+ vs_version = os.environ.get("VisualStudioVersion", "")
msvc_deps = [
"msvcp140.dll",
"vcruntime140.dll",
@@ -846,8 +888,9 @@ def package_msvc_dlls(servo_exe_dir, target):
return False
redist_dirs = [
msvc_redist_dir,
- path.join(os.environ["WindowsSdkDir"], "Redist", "ucrt", "DLLs", vs_platform),
]
+ if "WindowsSdkDir" in os.environ:
+ redist_dirs += [path.join(os.environ["WindowsSdkDir"], "Redist", "ucrt", "DLLs", vs_platform)]
missing = []
for msvc_dll in msvc_deps:
for dll_dir in redist_dirs:
diff --git a/support/hololens/ServoApp.sln b/support/hololens/ServoApp.sln
index af25f2d8d80..8a585d5bb7d 100644
--- a/support/hololens/ServoApp.sln
+++ b/support/hololens/ServoApp.sln
@@ -8,9 +8,11 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|ARM = Debug|ARM
+ Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|ARM = Release|ARM
+ Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
@@ -18,6 +20,9 @@ Global
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM.ActiveCfg = Debug|ARM
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM.Build.0 = Debug|ARM
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM.Deploy.0 = Debug|ARM
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM64.Build.0 = Debug|ARM64
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|ARM64.Deploy.0 = Debug|ARM64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|x64.ActiveCfg = Debug|x64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|x64.Build.0 = Debug|x64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Debug|x64.Deploy.0 = Debug|x64
@@ -27,6 +32,9 @@ Global
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM.ActiveCfg = Release|ARM
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM.Build.0 = Release|ARM
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM.Deploy.0 = Release|ARM
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM64.ActiveCfg = Release|ARM64
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM64.Build.0 = Release|ARM64
+ {0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|ARM64.Deploy.0 = Release|ARM64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|x64.ActiveCfg = Release|x64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|x64.Build.0 = Release|x64
{0EAB7D8B-97FD-4C92-8BB2-D5691B3D5ABD}.Release|x64.Deploy.0 = Release|x64
diff --git a/support/hololens/ServoApp/ServoApp.vcxproj b/support/hololens/ServoApp/ServoApp.vcxproj
index 9e24c98119b..382b1f6d8b4 100644
--- a/support/hololens/ServoApp/ServoApp.vcxproj
+++ b/support/hololens/ServoApp/ServoApp.vcxproj
@@ -21,6 +21,10 @@
Debug
ARM
+
+ Debug
+ ARM64
+
Debug
Win32
@@ -33,6 +37,10 @@
Release
ARM
+
+ Release
+ ARM64
+
Release
Win32
@@ -88,11 +96,14 @@
_DEBUG;%(PreprocessorDefinitions)
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\debug\
+ $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\aarch64-pc-windows-msvc\debug\
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\debug\
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\debug\
WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
+ WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
+ $(ProjectDir)\..\..\..\target\aarch64-pc-windows-msvc\debug\
WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
@@ -106,11 +117,14 @@
NDEBUG;%(PreprocessorDefinitions)
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\release
+ $(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\aarch64-pc-windows-msvc\release
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\release
$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories);$(ProjectDir)\..\..\..\target\release
WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
+ WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
+ $(ProjectDir)\..\..\..\target\aarch64-pc-windows-msvc\release\
WindowsApp.lib;%(AdditionalDependencies);simpleservo.dll.lib
@@ -153,347 +167,853 @@
Designer
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
+
+ true
+ true
+ false
+
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
true
+ true
+ false
+ true
+ false
diff --git a/support/hololens/ServoApp/ServoApp.vcxproj.filters b/support/hololens/ServoApp/ServoApp.vcxproj.filters
index 69823c7f0fa..84dbece0986 100644
--- a/support/hololens/ServoApp/ServoApp.vcxproj.filters
+++ b/support/hololens/ServoApp/ServoApp.vcxproj.filters
@@ -432,6 +432,36 @@
DebugServoDLLs
+
+ DebugARM64ServoDLLs
+
+
+ DebugARM64ServoDLLs
+
+
+ DebugARM64ServoDLLs
+
+
+ DebugARM64ServoDLLs
+
+
+ DebugARM64ServoDLLs
+
+
+ ReleaseARM64ServoDLLs
+
+
+ ReleaseARM64ServoDLLs
+
+
+ ReleaseARM64ServoDLLs
+
+
+ ReleaseARM64ServoDLLs
+
+
+ ReleaseARM64ServoDLLs
+
@@ -449,6 +479,12 @@
{83d6e7af-b929-4869-804e-571256af2969}
+
+ {e372e8ac-7cab-47de-80a5-020370a51fd4}
+
+
+ {384b4019-d076-4301-994d-a891969a3036}
+