Firtool Resolver is a Scala library and command-line application for downloading LLVM Firtool as a Maven artifact. LLVM Firtool Native is a project to distribute LLVM Firtool as Maven artifacts.
This specification follows Semantic Versioning 2.0.0.
Specification version: 1.0.0
Platforms
are defined to be a tuple of aoperating system
and anarchitecture
written as<os>-<arch>
which can also be written as<platform>
.- The defined operating systems are
linux
,windows
, andmacos
. - The defined architectures are
x64
andaarch64
. - A Project SHALL have a
groupId
,artifactId
, andversion
. - A Project MAY support any number of
Platforms
. - Artifacts SHALL be published as a Maven Artifact
- The Maven Artifact
groupId
SHALL be the same as the projectgroupId
. - The Maven Artifact
artifactId
SHALL be the projectartifactId
. - The Maven Artifact
version
SHALL be the projectversion
and MAY include a suffix starting with-
. - The Maven Artifact MAY include additional jars distinguished by classifiers corresponding to supported
Platforms
.
- The Maven Artifact
- The Maven Artifact SHALL contain a
baseDirectory
defined to be<groupId>/<artifactId>
. - The Maven Artifact SHALL contain one or more
artifactDirectories
defined to be<baseDirectory>/<platform>
(for each supportedPlatform
). - The
baseDirectory
SHALL contain a file calledFNDDS.version
containing only the version of this specification adhered to by the artifact, encoded using UTF-8. - The
baseDirectory
SHALL contain a file calledproject.version
containing only theversion
of the artifact, encoded using UTF-8. - Maven Artifacts published for various
Platforms
for a single Artifact must conform to the sameFNDDS.version
andproject.version
. - The
artifactDirectory
for each supportedPlatform
MAY contain any other project-specific files including executables compiled for the specific<platform>
.
Initial Version
The purpose of this specification is to enable distributing native executables (especially Firtool) as standard Maven artifacts.
It is indended to help bridge the gap between the cross-platform flexibility of JVM applications with the platform-specific requirements of native executables.
As such, it is important that executables for different platforms can co-exist on the same Java classpath so that JVM applications may be distributed with a multitude of native libraries so they can appear to be platform-agnostic despite the native dependency.
It may seem strange that the FNDDS.version
file exists in the baseDirectory
such that it will be clobbered by related artifacts for different architectures.
This design decision is a compromise--it is expected that the Platform
specification will evolve to support more platforms while all Maven Artifacts
for a specific Artifact
must have the same FNDDS.version
.