mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-29 08:11:13 +00:00
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:
parent
349b17cc7a
commit
c1c7e5ff3e
Notes:
github-actions[bot]
2024-08-25 01:15:22 +00:00
Author: https://github.com/ADKaster Commit: https://github.com/LadybirdBrowser/ladybird/commit/c1c7e5ff3e4 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1175 Reviewed-by: https://github.com/AtkinsSJ
25
AK/AK+Swift.swift
Normal file
25
AK/AK+Swift.swift
Normal 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)
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 :^)
|
||||
|
|
Loading…
Reference in a new issue