On 30 apr 2014, at 11:39, David Holmes <david.hol...@oracle.com> wrote:

> Hi Staffan,
> 
> On 25/04/2014 10:02 PM, Staffan Larsen wrote:
>> There are a couple of jtreg tests today that depend on native components 
>> (either JNI libraries or executables). These are handled in one of two ways:
>> 
>> 1) The binaries are pre-compiled and checked into the repository (often 
>> inside jar files).
>> 2) The test will try to invoke a compiler (gcc, cl, …) when the test is 
>> being run.
>> 
>> Neither of these are very good solutions. #1 makes it hard to run the setup 
>> the test for all platforms and requires binaries in the source control 
>> system. #2 is hit-and-miss: the correct compiler may or may not be installed 
>> on the test machine, and the approach requires platform specific logic to be 
>> maintained.
> 
> #2 is far from perfect but ...
> 
>> I would like to propose that these native components are instead compiled 
>> when the product is built by the same makefile logic as the product. At 
>> product build time we know we have access to the (correct) compilers and we 
>> have excellent support in the makefiles for building on all platforms.
>> 
>> If we build the native test components together with the product, we also 
>> have to take care of distributing the result together with the product when 
>> we do testing across a larger number of machines. We will also need a way to 
>> tell the jtreg tests where these pre-built binaries are located.
> 
> don't under estimate the complexity involved in building then "distributing" 
> the test binaries.

I don’t. It will be complicated, but I’m sure we can do it.

> 
> You will still need to maintain platform specific logic as you won't 
> necessarily be able to use the CFLAGS etc that the main build process uses.

Can you explain more? Why can’t I use CFLAGS as it is?

> 
> Also talk to SQE as I'm pretty sure there is an existing project to look at 
> how to better handle this, at least for the internal test suites.

I have talked to SQE. I don’t know of any other projects to handle this.

/Staffan


> 
> David
> -----
> 
>> I suggest that at the end of a distributed build run, the pre-built test 
>> binaries are packaged in a zip or tar file (just like the product bits) and 
>> stored next to the product bundles. When we run distributed tests, we need 
>> to pick up the product bundle and the test bundle before the testing is 
>> started.
>> 
>> To tell the tests where the native code is, I would like to add a flag to 
>> jtreg to point out the path to the binaries. This should cause jtreg to set 
>> java.library.path before invoking a test and also set a test.* property 
>> which can be used by test to find it’s native components.
>> 
>> This kind of setup would make it easier to add and maintain tests that have 
>> a native component. I think this will be especially important as more tests 
>> are written using jtreg in the hotspot repository.
>> 
>> Thoughts on this? Is the general approach ok? There are lots of details to 
>> be figured out, but at this stage I would like to hear feedback on the idea 
>> as such.
>> 
>> Thanks,
>> /Staffan
>> 

Reply via email to