1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2020-2023 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
extension BuildParameters {
/// An optional intermodule optimization to run at link time.
///
/// When using Link Time Optimization (LTO for short) the swift and clang
/// compilers produce objects containing containing a higher level
/// representation of the program bitcode instead of machine code. The
/// linker combines these objects together performing additional
/// optimizations with visibility into each module/object, resulting in a
/// further optimized version of the executable.
///
/// Using LTO can have significant impact on compile times, however can be
/// used to dramatically reduce code-size in some cases.
///
/// Note: Bitcode objects and machine code objects can be linked together.
public enum LinkTimeOptimizationMode: String, Encodable {
/// The "standard" LTO mode designed to produce minimal code sign.
///
/// Full LTO can lead to large link times. Consider using thin LTO if
/// build time is more important than minimizing binary size.
case full
/// An LTO mode designed to scale better with input size.
///
/// Thin LTO typically results in faster link times than traditional LTO.
/// However, thin LTO may not result in binary as small as full LTO.
case thin
}
/// Build parameters related to linking grouped in a single type to aggregate those in one place.
public struct Linking: Encodable {
/// Whether to disable dead code stripping by the linker
public var linkerDeadStrip: Bool
public var linkTimeOptimizationMode: LinkTimeOptimizationMode?
/// Disables adding $ORIGIN/@loader_path to the rpath, useful when deploying
public var shouldDisableLocalRpath: Bool
/// If should link the Swift stdlib statically.
public var shouldLinkStaticSwiftStdlib: Bool
public init(
linkerDeadStrip: Bool = true,
linkTimeOptimizationMode: LinkTimeOptimizationMode? = nil,
shouldDisableLocalRpath: Bool = false,
shouldLinkStaticSwiftStdlib: Bool = false
) {
self.linkerDeadStrip = linkerDeadStrip
self.linkTimeOptimizationMode = linkTimeOptimizationMode
self.shouldDisableLocalRpath = shouldDisableLocalRpath
self.shouldLinkStaticSwiftStdlib = shouldLinkStaticSwiftStdlib
}
}
}
|