[foreign] Running tests on Windows
Jorn Vernee
jbvernee at xs4all.nl
Wed Sep 19 12:00:38 UTC 2018
Hello guys,
I'm making good progress with getting things to work on windows and now
have mixed arguments and float varargs working.
I'm currently running the jdk_foreign tests (of which 31 are being run)
to see which ones are failing. I'm getting currently 14 out of 31.
One of the problems I'm running into is that the tests depend on POSIX
functions, which are not in the C standard library on windows. The main
culprit being getpid (although it is in the C++ standard library under
the mangled name _getpid, but name mangling in C++ is non-portable
either). I'm wondering how you'd like to handle these? I don't know if
there is a way to make platform specific tests?
There is also a use of alloca, for which there is a replacement in C99,
but I don't know which C and C++ standards the jdk is on? (iirc C++ was
before std11, which is pretty old). I wanted to change alloca to using a
variable sized array, but the compiler is rejecting that. (currently
using _alloca to test with)
I was seeing the warning 'Not building java.foreign tests' coming from
make/test/native/JtregNativeJdk.gmk, so I've added a filter and flags
for windows as well. But, it doesn't look like these filter were doing
anything in the first place, since `make test` was already outputting a
bunch of dlls, just through some other path it seems. I'm seeing a lot
of warnings like
JtregNativeJdk.gmk:96: warning: ignoring old recipe for target
'/cygdrive/j/cygwin64/home/Jorn/cygwin-projects/panama/build/windows-x86_64-normal-server-release/support/test/jdk/jtreg/native/lib/Hello.dll'
So I don't know if that filter is still relevant? What is it actually
(supposed to be) doing?
Another thing with the native test files is that dlls require you to
explicitly export symbols. There are 4 different ways to do this, either
through a command line option, a side file, using a decorator
`__declspec(dllexport)`, or using a #pragma comment. I wonder if there
is an established way of doing that for tests that you know of?
And then of course one of the biggest things is getting jextract to
build and run. Currently the build system is not picking up libclang.
When explicitly specifying it with --with-libclang='/cygdrive/j/LLVM' I
still get the "Cannot locate libclang!" warning. I wanted to ask what
value and files it's actually looking for? (I've also tried some of the
additional flags from makeautoconf/lib-clang.m4, but to no avail).
Thanks,
Jorn
More information about the panama-dev
mailing list