[zorg] r351724 - Fuchsia builder

Petr Hosek via llvm-commits llvm-commits at lists.llvm.org
Sun Jan 20 21:56:52 PST 2019


Author: phosek
Date: Sun Jan 20 21:56:52 2019
New Revision: 351724

URL: http://llvm.org/viewvc/llvm-project?rev=351724&view=rev
Log:
Fuchsia builder

This change introduces Fuchsia builder. This builder compiles a
complete Fuchsia toolchain in Linux host, using a two-stage build.

Differential Revision: https://reviews.llvm.org/D55917

Added:
    zorg/trunk/zorg/buildbot/builders/FuchsiaBuilder.py
Modified:
    zorg/trunk/buildbot/osuosl/master/config/builders.py
    zorg/trunk/buildbot/osuosl/master/config/slaves.py
    zorg/trunk/buildbot/osuosl/master/config/status.py

Modified: zorg/trunk/buildbot/osuosl/master/config/builders.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/buildbot/osuosl/master/config/builders.py?rev=351724&r1=351723&r2=351724&view=diff
==============================================================================
--- zorg/trunk/buildbot/osuosl/master/config/builders.py (original)
+++ zorg/trunk/buildbot/osuosl/master/config/builders.py Sun Jan 20 21:56:52 2019
@@ -19,6 +19,7 @@ from zorg.buildbot.builders import CUDAT
 from zorg.buildbot.builders import AOSPBuilder
 from zorg.buildbot.builders import AnnotatedBuilder
 from zorg.buildbot.builders import LLDPerformanceTestsuite
+from zorg.buildbot.builders import FuchsiaBuilder
 
 # Plain LLVM builders.
 def _get_llvm_builders():
@@ -1513,6 +1514,16 @@ def _get_libcxx_builders():
 
     ]
 
+# Toolchain builders.
+def _get_toolchain_builders():
+      return [
+          {'name': "fuchsia-x86_64-linux",
+           'slavenames' :["fuchsia-debian-64-us-central1-a-1", "fuchsia-debian-64-us-central1-b-1"],
+           'builddir': "fuchsia-x86_64-linux",
+           'factory': FuchsiaBuilder.getToolchainBuildFactory()
+           'category': 'fuchsia'},
+        ]
+
 # Experimental and stopped builders
 def _get_on_demand_builders():
     return [
@@ -1678,6 +1689,10 @@ def get_builders():
         b['category'] = 'libcxx'
         yield b
 
+    for b in _get_toolchain_builders():
+        b['category'] = 'toolchain'
+        yield b
+
     for b in _get_documentation_builders():
         yield b
 

Modified: zorg/trunk/buildbot/osuosl/master/config/slaves.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/buildbot/osuosl/master/config/slaves.py?rev=351724&r1=351723&r2=351724&view=diff
==============================================================================
--- zorg/trunk/buildbot/osuosl/master/config/slaves.py (original)
+++ zorg/trunk/buildbot/osuosl/master/config/slaves.py Sun Jan 20 21:56:52 2019
@@ -255,6 +255,10 @@ def get_build_slaves():
         # FreeBSD 11 amd64
         create_slave("freebsd11-amd64", properties={'jobs': 2}, max_builds=1),
 
+        # Debian 9.0 x86_64 64-core GCE instances
+        create_slave("fuchsia-debian-64-us-central1-a-1", properties={'jobs': 64}, max_builds=1),
+        create_slave("fuchsia-debian-64-us-central1-b-1", properties={'jobs': 64}, max_builds=1),
+
         # Defunct.
         # Debian 86_64, 2 x 6-core Opteron 2.6 GHz
         #create_slave("osu8", properties={'jobs' : 6}, max_builds=2),

Modified: zorg/trunk/buildbot/osuosl/master/config/status.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/buildbot/osuosl/master/config/status.py?rev=351724&r1=351723&r2=351724&view=diff
==============================================================================
--- zorg/trunk/buildbot/osuosl/master/config/status.py (original)
+++ zorg/trunk/buildbot/osuosl/master/config/status.py Sun Jan 20 21:56:52 2019
@@ -264,4 +264,12 @@ def get_status_targets(standard_builders
             builders = ["lldb-x64-windows-ninja"],
             addLogs=False,
             num_lines = 15),
+        InformativeMailNotifier(
+            fromaddr = "llvm.buildmaster at lab.llvm.org",
+            sendToInterestedUsers= False,
+            extraRecipients = ["phosek at google.com"],
+            subject="Build %(builder)s Failure",
+            mode = "failing",
+            builders = ["fuchsia-x86_64-linux"]
+            addLogs=False),
         ]

Added: zorg/trunk/zorg/buildbot/builders/FuchsiaBuilder.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/zorg/buildbot/builders/FuchsiaBuilder.py?rev=351724&view=auto
==============================================================================
--- zorg/trunk/zorg/buildbot/builders/FuchsiaBuilder.py (added)
+++ zorg/trunk/zorg/buildbot/builders/FuchsiaBuilder.py Sun Jan 20 21:56:52 2019
@@ -0,0 +1,159 @@
+import platform
+
+from buildbot.process.properties import WithProperties
+from buildbot.steps.shell import ShellCommand
+from buildbot.steps.source import SVN
+
+from zorg.buildbot.commands.CmakeCommand import CmakeCommand
+from zorg.buildbot.commands.NinjaCommand import NinjaCommand
+from zorg.buildbot.conditions.FileConditions import FileExists, FileDoesNotExist
+from zorg.buildbot.process.factory import LLVMBuildFactory, svn_repos
+
+def getToolchainBuildFactory(
+        clean=False,
+        test=True,
+        env=None, # Environmental variables for all steps.
+        extra_configure_args=None):
+    # Prepare environmental variables. Set here all env we want everywhere.
+    merged_env = {
+        "TERM" : "dumb", # Make sure Clang doesn't use color escape sequences.
+    }
+    if env is not None:
+        # Overwrite pre-set items with the given ones, so user can set anything.
+        merged_env.update(env)
+
+    src_dir = "llvm.src"
+    obj_dir = "llvm.obj"
+    install_dir = "llvm.install"
+
+    f = LLVMBuildFactory(
+            depends_on_projects=[
+                "llvm",
+                "clang",
+                "clang-tools-extra",
+                "compiler-rt",
+                "libcxx",
+                "libcxxabi",
+                "libunwind",
+                "lld"
+            ])
+
+    # Get Fuchsia SDK.
+    sdk_dir = "fuchsia.sdk"
+    sdk_platform = {
+        "Linux": "linux-amd64",
+        "Darwin": "mac-amd64",
+    }[platform.system()]
+    sdk_version = "latest"
+
+    sdk_url = WithProperties(
+        "https://chrome-infra-packages.appspot.com/dl/"
+        "fuchsia/sdk/%(sdk_platform)s/+/%(sdk_version)s",
+        sdk_platform=lambda _: sdk_platform,
+        sdk_version=lambda _: sdk_version)
+
+    f.addStep(RemoveDirectory(name="clean-sdk",
+                              dir=sdk_dir,
+                              haltOnFailure=True,
+                              description=["remove", "fuchsia sdk"],
+                              doStepIf=FileExists(sdk_dir)))
+
+    f.addStep(ShellCommand(name="fetch-sdk",
+                           command=["curl", "-SLf", "-o", "sdk.cipd", sdk_url],
+                           description=["download", "fuchsia sdk"],
+                           workdir=sdk_dir))
+
+    f.addStep(ShellCommand(name="extract-sdk",
+                           command=["unzip", "sdk.cipd"]
+                           description=["extract", "fuchsia sdk"],
+                           workdir=sdk_dir))
+
+    cleanCheckoutRequested = lambda step: step.build.getProperty("clean", default=False) or clean
+
+    # Clean up llvm sources.
+    f.addStep(RemoveDirectory(name="clean-llvm.src",
+                              dir=src_dir,
+                              haltOnFailure=True,
+                              description=["rm", "src", "dir"],
+                              doStepIf=cleanCheckoutRequested))
+
+    # Get sources.
+    for project in f.depends_on_projects:
+        _, baseURL = svn_repos[project]
+        f.addStep(SVN(name="svn-%s" % project,
+                      workdir=src_dir + "/" + project,
+                      baseURL=baseURL))
+
+    cleanBuildRequested = lambda step: step.build.getProperty("clean", default=step.build.getProperty("clean_obj")) or clean
+
+    # Clean up llvm build.
+    f.addStep(RemoveDirectory(name="clean-llvm.obj",
+                              dir=obj_dir,
+                              haltOnFailure=True,
+                              description=["rm", "build", "dir"],
+                              doStepIf=cleanBuildRequested))
+
+    # Configure.
+    if extra_configure_args is None:
+        cmake_options = []
+    else:
+        cmake_options = extra_configure_args[:]
+
+    # Some options are required for this stage no matter what.
+    CmakeCommand.applyRequiredOptions(cmake_options, [
+        ("-G",                      "Ninja"),
+        ("-DLLVM_ENABLE_PROJECTS=", "clang;lld"),
+        ("-DLLVM_ENABLE_RUNTIMES=", "compiler-rt;libcxx;libcxxabi;libunwind"),
+        ])
+
+    # Set proper defaults.
+    CmakeCommand.applyDefaultOptions(cmake_options, [
+        ("-DBOOTSTRAP_LLVM_ENABLE_LTO=", "OFF"),
+        ("-DLLVM_ENABLE_LTO=",           "OFF"),
+        ])
+
+    cmake_options.append(
+        WithProperties(
+            "-DCMAKE_INSTALL_PREFIX=%(workdir)s/" + install_dir,
+            "-DFUCHSIA_SDK=%(workdir)s/" + sdk_dir,
+        ))
+
+    CmakeCommand.applyRequiredOptions(cmake_options, [
+        ("-C", "../" + src_dir + "clang/cmake/caches/Fuchsia.cmake"),
+        ])
+
+    f.addStep(CmakeCommand(name="cmake-configure",
+                           options=cmake_options,
+                           path='../' + src_dir,
+                           haltOnFailure=True,
+                           description=["configure"],
+                           workdir=obj_dir,
+                           env=merged_env,
+                           doStepIf=FileDoesNotExist("CMakeCache.txt")))
+
+    # Build distribution.
+    f.addStep(NinjaCommand(name="ninja-build",
+                           targets=["stage2-distribution"],
+                           haltOnFailure=True,
+                           description=["build"],
+                           workdir=obj_dir,
+                           env=merged_env))
+
+    # Test llvm, clang and lld.
+    f.addStep(NinjaCommand(name="check",
+                           targets=["stage2-check-%s" % p for p in ("llvm", "clang", "lld")],
+                           haltOnFailure=True,
+                           description=["check"],
+                           workdir=obj_dir,
+                           env=merged_env
+                           doStepIf=test))
+
+    # Install distribution.
+    f.addStep(NinjaCommand(name="install",
+                           targets=["stage2-install-distribution"],
+                           haltOnFailure=True,
+                           description=["install"],
+                           workdir=obj_dir,
+                           env=merged_env))
+
+    return f




More information about the llvm-commits mailing list