mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This isn't a "complete" port of the standard library for embedded Swift, but something that should serve as a starting point for further iterations on the stdlib. - General CMake logic for building a library as ".swiftmodule only" (ONLY_SWIFTMODULE). - CMake logic in stdlib/public/core/CMakeLists.txt to start building the embedded stdlib for a handful of hardcoded target triples. - Lots of annotations throughout the standard library to make types, functions, protocols unavailable in embedded Swift (@_unavailableInEmbedded). - Mainly this is about stdlib functionality that relies on existentials, type erasure, metatypes, reflection, string interpolations. - We rely on function body removal of unavailable functions to eliminate the actual problematic SIL code (existentials). - Many .swift files are not included in the compilation of embedded stdlib at all, to simplify the scope of the annotations. - EmbeddedStubs.swift is used to stub out (as unavailable and fatalError'd) the missing functionality.
34 lines
1.4 KiB
Swift
34 lines
1.4 KiB
Swift
// RUN: %target-swift-frontend -target armv7-apple-none-macho -Xcc -D__MACH__ -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
|
|
// RUN: %target-swift-frontend -target arm64-apple-none-macho -Xcc -D__MACH__ -Xcc -D__arm64__ -Xcc -D__APPLE__ -emit-ir %s -enable-experimental-feature Embedded | %FileCheck %s
|
|
|
|
public func bool() -> Bool {
|
|
return true
|
|
}
|
|
|
|
public func int() -> Int {
|
|
return 42
|
|
}
|
|
|
|
public func ptr(p: UnsafeRawPointer, n: Int) -> UnsafeRawPointer {
|
|
return p.advanced(by: n)
|
|
}
|
|
|
|
public func optional() -> Int? {
|
|
return nil
|
|
}
|
|
|
|
public func staticstring() -> StaticString {
|
|
return "hello"
|
|
}
|
|
|
|
// CHECK: define {{.*}}i32 @main(i32 %0, ptr %1)
|
|
// CHECK: define {{.*}}i1 @"$s4main4boolSbyF"()
|
|
// CHECK: define {{.*}}i1 @"$sSb22_builtinBooleanLiteralSbBi1__tcfC"(i1 %0)
|
|
// CHECK: define {{.*}}{{i32|i64}} @"$s4main3intSiyF"()
|
|
// CHECK: define {{.*}}{{i32|i64}} @"$sSi22_builtinIntegerLiteralSiBI_tcfC"(ptr %0, {{i32|i64}} %1)
|
|
// CHECK: define {{.*}}ptr @"$s4main3ptr1p1nS2V_SitF"(ptr %0, {{i32|i64}} %1)
|
|
// CHECK: define {{.*}}ptr @"$sSV8advanced2bySVSi_tF"({{i32|i64}} %0, ptr %1)
|
|
// CHECK: define {{.*}}{ {{i32|i64}}, i8 } @"$s4main8optionalSiSgyF"()
|
|
// CHECK: define {{.*}}{ {{i32|i64}}, {{i32|i64}}, i8 } @"$s4main12staticstrings12StaticStringVyF"()
|
|
// CHECK: define {{.*}}{ {{i32|i64}}, {{i32|i64}}, i8 } @"$ss12StaticStringV08_builtinB7Literal17utf8CodeUnitCount7isASCIIABBp_BwBi1_tcfC"(ptr %0, {{i32|i64}} %1, i1 %2)
|