Things like this: 884 $(SFS_GEN)/SolarisConstants.java: 885 $(prep-target) 886 $(CP) $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/SolarisConstants-$(PLATFORM)-$(ARCH).java $@
Should be written as: 884 $(SFS_GEN)/SolarisConstants.java: $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/fs/SolarisConstants-$(PLATFORM)-$(ARCH).java 885 $(prep-target) 886 $(CP) $< $@ -kto On Jun 16, 2011, at 10:03 PM, David Holmes wrote: > http://cr.openjdk.java.net/~dholmes/7039182/webrev/ > > This will be pushed through the TL jdk repo but Alan suggested getting > build-dev to review (in addition to himself). > > This isn't a public bug so I'll describe the issue. > > When the NIO libs are built there are a few files that contain constants that > represent platform specific I/O constants found in various C header files. > Normally the build process compiles and runs a small C program which will > generate the .java file for that platform. > > When I integrated the basic support for cross-compilation I modified this > process to use the host C compiler not the cross-compiler for the target, as > we couldn't execute the resulting C program. That wasn't the correct thing to > do because it means we generate values for the build platform not the target > platform. Luckily these values are mostly the same on the Linux platforms we > care about, but not all the same (hence this bug report where a read system > call returned EINVAL because we thought we were passing O_NOFOLLOW but in > fact passed O_DIRECT). > > The simplest fix is to not try to generate a file when cross-compiling but > allow the developer to specify where these files can be found. This is done > using the NIO_PLATFORM_CLASSES_ROOT_DIR variable which is expected to be the > "root" directory for where classes can be found and the directories under > that are expected to follow the package hierarchy for the files, so, for > example we will look for: > > $(NIO_PLATFORM_CLASSES_ROOT_DIR)/sun/nio/ch/SocketOptionRegistry-$(PLATFORM)-$(ARCH).java > > the platform and arch are used in the filename as we don't have platform/arch > directories in the JDK repo. > > In addition I reverted the original change to use the host C compiler as this > allows you to specifically build the generator program using the > cross-compiler (which will get the right values) then copy it across to the > target system and run it to generate the file. > > For SE-Embedded we need to set NIO_PLATFORM_CLASSES_ROOT_DIR to point into > the "closed" platform sources. > > Thanks, > David Holmes