Index: zorg/buildbot/builders/SanitizerBuilderWindows.py =================================================================== --- zorg/buildbot/builders/SanitizerBuilderWindows.py +++ zorg/buildbot/builders/SanitizerBuilderWindows.py @@ -11,6 +11,7 @@ from zorg.buildbot.builders.Util import getVisualStudioEnvironment from zorg.buildbot.builders.Util import extractSlaveEnvironment from zorg.buildbot.builders.Util import extractClangVersion +from zorg.buildbot.commands.CmakeCommand import CmakeCommand from zorg.buildbot.commands.NinjaCommand import NinjaCommand def getSource(f,llvmTopDir='llvm'): @@ -35,14 +36,13 @@ def getSanitizerWindowsBuildFactory( clean=False, - cmake='cmake', # Default values for VS devenv and build configuration vs=r"""%VS120COMNTOOLS%""", config='Release', target_arch='x86', - extra_cmake_args=[]): + extra_configure_args= None): ############# PREPARING f = buildbot.process.factory.BuildFactory() @@ -77,14 +77,29 @@ doStepIf=cleanBuildRequested )) - f.addStep(ShellCommand(name='cmake', - command=[cmake, "-G", "Ninja", "../llvm", - "-DCMAKE_BUILD_TYPE="+config, - "-DLLVM_ENABLE_ASSERTIONS=ON"] - + extra_cmake_args, + # Make a local copy of the configure args, as we are going to modify that. + if extra_configure_args: + cmake_args = extra_configure_args[:] + else: + cmake_args = list() + + # Set proper defaults. + CmakeCommand.applyDefaultOptions(cmake_args, [ + ('-G', 'Ninja'), + ('-DCMAKE_BUILD_TYPE=', config), + ('-DLLVM_ENABLE_ASSERTIONS=', 'ON') + ]) + + # Create configuration files with cmake + f.addStep(CmakeCommand(name="cmake-configure", + options=cmake_args, + path="../llvm", haltOnFailure=True, + description=["cmake configure"], workdir=build_dir, - env=Property('slave_env'))) + env=Property('slave_env'), + doStepIf=FileDoesNotExist( + "./%s/CMakeCache.txt" % build_dir))) # Build compiler-rt first to speed up detection of Windows-specific # compiler-time errors in the sanitizer runtimes. @@ -143,18 +158,32 @@ # Get absolute path to clang-cl. clang_cl = "%(prop:workdir)s/" + build_dir + "/bin/clang-cl" - f.addStep(ShellCommand(name='cmake', - command=[cmake, "-G", "Ninja", "../llvm", - "-DCMAKE_BUILD_TYPE="+config, - "-DLLVM_ENABLE_ASSERTIONS=ON", - Interpolate("-DCMAKE_C_COMPILER="+clang_cl), - Interpolate("-DCMAKE_CXX_COMPILER="+clang_cl), - "-DLLVM_USE_SANITIZER=Address", - "-DLLVM_USE_SANITIZE_COVERAGE=YES"] - + extra_cmake_args, + + # Set proper defaults. + CmakeCommand.applyDefaultOptions(cmake_args, [ + ('-G', 'Ninja'), + ('-DCMAKE_BUILD_TYPE=', config), + ('-DLLVM_ENABLE_ASSERTIONS=', 'ON'), + ]) + + # Some options are required for this build no matter what. + CmakeCommand.applyRequiredOptions(cmake_args, [ + ('-DCMAKE_C_COMPILER=', Interpolate(clang_cl)), + ('-DCMAKE_CXX_COMPILER=', Interpolate(clang_cl)), + ('-DLLVM_USE_SANITIZER=', 'Address'), + ('-DLLVM_USE_SANITIZE_COVERAGE=', 'YES') + ]) + + # Create configuration files with cmake + f.addStep(CmakeCommand(name="cmake-fuzzer-configure", + options=cmake_args, + path="../llvm", haltOnFailure=True, + description=["cmake fuzzer configure"], workdir=build_fuzzer_dir, - env=Property('slave_env'))) + env=Property('slave_env'), + doStepIf=FileDoesNotExist( + "./%s/CMakeCache.txt" % build_fuzzer_dir))) # Build libFuzzer. f.addStep(NinjaCommand(name='build LLVMFuzzer',