Ejemplo n.º 1
0
def Toolchain():
  buildbot.Step('Toolchain')
  Mkdir(HOST_DIR)
  Mkdir(os.path.join(HOST_DIR, 'cmake', 'Modules', 'Platform'))
  shutil.copy2(os.path.join(SCRIPT_DIR, 'cmake', 'Modules', 'Platform', 'Wavix.cmake'),
               os.path.join(HOST_DIR,   'cmake', 'Modules', 'Platform'))
  shutil.copy2(os.path.join(SCRIPT_DIR, 'wavix_toolchain.cmake'),
               HOST_DIR)
Ejemplo n.º 2
0
def Musl():
    buildbot.Step('musl')
    Mkdir(MUSL_OUT_DIR)
    path = os.environ['PATH']
    try:
        # Build musl directly to wasm object files in an ar library
        proc.check_call([
            os.path.join(MUSL_SRC_DIR, 'libc.py'), '--clang_dir', HOST_BIN,
            '--out',
            os.path.join(MUSL_OUT_DIR, 'libc.a'), '--musl', MUSL_SRC_DIR
        ])
        CopyLibraryToSysroot(SYSROOT_DIR, os.path.join(MUSL_OUT_DIR, 'libc.a'))
        CopyLibraryToSysroot(SYSROOT_DIR, os.path.join(MUSL_OUT_DIR, 'crt1.o'))
        CopyLibraryToSysroot(
            SYSROOT_DIR,
            os.path.join(MUSL_SRC_DIR, 'arch', 'wasm32', 'libc.imports'))

        CopyTree(os.path.join(MUSL_SRC_DIR, 'include'),
                 os.path.join(SYSROOT_DIR, 'include'))
        CopyTree(os.path.join(MUSL_SRC_DIR, 'arch', 'generic'),
                 os.path.join(SYSROOT_DIR, 'include'))
        CopyTree(os.path.join(MUSL_SRC_DIR, 'arch', 'wasm32'),
                 os.path.join(SYSROOT_DIR, 'include'))
        CopyTree(os.path.join(MUSL_OUT_DIR, 'obj', 'include'),
                 os.path.join(SYSROOT_DIR, 'include'))

    except proc.CalledProcessError:
        # Note the failure but allow the build to continue.
        buildbot.Fail()
    finally:
        os.environ['PATH'] = path
Ejemplo n.º 3
0
def LibCXXABI():
    buildbot.Step('libcxxabi')

    # TODO(sbc): Remove this.
    # The compiler-rt doesn't currently rebuild libraries when a new -DCMAKE_AR
    # value is specified.
    if os.path.isdir(LIBCXXABI_OUT_DIR):
        Remove(LIBCXXABI_OUT_DIR)

    Mkdir(LIBCXXABI_OUT_DIR)
    command = [
        CMAKE_BIN, '-G', CMAKE_GENERATOR, LIBCXXABI_SRC_DIR,
        '-DCMAKE_BUILD_TYPE=RelWithDebInfo', '-DCMAKE_TOOLCHAIN_FILE=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'wavix_toolchain.cmake')),
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES', '-DCMAKE_C_COMPILER_WORKS=YES',
        '-DCMAKE_CXX_COMPILER_WORKS=YES', '-DLIBCXXABI_LIBCXX_PATH=' +
        LIBCXX_SRC_DIR, '-DLIBCXXABI_LIBCXX_INCLUDES=' +
        os.path.join(LIBCXX_SRC_DIR, 'include'),
        '-DLIBCXXABI_ENABLE_STATIC=ON', '-DLIBCXXABI_ENABLE_SHARED=OFF',
        '-DLIBCXXABI_ENABLE_THREADS=ON', '-DLIBCXXABI_SYSROOT=' + SYSROOT_DIR,
        '-DLIBCXXABI_USE_COMPILER_RT=ON', '-DLIBCXXABI_ENABLE_PIC=OFF',
        '-DCMAKE_INSTALL_PREFIX=' + WindowsFSEscape(SYSROOT_DIR)
    ]

    proc.check_call(command, cwd=LIBCXXABI_OUT_DIR)
    proc.check_call([NINJA_BIN, 'install'], cwd=LIBCXXABI_OUT_DIR)

    CopyLibraryToSysroot(SYSROOT_DIR,
                         os.path.join(LIBCXXABI_SRC_DIR, 'libc++abi.imports'))
Ejemplo n.º 4
0
def CompilerRT():
    # TODO(sbc): Figure out how to do this step as part of the llvm build.
    # I suspect that this can be done using the llvm/runtimes directory but
    # have yet to make it actually work this way.
    buildbot.Step('compiler-rt')

    # TODO(sbc): Remove this.
    # The compiler-rt doesn't currently rebuild libraries when a new -DCMAKE_AR
    # value is specified.
    if os.path.isdir(COMPILER_RT_OUT_DIR):
        Remove(COMPILER_RT_OUT_DIR)

    Mkdir(COMPILER_RT_OUT_DIR)
    command = [
        CMAKE_BIN, '-G', CMAKE_GENERATOR,
        WindowsFSEscape(os.path.join(COMPILER_RT_SRC_DIR, 'lib', 'builtins')),
        '-DCMAKE_BUILD_TYPE=RelWithDebInfo', '-DCMAKE_TOOLCHAIN_FILE=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'wavix_toolchain.cmake')),
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES', '-DCMAKE_C_COMPILER_WORKS=YES',
        '-DCMAKE_CXX_COMPILER_WORKS=YES', '-DCOMPILER_RT_BAREMETAL_BUILD=On',
        '-DCOMPILER_RT_BUILD_XRAY=OFF', '-DCOMPILER_RT_INCLUDE_TESTS=OFF',
        '-DCOMPILER_RT_ENABLE_IOS=OFF', '-DCOMPILER_RT_DEFAULT_TARGET_ONLY=On',
        '-DLLVM_CONFIG_PATH=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'bin', 'llvm-config')),
        '-DCOMPILER_RT_OS_DIR=wavix', '-DCMAKE_INSTALL_PREFIX=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'lib', 'clang', '9.0.0'))
    ]

    proc.check_call(command, cwd=COMPILER_RT_OUT_DIR)
    proc.check_call([NINJA_BIN, 'install'], cwd=COMPILER_RT_OUT_DIR)
Ejemplo n.º 5
0
def HostLLVM():
    buildbot.Step('host-llvm')
    Mkdir(HOST_LLVM_OUT_DIR)
    build_dylib = 'ON' if not IsWindows() else 'OFF'
    command = [
        CMAKE_BIN,
        '-G',
        CMAKE_GENERATOR,
        LLVM_SRC_DIR,
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES',
        '-DLLVM_EXTERNAL_CLANG_SOURCE_DIR=' + CLANG_SRC_DIR,
        '-DLLVM_EXTERNAL_LLD_SOURCE_DIR=' + LLD_SRC_DIR,
        '-DLLVM_TOOL_CLANG_BUILD=ON',
        '-DLLVM_TOOL_LLD_BUILD=ON',
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=ON',
        '-DLLVM_BUILD_TESTS=OFF',
        '-DCMAKE_BUILD_TYPE=Release',  #'-DCMAKE_BUILD_TYPE=RelWithDebInfo',
        '-DCMAKE_INSTALL_PREFIX=' + HOST_DIR,
        '-DCLANG_INCLUDE_TESTS=OFF',
        '-DCLANG_INCLUDE_DOCS=OFF',
        '-DLLVM_INCLUDE_EXAMPLES=OFF',
        '-DLLVM_INCLUDE_DOCS=OFF',
        '-DLLVM_INCLUDE_GO_TESTS=OFF',
        '-DLLVM_INCLUDE_TESTS=OFF',
        '-DLLVM_BUILD_LLVM_DYLIB=%s' % build_dylib,
        '-DLLVM_LINK_LLVM_DYLIB=%s' % build_dylib,
        # Our mac bot's toolchain's ld64 is too old for trunk libLTO.
        '-DLLVM_TOOL_LTO_BUILD=OFF',
        '-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly',
        '-DLLVM_TARGETS_TO_BUILD=X86'
    ]

    proc.check_call(command, cwd=HOST_LLVM_OUT_DIR)
    proc.check_call([NINJA_BIN, 'install'], cwd=HOST_LLVM_OUT_DIR)
Ejemplo n.º 6
0
def HostWAVM():
  buildbot.Step('HostWAVM')
  Mkdir(HOST_WAVM_OUT_DIR)
  command = [CMAKE_BIN, '-G', CMAKE_GENERATOR, WAVM_SRC_DIR, 
             '-DCMAKE_BUILD_TYPE=RelWithDebInfo',
             '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES',
             '-DCMAKE_INSTALL_PREFIX=' + HOST_DIR,
             '-DLLVM_DIR=' + os.path.join(HOST_DIR, 'lib/cmake/llvm') ]

  proc.check_call(command, cwd=HOST_WAVM_OUT_DIR)
  proc.check_call([NINJA_BIN, 'install'], cwd=HOST_WAVM_OUT_DIR)
Ejemplo n.º 7
0
def LinkLLVMTorture(name, linker, fails, indir, outdir, extension,
                    opt, args=None):
  buildbot.Step('Link LLVM Torture (%s, %s)' % (name, opt))
  assert os.path.isfile(linker), 'Cannot find linker at %s' % linker
  Remove(outdir)
  Mkdir(outdir)
  input_pattern = os.path.join(indir, '*.' + extension)
  unexpected_result_count = link_assembly_files.run(
      linker=linker, files=input_pattern, fails=fails, attributes=[opt],
      out=outdir, args=args)
  if 0 != unexpected_result_count:
    buildbot.Fail()
Ejemplo n.º 8
0
def WAVM():
  buildbot.Step('WAVM')
  Mkdir(WAVM_OUT_DIR)
  command = [CMAKE_BIN, '-G', CMAKE_GENERATOR, WAVM_SRC_DIR, 
             '-DCMAKE_BUILD_TYPE=RelWithDebInfo',
             '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES',
             '-DCMAKE_INSTALL_PREFIX=' + SYSROOT_DIR,
             '-DCMAKE_TOOLCHAIN_FILE=' +
             WindowsFSEscape(os.path.join(HOST_DIR, 'wavix_toolchain.cmake')),
             '-DWAVM_ENABLE_RUNTIME=OFF',
             '-DWAVM_ENABLE_STATIC_LINKING=ON',
             '-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON' ]

  proc.check_call(command, cwd=WAVM_OUT_DIR)
  proc.check_call([NINJA_BIN, 'install'], cwd=WAVM_OUT_DIR)
Ejemplo n.º 9
0
def CompileLLVMTorture(outdir, opt):
  name = 'Compile LLVM Torture (%s)' % (opt)
  buildbot.Step(name)
  c = Executable(os.path.join(HOST_BIN, 'clang'))
  cxx = Executable(os.path.join(HOST_BIN, 'clang++'))
  Remove(outdir)
  Mkdir(outdir)
  unexpected_result_count = compile_torture_tests.run(
      c=c, cxx=cxx, testsuite=GCC_TEST_DIR,
      sysroot_dir=SYSROOT_DIR,
      fails=LLVM_KNOWN_TORTURE_FAILURES,
      out=outdir,
      config='wasm-o',
      opt=opt)
  if 0 != unexpected_result_count:
    buildbot.Fail()
Ejemplo n.º 10
0
def CoreUtils():
  buildbot.Step('coreutils')
  Mkdir(COREUTILS_OUT_DIR)

  # Build bash 
  proc.check_call([
      'bash',
      WAVIX_SRC_DIR.replace('\\', '/').replace('C:','/mnt/c') + '/coreutils/build-wavix-coreutils.sh',
      WAVIX_SRC_DIR.replace('\\', '/').replace('C:','/mnt/c'),
      BUILD_DIR.replace('\\', '/'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/clang'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/llvm-ar'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/llvm-ranlib'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/clang-cpp')
      ], cwd=COREUTILS_OUT_DIR)
Ejemplo n.º 11
0
def Bash():
  buildbot.Step('bash')
  Mkdir(BASH_OUT_DIR)

  # Build bash 
  proc.check_call([
      'bash',
      WAVIX_SRC_DIR.replace('\\', '/').replace('C:','/mnt/c') + '/bash/build-wavix-bash.sh',
      WAVIX_SRC_DIR.replace('\\', '/').replace('C:','/mnt/c'),
      BUILD_DIR.replace('\\', '/'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/clang'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/llvm-ar'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/llvm-ranlib'),
      BUILD_DIR.replace('\\', '/').replace('C:','/mnt/c') + Executable('/host/bin/clang-cpp')
      ], cwd=BASH_OUT_DIR)
Ejemplo n.º 12
0
def LibCXX():
    buildbot.Step('libcxx')

    # TODO(sbc): Remove this.
    # The compiler-rt doesn't currently rebuild libraries when a new -DCMAKE_AR
    # value is specified.
    if os.path.isdir(LIBCXX_OUT_DIR):
        Remove(LIBCXX_OUT_DIR)

    Mkdir(LIBCXX_OUT_DIR)
    command = [
        CMAKE_BIN,
        '-G',
        CMAKE_GENERATOR,
        LIBCXX_SRC_DIR,
        '-DCMAKE_BUILD_TYPE=RelWithDebInfo',
        '-DCMAKE_TOOLCHAIN_FILE=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'wavix_toolchain.cmake')),
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES',
        # Make HandleLLVMOptions.cmake (it can't check for c++11 support
        # because no C++ programs can be linked until libc++abi is
        # installed, so chicken and egg.
        '-DCXX_SUPPORTS_CXX11=ON',
        '-DCXX_SUPPORTS_CXX14=ON',
        '-DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY=OFF',
        # HandleLLVMOptions.cmake include CheckCompilerVersion.cmake.
        # This checks for working <atomic> header, which in turn errors
        # out on systems with threads disabled
        '-DLLVM_COMPILER_CHECKED=ON',
        '-DCMAKE_C_COMPILER_WORKS=YES',
        '-DCMAKE_CXX_COMPILER_WORKS=YES',
        '-DLIBCXX_CXX_ABI=libcxxabi',
        '-DLIBCXX_CXX_ABI_INCLUDE_PATHS=' +
        WindowsFSEscape(os.path.join(LIBCXXABI_SRC_DIR, 'include')),
        '-DLIBCXX_CXX_ABI_LIBRARY_PATH=' +
        WindowsFSEscape(os.path.join(SYSROOT_DIR, 'lib')),
        '-DLLVM_PATH=' + LLVM_SRC_DIR,
        '-DLIBCXX_ENABLE_STATIC=ON',
        '-DLIBCXX_ENABLE_SHARED=OFF',
        '-DLIBCXX_HAS_MUSL_LIBC=ON',
        '-DLIBCXX_ENABLE_THREADS=ON',
        '-DLIBCXX_INCLUDE_BENCHMARKS=OFF',
        '-DCMAKE_INSTALL_PREFIX=' + WindowsFSEscape(SYSROOT_DIR)
    ]

    proc.check_call(command, cwd=LIBCXX_OUT_DIR)
    proc.check_call([NINJA_BIN, 'install'], cwd=LIBCXX_OUT_DIR)
Ejemplo n.º 13
0
def HelloWorld():
    buildbot.Step('HelloWorld')

    # TODO(sbc): Remove this.
    # The compiler-rt doesn't currently rebuild libraries when a new -DCMAKE_AR
    # value is specified.
    if os.path.isdir(HELLOWORLD_OUT_DIR):
        Remove(HELLOWORLD_OUT_DIR)

    Mkdir(HELLOWORLD_OUT_DIR)
    command = [
        CMAKE_BIN, '-G', CMAKE_GENERATOR, HELLOWORLD_SRC_DIR,
        '-DCMAKE_BUILD_TYPE=RelWithDebInfo', '-DCMAKE_TOOLCHAIN_FILE=' +
        WindowsFSEscape(os.path.join(HOST_DIR, 'wavix_toolchain.cmake')),
        '-DCMAKE_EXPORT_COMPILE_COMMANDS=YES',
        '-DCMAKE_INSTALL_PREFIX=' + WindowsFSEscape(SYSROOT_DIR)
    ]

    proc.check_call(command, cwd=HELLOWORLD_OUT_DIR)
    proc.check_call([NINJA_BIN, 'install'], cwd=HELLOWORLD_OUT_DIR)
Ejemplo n.º 14
0
def CopyLibraryToSysroot(sysroot_dir, library):
    """All libraries are archived in the same tar file."""
    sysroot_lib = os.path.join(sysroot_dir, 'lib')
    print 'Copying library %s to archive %s' % (library, sysroot_lib)
    Mkdir(sysroot_lib)
    shutil.copy2(library, sysroot_lib)