servo: Merge #15564 - Disable LLVM assertions by default, on supported platforms (from servo:no-gods-no-masters-no-assertions); r=Ms2ger
authorSimon Sapin <simon.sapin@exyr.org>
Fri, 17 Feb 2017 02:04:44 -0800
changeset 343491 5c76d32814463ace867ea06e79f5afbe66e29426
parent 343490 3e666ca23ce5383a0458a3730a3840d7cd8ea345
child 343492 d7bf5b3165ad2093b5c17698208a72c58f240489
push id31381
push userkwierso@gmail.com
push dateFri, 17 Feb 2017 20:45:51 +0000
treeherdermozilla-central@f302def88fe5 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersMs2ger
milestone54.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
servo: Merge #15564 - Disable LLVM assertions by default, on supported platforms (from servo:no-gods-no-masters-no-assertions); r=Ms2ger <!-- Please describe your changes on the following line: --> https://github.com/servo/servo/pull/15559#issuecomment-280003926 > With an empty incremental compilation cache (or, presumably, with incremental compilation disabled), LLVM assertions add 16% to the compilation time in debug mode, 53% (!) in release mode. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #15548 (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: 1afae52c47e754c6573f4a8b72fcc2e6994d253f
servo/etc/ci/buildbot_steps.yml
servo/python/servo/command_base.py
servo/python/servo/util.py
servo/servobuild.example
--- a/servo/etc/ci/buildbot_steps.yml
+++ b/servo/etc/ci/buildbot_steps.yml
@@ -9,19 +9,19 @@ mac-rel-wpt1:
   - bash ./etc/ci/manifest_changed.sh
 
 mac-rel-wpt2:
   - ./mach build --release
   - ./mach test-wpt --release --processes 8 --total-chunks 2 --this-chunk 2 --log-raw test-wpt.log --log-errorsummary wpt-errorsummary.log --always-succeed
   - ./mach filter-intermittents wpt-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-wpt-errorsummary.log --use-tracker
 
 mac-dev-unit:
-  - ./mach build --dev
-  - ./mach test-unit
-  - ./mach build-cef
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --dev
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach test-unit
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build-cef
   - ./mach build-geckolib
   - bash ./etc/ci/lockfile_changed.sh
   - bash ./etc/ci/manifest_changed.sh
 
 mac-rel-css:
   - ./mach build --release
   - ./mach test-css --release --processes 4 --log-raw test-css.log --log-errorsummary css-errorsummary.log --always-succeed
   - ./mach filter-intermittents css-errorsummary.log --log-intermittents intermittents.log --log-filteredsummary filtered-css-errorsummary.log --use-tracker
@@ -41,20 +41,20 @@ linux-rel-intermittent:
 
 mac-rel-intermittent:
   - ./mach build --release
   - ./etc/ci/check_intermittents.sh --log-raw intermittents.log
 
 linux-dev:
   - ./mach test-tidy --no-progress --all
   - ./mach test-tidy --no-progress --self-test
-  - ./mach build --dev
-  - ./mach test-compiletest
-  - ./mach test-unit
-  - ./mach build-cef
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --dev
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach test-compiletest
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach test-unit
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build-cef
   - ./mach build-geckolib
   - ./mach test-stylo
   - bash ./etc/ci/lockfile_changed.sh
   - bash ./etc/ci/manifest_changed.sh
   - bash ./etc/ci/check_no_panic.sh
 
 linux-rel-wpt:
   - ./mach build --release --with-debug-assertions
@@ -74,34 +74,34 @@ linux-rel-css:
   - bash ./etc/ci/manifest_changed.sh
 
 linux-nightly:
   - ./mach build --release
   - ./mach package --release
   - ./etc/ci/upload_nightly.sh linux
 
 android:
-  - ./mach build --android --dev
-  - ./mach package --android --dev
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --android --dev
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach package --android --dev
   - bash ./etc/ci/lockfile_changed.sh
   - bash ./etc/ci/manifest_changed.sh
   - python ./etc/ci/check_dynamic_symbols.py
 
 android-nightly:
-  - ./mach build --android --release
-  - ./mach package --android --release
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --android --release
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach package --android --release
   - ./etc/ci/upload_nightly.sh android
 
 arm32:
-  - ./mach build --rel --target=arm-unknown-linux-gnueabihf
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --rel --target=arm-unknown-linux-gnueabihf
   - bash ./etc/ci/lockfile_changed.sh
   - bash ./etc/ci/manifest_changed.sh
 
 arm64:
-  - ./mach build --rel --target=aarch64-unknown-linux-gnu
+  - env SERVO_RUSTC_LLVM_ASSERTIONS=1 ./mach build --rel --target=aarch64-unknown-linux-gnu
   - bash ./etc/ci/lockfile_changed.sh
   - bash ./etc/ci/manifest_changed.sh
 
 windows-gnu-dev:
   - ./mach build --dev
   - ./mach test-unit
   - ./mach build-geckolib
 
--- a/servo/python/servo/command_base.py
+++ b/servo/python/servo/command_base.py
@@ -18,17 +18,17 @@ import subprocess
 from subprocess import PIPE
 import sys
 import tarfile
 
 from mach.registrar import Registrar
 import toml
 
 from servo.packages import WINDOWS_MSVC as msvc_deps
-from servo.util import host_triple
+from servo.util import host_triple, host_platform
 
 BIN_SUFFIX = ".exe" if sys.platform == "win32" else ""
 
 
 @contextlib.contextmanager
 def cd(new_path):
     """Context manager for changing the current working directory"""
     previous_path = os.getcwd()
@@ -258,20 +258,25 @@ class CommandBase(object):
         self.config["tools"].setdefault("system-cargo", False)
         self.config["tools"].setdefault("rust-root", "")
         self.config["tools"].setdefault("cargo-root", "")
         if not self.config["tools"]["system-cargo"]:
             self.config["tools"]["cargo-root"] = path.join(
                 context.sharedir, "cargo", self.cargo_build_id())
         self.config["tools"].setdefault("rustc-with-gold", get_env_bool("SERVO_RUSTC_WITH_GOLD", True))
 
+        # https://github.com/rust-lang/rust/pull/39754
+        platforms_with_rustc_alt_builds = ["unknown-linux-gnu", "apple-darwin", "pc-windows-msvc"]
+        llvm_assertions_default = ("SERVO_RUSTC_LLVM_ASSERTIONS" in os.environ
+                                   or host_platform() not in platforms_with_rustc_alt_builds)
+
         self.config.setdefault("build", {})
         self.config["build"].setdefault("android", False)
         self.config["build"].setdefault("mode", "")
-        self.config["build"].setdefault("llvm-assertions", True)
+        self.config["build"].setdefault("llvm-assertions", llvm_assertions_default)
         self.config["build"].setdefault("debug-mozjs", False)
         self.config["build"].setdefault("ccache", "")
         self.config["build"].setdefault("rustflags", "")
         self.config["build"].setdefault("incremental", False)
 
         self.config.setdefault("android", {})
         self.config["android"].setdefault("sdk", "")
         self.config["android"].setdefault("ndk", "")
--- a/servo/python/servo/util.py
+++ b/servo/python/servo/util.py
@@ -15,17 +15,17 @@ import platform
 import sys
 from socket import error as socket_error
 import StringIO
 import tarfile
 import zipfile
 import urllib2
 
 
-def host_triple():
+def host_platform():
     os_type = platform.system().lower()
     if os_type == "linux":
         os_type = "unknown-linux-gnu"
     elif os_type == "darwin":
         os_type = "apple-darwin"
     elif os_type == "android":
         os_type = "linux-androideabi"
     elif os_type == "windows":
@@ -37,17 +37,21 @@ def host_triple():
         else:
             os_type = "unknown"
     elif os_type.startswith("mingw64_nt-") or os_type.startswith("cygwin_nt-"):
         os_type = "pc-windows-gnu"
     elif os_type == "freebsd":
         os_type = "unknown-freebsd"
     else:
         os_type = "unknown"
+    return os_type
 
+
+def host_triple():
+    os_type = host_platform()
     cpu_type = platform.machine().lower()
     if os_type.endswith("-msvc"):
         # vcvars*.bat should set it properly
         platform_env = os.environ.get("PLATFORM")
         if platform_env == "X86":
             cpu_type = "i686"
         elif platform_env == "X64":
             cpu_type = "x86_64"
--- a/servo/servobuild.example
+++ b/servo/servobuild.example
@@ -35,17 +35,17 @@ rustc-with-gold = true
 
 [build]
 # Set "mode = dev" or use `mach build --dev` to build the project with warning.
 # or Set "mode = release" or use `mach build --release` for optimized build.
 # Defaults to prompting before building
 #mode = "dev"
 
 # Whether to enable LLVM assertions in rustc.
-#llvm-assertions = true
+#llvm-assertions = false
 
 # Set "android = true" or use `mach build --android` to build the Android app.
 android = false
 
 # Set "debug-mozjs" or use `mach build --debug-mozjs` to build a debug spidermonkey.
 debug-mozjs = false
 
 # Set to the path to your ccache binary to enable caching of compiler outputs