[swift-dev] swift (ABI) and Windows

Sangjin Han tinysun.net at gmail.com
Sat May 7 18:01:44 CDT 2016


Hi all,

I merged Saleem's #2080 to my working branch, and did some experiment.

I could compile easily Hello.swift with #2080 merged one.

  swiftc -c -o Hello.obj Hello.swift
  clang -o Hello.exe Hello.obj -llibswiftCore -llibswiftSwiftOnoneSupport
-Wl,<some link options>

Without #2080, I should use the *.ll-modifying-trick. It is perfect in this
example.

But, we need the way to disable dllimport. The immediate mode did not work.

  swift Hello.swift
  LLVM ERROR: Program used external function
'__imp_globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func3' which could
not be resolved!

  swift -O Hello.swift
  LLVM ERROR: Program used external function
'__imp__swift_getExistentialTypeMetadata' which could not be resolved!

It seems swift.exe call directly the function in the DLL without import
library.

The feature also needed when we link to static library.

I don't know about the SIL, IR, so it is thankful someone tell me how to
approach this problem.


2016-05-07 5:01 GMT+09:00 Saleem Abdulrasool <compnerd at compnerd.org>:

> On Thu, May 5, 2016 at 5:26 PM, Joe Groff via swift-dev <
> swift-dev at swift.org> wrote:
>
>>
>> > On May 5, 2016, at 4:18 PM, Sangjin Han via swift-dev <
>> swift-dev at swift.org> wrote:
>> >
>> > Hi,
>> >
>> > I made an experimental MSVC port. Of cause, dllimport/dllexport and the
>> driver for linking and many other part is not implemented. But dynamic
>> linking was possible with some trick.
>> >
>> > I think it is useful for designing, my observation about the
>> experimental building of libswiftCore.dll, libswiftSwiftOnoneSupport.dll
>> and linking of Hello.exe - its source has only 'print("Hello")'.
>> >
>> > 1) SWIFT_RUNTIME_EXPORT was not enough for dllexport.
>> >   Hello.obj needed defined in libswift*.dll
>> >     _swift_getExistentialTypeMetadata,
>> >     _TFs5printFTGSaP__9separatorSS10terminatorSS_T_,
>> >     _TMSS,
>> >     _TZvOs7Process5_argcVs5Int32,
>> >     swift_bufferAllocate, ....
>> >   Some of above are dllexported by the macro, but _T* are not. Maybe,
>> it generated by swiftc.exe.
>> >   I used the utility 'dlltool.exe' from Cygwin/MinGW world. It extracts
>> all symbols and generates 'allsymbol.def'.
>> >   With that .def, I could build the all-symbol-dllexported
>> libswiftCore.dll.
>> >   (I'm hoping we can build it without this trick.)
>>
>> The _T symbols are emitted by the Swift compiler. You should modify
>> swiftc's IRGen to generate public symbols with LLVM's "dllexport" storage
>> class when targeting Windows.
>
>
> https://github.com/apple/swift/pull/2080 is a first cut attempt to do
> this.
>
>
>>
>> -Joe
>> _______________________________________________
>> swift-dev mailing list
>> swift-dev at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-dev
>>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-dev/attachments/20160508/57b663a5/attachment.html>


More information about the swift-dev mailing list