Skip to content

[Build][Runtime] Add a new threading library. #42447

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 37 commits into from
Jun 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
dadcb04
[Build][Runtime] Replace SWIFT_STDLIB_SINGLE_THREADED_RUNTIME.
al45tair Mar 25, 2022
34af337
[Runtime] Remove all use of read/write locks.
al45tair Mar 29, 2022
63a0900
[Threading] Create new threading library and use it.
al45tair Apr 15, 2022
ddea8b1
[Unittests] Make the Threading unit tests work.
al45tair Apr 20, 2022
4280222
[Unittests] Add more threading library tests.
al45tair Apr 20, 2022
c37c146
[Threading] Fix case sensitivity bug.
al45tair Apr 20, 2022
1243d15
[Threading] Auto-detect threading in the preprocessor.
al45tair Apr 20, 2022
2398fe7
[Threading] A couple of header file fixes.
al45tair Apr 20, 2022
fc90280
[Threading] Fix the Linux build.
al45tair Apr 21, 2022
448f81f
[Build] Move initialization of SWIFT_HOST_VARIANT_SDK further up.
al45tair Apr 21, 2022
982aa29
[Build] Fix static linking.
al45tair Apr 22, 2022
90be2e3
[Build] Fix the name of the threading package setting.
al45tair Apr 22, 2022
f04b658
[Threading][Windows] Fix missing close brace.
al45tair Apr 22, 2022
6f4d9cc
[Threading][Windows] Fix another Windows niggle.
al45tair Apr 22, 2022
4527c08
[Threading][Windows] More header file fixes.
al45tair Apr 22, 2022
709d06f
[Threading][Windows] Undefine Yield and ERROR.
al45tair Apr 26, 2022
848b6b5
[Runtime][Windows] Need to link with Synchronization.lib.
al45tair Apr 26, 2022
b718432
[Threading][Windows] Don't include <windows.h>
al45tair Apr 27, 2022
79e2d0d
[Runtime][Windows] A couple of files need to include <windows.h>
al45tair Apr 27, 2022
c034d6c
[Concurrency][Threading] Remove use of platform thread functions.
al45tair Apr 27, 2022
d090bb0
[Threading][Windows] Try to avoid declaring _RTL_SRWLOCK
al45tair Apr 28, 2022
1fc36cf
[Concurrency][Windows] Add a couple of includes for Windows.
al45tair Apr 28, 2022
da42d72
[Concurrency][Windows] Remove unnecessary includes.
al45tair Apr 28, 2022
d5c022f
[Threading][Windows] Link the unit test against Synchronization.lib
al45tair Apr 28, 2022
dadd23e
[UnitTests][Windows] Link with Synchronization.lib
al45tair Apr 28, 2022
6e875da
[Threading] Remove thread_get_main().
al45tair Apr 28, 2022
b5bd267
[Threading] Put everything through git clang-format.
al45tair Apr 28, 2022
2884ddb
[Threading] Fix some problems with the C11 threading code.
al45tair Apr 29, 2022
69f0b03
[Threading] Don't use TLS keys as template arguments.
al45tair May 4, 2022
fc4f941
[Threading] Move stack bounds fetching into the threading library.
al45tair May 6, 2022
a987cb9
[Concurrency] Remove redundant include.
al45tair May 6, 2022
1c6618e
[Threading] A few include tweaks.
al45tair May 6, 2022
901ceae
[Threading] Add the ability to use any C++ callable in swift::once().
al45tair May 24, 2022
3a5f103
[Threading] Fix a few things following rebase.
al45tair May 24, 2022
43cc1f9
[Threading] Use llvm::Optional<> rather than making a zero lower boun…
al45tair May 24, 2022
68dfde2
[Build] Fix some issues with the standalone library build.
al45tair May 31, 2022
e1bc4f1
[Build][Concurrency] Fix Concurrency build to work for Linux.
al45tair Jun 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
197 changes: 104 additions & 93 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,95 @@ else()
any compiler host sources written in Swift")
endif()

# A convenience pattern to match Darwin platforms. Example:
# if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
# ...
# endif()
set(SWIFT_DARWIN_VARIANTS "^(macosx|iphoneos|iphonesimulator|appletvos|appletvsimulator|watchos|watchsimulator)")
set(SWIFT_DARWIN_EMBEDDED_VARIANTS "^(iphoneos|iphonesimulator|appletvos|appletvsimulator|watchos|watchsimulator)")

# A convenient list to match Darwin SDKs. Example:
# if("${SWIFT_HOST_VARIANT_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
# ...
# endif()
set(SWIFT_DARWIN_PLATFORMS "IOS" "IOS_SIMULATOR" "TVOS" "TVOS_SIMULATOR" "WATCHOS" "WATCHOS_SIMULATOR" "OSX")

set(SWIFT_APPLE_PLATFORMS ${SWIFT_DARWIN_PLATFORMS})
if(SWIFT_FREESTANDING_FLAVOR STREQUAL "apple")
list(APPEND SWIFT_APPLE_PLATFORMS "FREESTANDING")
if(SWIFT_FREESTANDING_IS_DARWIN)
list(APPEND SWIFT_DARWIN_PLATFORMS "FREESTANDING")
endif()
endif()

# If SWIFT_HOST_VARIANT_SDK not given, try to detect from the CMAKE_SYSTEM_NAME.
if(SWIFT_HOST_VARIANT_SDK)
set(SWIFT_HOST_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
else()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
set(SWIFT_HOST_VARIANT_SDK_default "LINUX")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
set(SWIFT_HOST_VARIANT_SDK_default "FREEBSD")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
set(SWIFT_HOST_VARIANT_SDK_default "OPENBSD")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
set(SWIFT_HOST_VARIANT_SDK_default "CYGWIN")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
set(SWIFT_HOST_VARIANT_SDK_default "WINDOWS")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku")
set(SWIFT_HOST_VARIANT_SDK_default "HAIKU")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android")
set(SWIFT_HOST_VARIANT_SDK_default "ANDROID")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
else()
message(FATAL_ERROR "Unable to detect SDK for host system: ${CMAKE_SYSTEM_NAME}")
endif()
endif()

# If SWIFT_HOST_VARIANT_ARCH not given, try to detect from the CMAKE_SYSTEM_PROCESSOR.
if(SWIFT_HOST_VARIANT_ARCH)
set(SWIFT_HOST_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
else()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
set(SWIFT_HOST_VARIANT_ARCH_default "x86_64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64")
if(SWIFT_HOST_VARIANT_SDK_default STREQUAL OSX)
set(SWIFT_HOST_VARIANT_ARCH_default "arm64")
else()
set(SWIFT_HOST_VARIANT_ARCH_default "aarch64")
endif()
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64le")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
set(SWIFT_HOST_VARIANT_ARCH_default "s390x")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv5|armv5te")
set(SWIFT_HOST_VARIANT_ARCH_default "armv5")
# FIXME: Only matches v6l/v7l - by far the most common variants
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
set(SWIFT_HOST_VARIANT_ARCH_default "armv6")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv7l|armv7-a")
set(SWIFT_HOST_VARIANT_ARCH_default "armv7")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
set(SWIFT_HOST_VARIANT_ARCH_default "itanium")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86|i686)")
set(SWIFT_HOST_VARIANT_ARCH_default "i686")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32")
set(SWIFT_HOST_VARIANT_ARCH_default "wasm32")
else()
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
endif()

set(SWIFT_HOST_VARIANT_SDK "${SWIFT_HOST_VARIANT_SDK_default}" CACHE STRING
"Deployment sdk for Swift host tools (the compiler).")
set(SWIFT_HOST_VARIANT_ARCH "${SWIFT_HOST_VARIANT_ARCH_default}" CACHE STRING
"Deployment arch for Swift host tools (the compiler).")

#
# User-configurable options that control the inclusion and default build
# behavior for components which may not strictly be necessary (tools, examples,
Expand Down Expand Up @@ -103,6 +192,16 @@ option(SWIFT_STDLIB_ENABLE_UNICODE_DATA
NOTE: Disabling this will cause many String methods to crash."
TRUE)

include(Threading)

threading_package_default("${SWIFT_HOST_VARIANT_SDK}"
SWIFT_THREADING_PACKAGE_default)

set(SWIFT_THREADING_PACKAGE "${SWIFT_THREADING_PACKAGE_default}"
CACHE STRING
"The threading package to use. Must be one of 'none', 'pthreads',
'darwin', 'linux', 'win32', 'c11'.")

option(SWIFT_BUILD_DYNAMIC_SDK_OVERLAY
"Build dynamic variants of the Swift SDK overlay"
TRUE)
Expand Down Expand Up @@ -671,27 +770,6 @@ include_directories(BEFORE
${SWIFT_INCLUDE_DIR}
)

# A convenience pattern to match Darwin platforms. Example:
# if(SWIFT_HOST_VARIANT MATCHES "${SWIFT_DARWIN_VARIANTS}")
# ...
# endif()
set(SWIFT_DARWIN_VARIANTS "^(macosx|iphoneos|iphonesimulator|appletvos|appletvsimulator|watchos|watchsimulator)")
set(SWIFT_DARWIN_EMBEDDED_VARIANTS "^(iphoneos|iphonesimulator|appletvos|appletvsimulator|watchos|watchsimulator)")

# A convenient list to match Darwin SDKs. Example:
# if("${SWIFT_HOST_VARIANT_SDK}" IN_LIST SWIFT_DARWIN_PLATFORMS)
# ...
# endif()
set(SWIFT_DARWIN_PLATFORMS "IOS" "IOS_SIMULATOR" "TVOS" "TVOS_SIMULATOR" "WATCHOS" "WATCHOS_SIMULATOR" "OSX")

set(SWIFT_APPLE_PLATFORMS ${SWIFT_DARWIN_PLATFORMS})
if(SWIFT_FREESTANDING_FLAVOR STREQUAL "apple")
list(APPEND SWIFT_APPLE_PLATFORMS "FREESTANDING")
if(SWIFT_FREESTANDING_IS_DARWIN)
list(APPEND SWIFT_DARWIN_PLATFORMS "FREESTANDING")
endif()
endif()

# Configuration flags passed to all of our invocations of gyb. Try to
# avoid making up new variable names here if you can find a CMake
# variable that will do the job.
Expand All @@ -708,74 +786,6 @@ if(XCODE)
swift_common_xcode_cxx_config()
endif()

# If SWIFT_HOST_VARIANT_SDK not given, try to detect from the CMAKE_SYSTEM_NAME.
if(SWIFT_HOST_VARIANT_SDK)
set(SWIFT_HOST_VARIANT_SDK_default "${SWIFT_HOST_VARIANT_SDK}")
else()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
set(SWIFT_HOST_VARIANT_SDK_default "LINUX")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
set(SWIFT_HOST_VARIANT_SDK_default "FREEBSD")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD")
set(SWIFT_HOST_VARIANT_SDK_default "OPENBSD")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "CYGWIN")
set(SWIFT_HOST_VARIANT_SDK_default "CYGWIN")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
set(SWIFT_HOST_VARIANT_SDK_default "WINDOWS")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Haiku")
set(SWIFT_HOST_VARIANT_SDK_default "HAIKU")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Android")
set(SWIFT_HOST_VARIANT_SDK_default "ANDROID")
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(SWIFT_HOST_VARIANT_SDK_default "OSX")
else()
message(FATAL_ERROR "Unable to detect SDK for host system: ${CMAKE_SYSTEM_NAME}")
endif()
endif()

# If SWIFT_HOST_VARIANT_ARCH not given, try to detect from the CMAKE_SYSTEM_PROCESSOR.
if(SWIFT_HOST_VARIANT_ARCH)
set(SWIFT_HOST_VARIANT_ARCH_default "${SWIFT_HOST_VARIANT_ARCH}")
else()
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
set(SWIFT_HOST_VARIANT_ARCH_default "x86_64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|ARM64|arm64")
if(SWIFT_HOST_VARIANT_SDK_default STREQUAL OSX)
set(SWIFT_HOST_VARIANT_ARCH_default "arm64")
else()
set(SWIFT_HOST_VARIANT_ARCH_default "aarch64")
endif()
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le")
set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64le")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x")
set(SWIFT_HOST_VARIANT_ARCH_default "s390x")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv5|armv5te")
set(SWIFT_HOST_VARIANT_ARCH_default "armv5")
# FIXME: Only matches v6l/v7l - by far the most common variants
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l")
set(SWIFT_HOST_VARIANT_ARCH_default "armv6")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv7l|armv7-a")
set(SWIFT_HOST_VARIANT_ARCH_default "armv7")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64")
set(SWIFT_HOST_VARIANT_ARCH_default "itanium")
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "(x86|i686)")
set(SWIFT_HOST_VARIANT_ARCH_default "i686")
elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32")
set(SWIFT_HOST_VARIANT_ARCH_default "wasm32")
else()
message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
endif()

set(SWIFT_HOST_VARIANT_SDK "${SWIFT_HOST_VARIANT_SDK_default}" CACHE STRING
"Deployment sdk for Swift host tools (the compiler).")
set(SWIFT_HOST_VARIANT_ARCH "${SWIFT_HOST_VARIANT_ARCH_default}" CACHE STRING
"Deployment arch for Swift host tools (the compiler).")

# Which default linker to use. Prefer LLVM_USE_LINKER if it set, otherwise use
# our own defaults. This should only be possible in a unified (not stand alone)
# build environment.
Expand Down Expand Up @@ -1037,11 +1047,12 @@ if(SWIFT_BUILD_STDLIB OR SWIFT_BUILD_SDK_OVERLAY)
message(STATUS " Leak Detection Checker Entrypoints: ${SWIFT_RUNTIME_ENABLE_LEAK_CHECKER}")
message(STATUS "")

message(STATUS "Threading Package: ${SWIFT_THREADING_PACKAGE}")
message(STATUS "Differentiable Programming Support: ${SWIFT_ENABLE_EXPERIMENTAL_DIFFERENTIABLE_PROGRAMMING}")
message(STATUS "Concurrency Support: ${SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY}")
message(STATUS "Distributed Support: ${SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED}")
message(STATUS "String Processing Support: ${SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING}")
message(STATUS "Unicode Support: ${SWIFT_STDLIB_ENABLE_UNICODE_DATA}")
message(STATUS "Concurrency Support: ${SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY}")
message(STATUS "Distributed Support: ${SWIFT_ENABLE_EXPERIMENTAL_DISTRIBUTED}")
message(STATUS "String Processing Support: ${SWIFT_ENABLE_EXPERIMENTAL_STRING_PROCESSING}")
message(STATUS "Unicode Support: ${SWIFT_STDLIB_ENABLE_UNICODE_DATA}")
message(STATUS "")
else()
message(STATUS "Not building Swift standard library, SDK overlays, and runtime")
Expand Down
2 changes: 1 addition & 1 deletion cmake/caches/Runtime-WASI-wasm32.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ set(SWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY YES CACHE BOOL "")
# build with the host compiler
set(SWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER YES CACHE BOOL "")

set(SWIFT_STDLIB_SINGLE_THREADED_RUNTIME TRUE CACHE BOOL "")
set(SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY TRUE CACHE BOOL "")
5 changes: 5 additions & 0 deletions cmake/modules/AddSwift.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ include(SwiftXcodeSupport)
include(SwiftWindowsSupport)
include(SwiftAndroidSupport)
include(SwiftCXXUtils)
include(Threading)

function(_swift_gyb_target_sources target scope)
file(GLOB GYB_UNICODE_DATA ${SWIFT_SOURCE_DIR}/utils/UnicodeData/*)
Expand Down Expand Up @@ -308,6 +309,10 @@ function(_add_host_variant_c_compile_flags target)
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:SWIFT_ENABLE_RUNTIME_FUNCTION_COUNTERS>)
endif()

threading_package_name("${SWIFT_HOST_VARIANT_SDK}" _threading_package)
target_compile_definitions(${target} PRIVATE
"SWIFT_THREADING_${_threading_package}")

if(SWIFT_ANALYZE_CODE_COVERAGE)
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:C,CXX,OBJC,OBJCXX>:-fprofile-instr-generate -fcoverage-mapping>)
Expand Down
11 changes: 8 additions & 3 deletions cmake/modules/AddSwiftUnittests.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

include(AddSwift)
include(Threading)

add_custom_target(SwiftUnitTests)

Expand Down Expand Up @@ -47,11 +48,15 @@ function(add_swift_unittest test_dirname)
endif()

# some headers switch their inline implementations based on
# SWIFT_STDLIB_SINGLE_THREADED_RUNTIME definition
if(SWIFT_STDLIB_SINGLE_THREADED_RUNTIME)
# SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY and
# SWIFT_THREADING_PACKAGE definitions
if(SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY)
target_compile_definitions("${test_dirname}" PRIVATE
SWIFT_STDLIB_SINGLE_THREADED_RUNTIME)
SWIFT_STDLIB_SINGLE_THREADED_CONCURRENCY)
endif()
threading_package_name("${SWIFT_HOST_VARIANT_SDK}" _threading_package)
target_compile_definitions("${test_dirname}" PRIVATE
"SWIFT_THREADING_${_threading_package}")

if(NOT SWIFT_COMPILER_IS_MSVC_LIKE)
if(SWIFT_USE_LINKER)
Expand Down
29 changes: 29 additions & 0 deletions cmake/modules/Threading.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Get the default threading package for the platform
function(threading_package_default sdk out_var)
if(sdk IN_LIST SWIFT_DARWIN_PLATFORMS)
set("${out_var}" "darwin" PARENT_SCOPE)
elseif(sdk STREQUAL "LINUX")
set("${out_var}" "linux" PARENT_SCOPE)
elseif(sdk STREQUAL "WINDOWS")
set("${out_var}" "win32" PARENT_SCOPE)
elseif(sdk STREQUAL "WASI")
set("${out_var}" "none" PARENT_SCOPE)
else()
set("${out_var}" "pthreads" PARENT_SCOPE)
endif()
endfunction()

# Given the threading package, find the name for the preprocessor
# define that we need to make. Also deals with the default platform
# setting.
function(threading_package_name sdk out_var)
precondition(SWIFT_HOST_VARIANT_SDK)
precondition(SWIFT_DARWIN_PLATFORMS)

string(TOUPPER "${SWIFT_THREADING_PACKAGE}" package)
if(package STREQUAL "")
threading_package_default(package)
string(TOUPPER "${package}" package)
endif()
set("${out_var}" "${package}" PARENT_SCOPE)
endfunction()
16 changes: 16 additions & 0 deletions include/swift/Basic/Compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,20 @@
#define SWIFT_ASM_LABEL_WITH_PREFIX(STRING) \
SWIFT_ASM_LABEL_RAW(SWIFT_SYMBOL_PREFIX_STRING STRING)

// SWIFT_FORMAT(fmt,first) marks a function as taking a format string argument
// at argument `fmt`, with the first argument for the format string as `first`.
#if __has_attribute(format)
#define SWIFT_FORMAT(fmt, first) __attribute__((format(printf, fmt, first)))
#else
#define SWIFT_FORMAT(fmt, first)
#endif

// SWIFT_VFORMAT(fmt) marks a function as taking a format string argument at
// argument `fmt`, with the arguments in a `va_list`.
#if __has_attribute(format)
#define SWIFT_VFORMAT(fmt) __attribute__((format(printf, fmt, 0)))
#else
#define SWIFT_VFORMAT(fmt)
#endif

#endif // SWIFT_BASIC_COMPILER_H
Loading