mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This replaces a number of `#include`-s like this:
```
#include "../../../stdlib/public/SwiftShims/Visibility.h"
```
with this:
```
#include "swift/shims/Visibility.h"
```
This is needed to allow SwiftCompilerSources to use C++ headers which include SwiftShims headers. Currently trying to do that results in errors:
```
swift/swift/include/swift/Demangling/../../../stdlib/public/SwiftShims/module.modulemap:1:8: error: redefinition of module 'SwiftShims'
module SwiftShims {
^
Builds.noindex/swift/swift/bootstrapping0/lib/swift/shims/module.modulemap:1:8: note: previously defined here
module SwiftShims {
^
```
This happens because the headers in both the source dir and the build dir refer to SwiftShims headers by relative path, and both the source root and the build root contain SwiftShims headers (which are equivalent, but since they are located in different dirs, Clang treats them as different modules).
54 lines
2.2 KiB
C++
54 lines
2.2 KiB
C++
//===--- SwiftStddef.h ------------------------------------------*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_STDLIB_SHIMS_SWIFT_STDDEF_H
|
|
#define SWIFT_STDLIB_SHIMS_SWIFT_STDDEF_H
|
|
|
|
// stddef.h is provided by Clang, but it dispatches to libc's stddef.h. As a
|
|
// result, using stddef.h here would pull in Darwin module (which includes
|
|
// libc). This creates a dependency cycle, so we can't use stddef.h in
|
|
// SwiftShims.
|
|
//
|
|
// On Linux, the story is different. We get the error message
|
|
// "/usr/include/x86_64-linux-gnu/sys/types.h:146:10: error: 'stddef.h' file not
|
|
// found"
|
|
// This is a known Clang/Ubuntu bug.
|
|
//
|
|
// On Windows, the complicated setup between clang and MSVC causes a circular
|
|
// dependency between `ucrt` and `SwiftShims`, preventing a successful build of
|
|
// the module.
|
|
//
|
|
// Opt to use the compiler vended type whenever possible.
|
|
#if defined(__clang__)
|
|
typedef __SIZE_TYPE__ __swift_size_t;
|
|
#else
|
|
#include <stddef.h>
|
|
typedef size_t __swift_size_t;
|
|
#endif
|
|
|
|
// This selects the signed equivalent of the unsigned type chosen for size_t.
|
|
#if __STDC_VERSION__-0 >= 201112l || defined(__swift__)
|
|
typedef __typeof__(_Generic((__swift_size_t)0, \
|
|
unsigned long long int : (long long int)0, \
|
|
unsigned long int : (long int)0, \
|
|
unsigned int : (int)0, \
|
|
unsigned short : (short)0, \
|
|
unsigned char : (signed char)0)) __swift_ssize_t;
|
|
#elif defined(__cplusplus)
|
|
#include <type_traits>
|
|
using __swift_ssize_t = std::make_signed<__swift_size_t>::type;
|
|
#else
|
|
#error "do not have __swift_ssize_t defined"
|
|
#endif
|
|
|
|
#endif // SWIFT_STDLIB_SHIMS_SWIFT_STDDEF_H
|