RFR: Module constraints on targets
Paul Sandoz
paul.sandoz at oracle.com
Tue Oct 16 01:24:07 PDT 2012
Hi Chris,
Looks good.
Paul.
On Oct 11, 2012, at 6:37 PM, Chris Hegarty <chris.hegarty at oracle.com> wrote:
>
> This is a proposal to fulfill the 'module constraints on targets' requirement [1]. Essentially, support setting OS and Arch values on module-files and libraries. It meets the common use-cases, like installing platform specific modules into the wrong module library, when cross compiling, etc..
>
> 1) Extend the Jigsaw module-file format [2] (jmod) to accommodate Operating System and Architecture values in the module header.
>
> ModuleFileHeader {
> u4 magic; // FileConstants.MAGIC
> u2 type; // FileConstants.Type.MODULE_FILE
> u2 major; // FileConstants.ModuleFile.MAJOR_VERSION
> u2 minor; // FileConstants.ModuleFile.MINOR_VERSION
> u8 csize; // Size of entire file, compressed
> u8 usize; // Space required for uncompressed contents
> // (upper bound; need not be exact)
> u2 sections; // Number of following sections
> u2 hashType; // One of FileConstants.ModuleFile.HashType
> // (applies to all hashes in this file)
> u2 hashLength; // Length of following hash
> b* hash; // Hash of entire file (except this hash)
> u2 osLength; // Length of following Operating System, in bytes <<< ADDED
> b* os; // Operating System, in Java-modified UTF-8 <<< ADDED
> u2 archLength; // Length of following Architecture, in bytes <<< ADDED
> b* arch; // Architecture, in Java-modified UTF-8 <<< ADDED
> }
>
> The os and arch values are Java-modified UTF-8 strings, representing the Operating System and Architecture where the module-file/library is intended to be deployed.
>
> A value of 0 is a valid value for both osLength and archLength. This effectively means that these values are unset, and the module-file/library is agnostic of Operating System and Architecture. It should be considered a candidate for any module library.
>
> 2) Update CLIs
>
> Both jmod and jpkg need to be updated to support passing of os and arch values during creation.
>
> Define two new arguments -os, -arch for both jmod and jpkg. These arguments are optional. If specified, can only be specified once. For example:
>
> ./bin/jmod create -L m.lib -os linux -arch x64
>
> ./bin/jmod id -L m.lib
> path /export/chris/repos/jigsaw/constraints/test/m.lib
> version 0.1
> os: linux
> arch: x64
>
> ./bin/jmod install -L m.lib jigsaw-pkgs/jmod/jdk.logging at 8-ea.jmod
> java.io.IOException: Module architecture [linux-i586] does not match library [linux-x64]
> org.openjdk.jigsaw.cli.Command$Exception: java.io.IOException: Module architecture [linux-i586] does not match library [linux-x64]
> at org.openjdk.jigsaw.cli.Librarian$Install.go(Librarian.java:230)
> at org.openjdk.jigsaw.cli.Librarian$Install.go(Librarian.java:189)
> at org.openjdk.jigsaw.cli.Command.run(Command.java:100)
> .....
>
>
> 3) Update the build to produce images and module-files that are
> $PLATFORM and $ARCH specific ( matching the bundles ).
>
> Webrev:
> http://cr.openjdk.java.net/~chegar/jigsaw/constraints.00/webrev/
>
>
> -Chris.
>
> [1] http://openjdk.java.net/projects/jigsaw/doc/draft-java-module-system-requirements-12#module-constraints-on-targets
> [2] http://cr.openjdk.java.net/~mr/jigsaw/notes/module-file-format/
More information about the jigsaw-dev
mailing list