AK+Meta: Add SwiftAK module to add helpers to construct swift Strings

This allows constructing Foundation.Data and Swift.String without
unnecessary copies from AK.StringView and AK.String respectively.
This commit is contained in:
Andrew Kaster 2024-08-23 12:22:26 -06:00 committed by Andrew Kaster
parent 349b17cc7a
commit c1c7e5ff3e
Notes: github-actions[bot] 2024-08-25 01:15:22 +00:00
4 changed files with 35 additions and 0 deletions

25
AK/AK+Swift.swift Normal file
View file

@ -0,0 +1,25 @@
/*
* Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
import AK
import Foundation
public extension Foundation.Data {
init(_ string: AK.StringView) {
let bytes = string.bytes()
self.init(bytesNoCopy: UnsafeMutableRawPointer(mutating: bytes.data()), count: bytes.size(), deallocator: .none)
}
}
public extension Swift.String {
init?(_ string: AK.String) {
self.init(data: Foundation.Data(string.__bytes_as_string_viewUnsafe()), encoding: .utf8)
}
init?(_ string: AK.StringView) {
self.init(data: Foundation.Data(string), encoding: .utf8)
}
}

View file

@ -68,4 +68,8 @@ if (ENABLE_SWIFT)
"${CMAKE_CURRENT_BINARY_DIR}/Backtrace.h"
"${CMAKE_CURRENT_BINARY_DIR}/Debug.h"
)
target_compile_features(AK PUBLIC cxx_std_23)
set_target_properties(AK PROPERTIES Swift_MODULE_NAME SwiftAK)
target_sources(AK PRIVATE AK+Swift.swift)
endif()

View file

@ -36,10 +36,12 @@ function(_swift_generate_cxx_header target header)
if(APPLE)
set(SDK_FLAGS "-sdk" "${CMAKE_OSX_SYSROOT}")
list(APPEND SDK_FLAGS "-target" "${CMAKE_Swift_COMPILER_TARGET}")
elseif(WIN32)
set(SDK_FLAGS "-sdk" "$ENV{SDKROOT}")
elseif(DEFINED ${CMAKE_SYSROOT})
set(SDK_FLAGS "-sdk" "${CMAKE_SYSROOT}")
list(APPEND SDK_FLAGS "-target" "${CMAKE_Swift_COMPILER_TARGET}")
endif()
cmake_path(APPEND CMAKE_CURRENT_BINARY_DIR include

View file

@ -15,6 +15,10 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAK
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBDIR}")
# FIXME: Stop setting this when we have a good way to retrieve the directory that has the swift module
# file for use by the swift frontend's header generator
set(CMAKE_Swift_MODULE_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}swift")
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
# See slide 100 of the following ppt :^)