Skip to content

Commit

Permalink
Add support for UnsafeBufferPointer types
Browse files Browse the repository at this point in the history
This commit introduces support for the UnsafeBufferPointer types. It also adds a test case for the CryptoKit bindings.
  • Loading branch information
kotlarmilos committed Mar 20, 2024
1 parent f01d13e commit 9264f83
Show file tree
Hide file tree
Showing 18 changed files with 1,002 additions and 261 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ public void EmitModule(ModuleDecl moduleDecl)
var generatedNamespace = $"{moduleDecl.Name}Bindings";
writer.WriteLine($"using global::System;");
writer.WriteLine($"using global::System.Runtime.InteropServices;");
writer.WriteLine($"using global::System.Runtime.CompilerServices;");
writer.WriteLine($"using global::Swift.Runtime;");
writer.WriteLine();
writer.WriteLine($"namespace {generatedNamespace}");
writer.WriteLine($"{{");
Expand Down Expand Up @@ -74,6 +76,7 @@ public void EmitModule(ModuleDecl moduleDecl)
/// <param name="methodDecl">The method declaration.</param>
public void EmitPInvoke(IndentedTextWriter writer, ModuleDecl moduleDecl, MethodDecl methodDecl)
{
writer.WriteLine("[UnmanagedCallConv(CallConvs = new Type[] { typeof(CallConvSwift) })]");
writer.WriteLine($"[DllImport(\"lib{moduleDecl.Name}.dylib\", EntryPoint = \"{methodDecl.MangledName}\")]");
writer.Write($"internal static extern");
EmitReturnType(writer, methodDecl.Signature);
Expand Down
10 changes: 10 additions & 0 deletions src/Swift.Bindings/src/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using System.CommandLine;
using Swift.Runtime;
using System.IO;

namespace BindingsGeneration
{
Expand Down Expand Up @@ -93,6 +94,15 @@ public static void GenerateBindings(string swiftAbiPath, string outputDirectory,
ICSharpEmitter csharpEmitter = new StringCSharpEmitter(outputDirectory, typeDatabase, verbose);
csharpEmitter.EmitModule(decl);

// Copy the Swift.Runtime types to the output directory
string[] fileEntries = Directory.GetFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Library"));
foreach (string filePath in fileEntries)
{
string fileName = Path.GetFileName(filePath);
string destFilePath = Path.Combine(outputDirectory, fileName);
File.Copy(filePath, destFilePath, true);
}

if (verbose > 0)
Console.WriteLine("Bindings generation completed.");
}
Expand Down
15 changes: 12 additions & 3 deletions src/Swift.Bindings/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.24)
project(SwiftTests)

# Find all Swift source files in the directory
file(GLOB SOURCES "*.swift")
file(GLOB SOURCES "**/*.swift")

if (NOT SWIFT_COMPILER_TARGET)
set(SWIFT_PLATFORM "macosx")
Expand All @@ -18,13 +18,22 @@ if (NOT SWIFT_COMPILER_TARGET)
endif()

foreach(SOURCE_FILE ${SOURCES})
get_filename_component(SOURCE_DIR ${SOURCE_FILE} DIRECTORY)
get_filename_component(PARENT_DIR_NAME ${SOURCE_DIR} NAME)
get_filename_component(SOURCE_BASE_NAME ${SOURCE_FILE} NAME_WE)
set(OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${PARENT_DIR_NAME}")
message(STATUS "Generating ${OUTPUT_DIR} library")
file(MAKE_DIRECTORY ${OUTPUT_DIR})
add_custom_target(${SOURCE_BASE_NAME} ALL
COMMAND xcrun swiftc -target ${SWIFT_COMPILER_TARGET} -emit-module -emit-library -enable-library-evolution -emit-module-interface ${SOURCE_FILE} -o ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE_BASE_NAME}.dylib
COMMAND xcrun swiftc -target ${SWIFT_COMPILER_TARGET} -emit-module -emit-library -enable-library-evolution -emit-module-interface ${SOURCE_FILE} -o ${OUTPUT_DIR}/lib${SOURCE_BASE_NAME}.dylib
DEPENDS ${SOURCE_FILE}
COMMENT "Generating ${SOURCE_BASE_NAME} library"
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib${SOURCE_BASE_NAME}.dylib
install(FILES ${OUTPUT_DIR}/lib${SOURCE_BASE_NAME}.dylib
DESTINATION bin
)
add_custom_command(TARGET ${SOURCE_BASE_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT_DIR}/lib${SOURCE_BASE_NAME}.dylib ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Copying ${SOURCE_BASE_NAME} library to binary directory"
)
endforeach()
Loading

0 comments on commit 9264f83

Please sign in to comment.