> Update the make/autoconf/lib-ffi.m4 script to support using libffi on Windows 
> and Mac.
> 
> For Windows I had to tweak `fallbackLinker.c` to be able to build: there was 
> an import of `stdint.h` missing, and since it was using `WSAGetLastError` it 
> needed to link against `ws2_32.lib`.
> 
> This PR also contains a fix originally made by @shipilev as part  of: 
> https://github.com/openjdk/jdk/pull/13827 (with a minor tweak), in order to 
> be able to build the fallback linker on mac correctly. I also disabled 3 
> failing tests in the jdk_foreign suite on that platform.
> 
> ---
> 
> I've updated the `createLibffiBundle.sh` script for Mac, since I got it to 
> work with a devkit, but I didn't manage to do the same for Windows. The steps 
> I took to make my Windows libffi bundle were as follows:
> 1. run 'x64 Native Tools Command Prompt for VS 2022'. cl.exe and link.exe 
> should be on path
> 2. run `ucrt64` (this is one of the shell environments that comes with 
> MSYS2). This should carry over the environment set up by the VS dev prompt.
> 3. then, in the libffi repo root folder:
>   3.a run `autogen.sh`
>   3.b run:
> 
> bash configure \
>   CC="/path/to/libffi/msvcc.sh -m64" \
>   CXX="/path/to/libffi/msvcc.sh -m64" \
>   CPPFLAGS="-DFFI_BUILDING_DLL" \
>   --disable-docs \
>   --prefix=<install dest>
> 
> (`<install dest>` can be whatever you like. That's what you point 
> `--with-libffi` to).
> 
> 4. run `make install`. This should create the `<intstall dest>` directory 
> with the files: `include/ffi.h`, `include/ffitarget.h`, `lib/libffi.dll`. It 
> also creates a `lib/libffi.lib` file, but it is of the wrong file type, `DLL` 
> rather than `LIBRARY`.
> 5. Manually create a working `.lib` file:
>   5.a use `dumpbin /exports libffi.dll` to get a list of exported symbols
>   5.b put them in a `libffi.def` file: `EXPORTS` on the first line, then a 
> symbol on each line following
>   5.c run `lib /def:libffi.def /machine:x64 /out:libffi.lib` to create the 
> right `.lib` file (`lib` is a visual studio tool)
> 
> ---
> 
> Testing:
> - manual testing on Windows/x64 and Mac/AArch64, by running the `jdk_foreign` 
> test suite with `-Djdk.internal.foreign.CABI=FALLBACK` (i.e. using the 
> fallback linker).
> - Linux/x64 Zero test run of the `jdk_foreign` suite
> - Linux/AArch64 Zero build

Jorn Vernee has updated the pull request incrementally with two additional 
commits since the last revision:

 - missing changes
 - Address review comments:
   - Tab to spaces in java.base/Lib.gmk
   - Add comment with Windows build instructions to createLibffiBundle.sh

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/14446/files
  - new: https://git.openjdk.org/jdk/pull/14446/files/17d4d914..0e454db9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=14446&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14446&range=00-01

  Stats: 33 lines in 2 files changed: 32 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/14446.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14446/head:pull/14446

PR: https://git.openjdk.org/jdk/pull/14446

Reply via email to