blob: 94655d2a88a197cc5cf14838e3545cd79f045fc1 [file] [log] [blame]
# swift_build_support/workspace.py ------------------------------*- python -*-
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
#
# ----------------------------------------------------------------------------
"""
Represent whole source tree and the build directory
"""
# ----------------------------------------------------------------------------
import os.path
class Workspace(object):
def __init__(self, source_root, build_root):
self.source_root = source_root
self.build_root = build_root
def source_dir(self, path):
return os.path.join(self.source_root, path)
def build_dir(self, deployment_target, product):
return os.path.join(self.build_root,
'%s-%s' % (product, deployment_target))
def compute_build_subdir(args):
# Create a name for the build directory.
build_subdir = args.cmake_generator.replace(" ", "_")
cmark_build_dir_label = args.cmark_build_variant
if args.cmark_assertions:
cmark_build_dir_label += "Assert"
llvm_build_dir_label = args.llvm_build_variant
if args.llvm_assertions:
llvm_build_dir_label += "Assert"
swift_build_dir_label = args.swift_build_variant
if args.swift_assertions:
swift_build_dir_label += "Assert"
if args.swift_analyze_code_coverage != "false":
swift_build_dir_label += "Coverage"
swift_stdlib_build_dir_label = args.swift_stdlib_build_variant
if args.swift_stdlib_assertions:
swift_stdlib_build_dir_label += "Assert"
# FIXME: mangle LLDB build configuration into the directory name.
if (llvm_build_dir_label == swift_build_dir_label and
llvm_build_dir_label == swift_stdlib_build_dir_label and
swift_build_dir_label == cmark_build_dir_label):
# Use a simple directory name if all projects use the same build
# type.
build_subdir += "-" + llvm_build_dir_label
elif (llvm_build_dir_label != swift_build_dir_label and
llvm_build_dir_label == swift_stdlib_build_dir_label and
swift_build_dir_label == cmark_build_dir_label):
# Swift build type differs.
build_subdir += "-" + llvm_build_dir_label
build_subdir += "+swift-" + swift_build_dir_label
elif (llvm_build_dir_label == swift_build_dir_label and
llvm_build_dir_label != swift_stdlib_build_dir_label and
swift_build_dir_label == cmark_build_dir_label):
# Swift stdlib build type differs.
build_subdir += "-" + llvm_build_dir_label
build_subdir += "+stdlib-" + swift_stdlib_build_dir_label
elif (llvm_build_dir_label == swift_build_dir_label and
llvm_build_dir_label == swift_stdlib_build_dir_label and
swift_build_dir_label != cmark_build_dir_label):
# cmark build type differs.
build_subdir += "-" + llvm_build_dir_label
build_subdir += "+cmark-" + cmark_build_dir_label
else:
# We don't know how to create a short name, so just mangle in all
# the information.
build_subdir += "+cmark-" + cmark_build_dir_label
build_subdir += "+llvm-" + llvm_build_dir_label
build_subdir += "+swift-" + swift_build_dir_label
build_subdir += "+stdlib-" + swift_stdlib_build_dir_label
# If we have a sanitizer enabled, mangle it into the subdir.
if args.enable_asan:
build_subdir += "+asan"
if args.enable_ubsan:
build_subdir += "+ubsan"
if args.enable_tsan:
build_subdir += "+tsan"
return build_subdir