On 1 maj 2014, at 07:45, David Holmes <david.hol...@oracle.com> wrote:

> On 30/04/2014 9:39 PM, Staffan Larsen wrote:
>> 
>> 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.
> 
> The question is whether it is worth it relative to the size of the problem.

I think we will see a large influx of these kinds of tests, especially in the 
hotspot repo.

> 
>>> 
>>> 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?
> 
> You _may_ be able to, you may not. I know we already had issues where the 
> CFLAGS as being used for the JDK sources also got applied to building the 
> code-generator utility programs and that didn't work correctly. Here's sample 
> CFLAGS from a JDK build
> 
> CFLAGS_JDKLIB:=  -W -Wall -Wno-unused -Wno-parentheses       -pipe  
> -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -fno-omit-frame-pointer  
> -D_LITTLE_ENDIAN -DLINUX -DNDEBUG -DARCH='"i586"' -Di586 
> -DRELEASE='"$(RELEASE)"' 
> -I/export/users/dh198349/ejdk8u-dev/build/b13/linux-i586-ea/jdk/include 
> -I/export/users/dh198349/ejdk8u-dev/build/b13/linux-i586-ea/jdk/include/linux 
>       -I/export/users/dh198349/jdk8u-dev/jdk/src/share/javavm/export     
> -I/export/users/dh198349/jdk8u-dev/jdk/src/solaris/javavm/export     
> -I/export/users/dh198349/jdk8u-dev/jdk/src/share/native/common   
> -I/export/users/dh198349/jdk8u-dev/jdk/src/solaris/native/common -m32  
> -fno-strict-aliasing -fPIC
> 
> Does that make sense for compiling a test? Does it depend on whether we are 
> building a native library or a native executable?

I think they make sense, at least initially. If not, we can tune them, but that 
"tuning” will be in one central location and not spread out in a lot of shell 
scripts. I also plan to allow individual tests to override the flags if 
necessary (for example to link with X11). 

For executables there is CFLAGS_JDKEXE. 

Thanks,
/Staffan

> 
>>> 
>>> 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.
> 
> :) It wasn't SQE, it was your project as referenced in a few bug reports last 
> August/September.
> 
> David
> 
> 
>> /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