diff --git a/buildbot/osuosl/master/config/builders.py b/buildbot/osuosl/master/config/builders.py --- a/buildbot/osuosl/master/config/builders.py +++ b/buildbot/osuosl/master/config/builders.py @@ -20,10 +20,12 @@ from zorg.buildbot.builders import LLDPerformanceTestsuite from zorg.buildbot.builders import FuchsiaBuilder from zorg.buildbot.builders import XToolchainBuilder +from zorg.buildbot.builders import ZigBuilder from zorg.buildbot.builders import HtmlDocsBuilder from zorg.buildbot.builders import DoxygenDocsBuilder + reload(HtmlDocsBuilder) reload(DoxygenDocsBuilder) @@ -1920,5 +1922,15 @@ "-DGRPC_INSTALL_PATH=/usr/local/lib/grpc" ])}, - -] + {'name': "ziglang-carbon", + 'tags': ["ziglang"], + 'workernames': ["ziglang-carbon-linux-x86_64"], + 'builddir': "ziglang-carbon-root", + 'factory': ZigBuilder.getZiglangToolchainBuildFactory( + clean=True, + test=True, + env={ + 'CC': 'clang', 'CXX': 'clang++', 'LD': 'lld', + } + )} +] \ No newline at end of file diff --git a/buildbot/osuosl/master/config/workers.py b/buildbot/osuosl/master/config/workers.py --- a/buildbot/osuosl/master/config/workers.py +++ b/buildbot/osuosl/master/config/workers.py @@ -247,4 +247,7 @@ # XCore target, Ubuntu 20.04 x64 host create_worker("xcore-ubuntu20-x64", properties={'jobs': 4}, max_builds=1), + + # Ziglang worker + create_worker("ziglang-carbon", properties={'jobs': 24}, max_builds=1), ] diff --git a/zorg/buildbot/builders/ZigBuilder.py b/zorg/buildbot/builders/ZigBuilder.py new file mode 100644 --- /dev/null +++ b/zorg/buildbot/builders/ZigBuilder.py @@ -0,0 +1,144 @@ +import json +import urllib.request + +from buildbot.plugins import steps +from buildbot.steps.shell import ShellCommand, WarningCountingShellCommand +from buildbot.process.properties import WithProperties, Property +from buildbot.commands.CmakeCommand import CmakeCommand +from buildbot.process.factory import LLVMBuildFactory + + +def getZiglangToolchainBuildFactory( + clean=False, + env=None, + jobs="%(jobs)s", + extra_configure_args=None, + extra_cmake_args=None, + config='Release', + install=False, + testTimeout=2400, + test=False): + build_env = { + "TERM": "dumb", + } + + if env is not None: + build_env.update(env) + + llvm_src_dir = "llvm" + llvm_build_dir = "build" + + f = LLVMBuildFactory( + depends_on_projects=[ + "llvm", + "clang", + "lld" + ], + obj_dir=llvm_build_dir) + + f.addGetSourcecodeSteps() + + build_cmd = ["ninja"] + install_cmd = ["ninja", "install"] + test_cmd = ["./build/zig", "build", "test"] + + if jobs: + build_cmd.append(WithProperties("-j%s" % jobs)) + install_cmd.append(WithProperties("-j%s" % jobs)) + test_cmd.append(WithProperties("-j%s" % jobs)) + + cleanBuildRequested = lambda step: clean or step.build.getProperty("clean", + default=step.build.getProperty("clean_obj")) + + f.addStep(steps.RemoveDirectory( + name="clean "+llvm_build_dir, + dir=llvm_build_dir, + haltOnFailure=False, + doStepIf=cleanBuildRequested + )) + + zig_rel_src_dir = LLVMBuildFactory.pathRelativeTo(f.llvm_srcdir, f.obj_dir) + cmake_options = [ + "-G", "Ninja", + "-DCMAKE_BUILD_TYPE=" + config, + "-DCMAKE_INSTALL_PREFIX=../install", + "-DLLVM_ENABLE_PROJECTS=%s" % ";".join(f.depends_on_projects), + ] + + if extra_configure_args: + cmake_options += extra_cmake_args + + f.addStep(CmakeCommand( + name="cmake-configure", + description=["cmake configure"], + haltOnFailure=True, + path=zig_rel_src_dir, + env=env, + workdir=llvm_build_dir + )) + + f.addStep(WarningCountingShellCommand( + name='build', + command=build_cmd, + haltOnFailure=True, + description='ninja build', + workdir=llvm_build_dir, + env=env + )) + + f.addStep(ShellCommand( + name='test', + command=test_cmd, + timeout=testTimeout, + description='ninja test', + workdir=llvm_build_dir, + doStepIf=bool(test), + env=env)) + + f.addStep(ShellCommand( + name="install", + command=install_cmd, + description="ninja install", + workdir=llvm_build_dir, + doStepif=bool(install), + env=env + )) + + zig_src_dir = ["zig"], + zig_build_dir = ["build"], + zig_test_cmd = [zig_build_dir, "/zig", "build", "test"] + + json_text = urllib.request.urlopen("https://ziglang.org/download/index.json").read().decode() + src_url = json.load(json_text)['master']['src']['tarball'] + + f.addStep(ShellCommand( + name="fetch-src", + command=["curl", "-Sf", "-o", "zig.tar.xz", src_url], + description=["download", "zig source code"], + workdir=zig_src_dir, + haltOnFailure=True + )) + + f.addStep(ShellCommand( + name="extract-src", + command=["tar", " xvf", "zig.tar.xz"], + description=["extract", "zig source code"], + workdir=zig_src_dir + )) + + f.addStep(CmakeCommand( + name="cmake-configure", + description=["cmake configure"], + haltOnFailure=True, + env=env, + options=cmake_options.pop(), + workdir=zig_build_dir + )) + + f.assStep(ShellCommand( + name="test-zig", + command=zig_test_cmd, + timeOut=testTimeout, + workdir=zig_src_dir, + description="" + )) \ No newline at end of file