-
Notifications
You must be signed in to change notification settings - Fork 0
Compiling
-
note -
- Maven 3.3.9 or later is required for successful builds with current jssc branch
- Cmake 3.0 or later is required for successful builds with current jssc branch
-
JDK7+
-
C++
-
Linux:
gcc
,clang
or equivalent - macOS: XCode with Command Line Utilities
- Windows: Microsoft Visual C++ or mingw-w64
-
Linux:
-
Maven, CMake
- Linux: `sudo apt install maven cmake g++'
-
the following packages are required for non native/cross compiling -
'mingw-w64 g++-mingw-w64-i686 g++-arm-linux-gnueabihf g++-aarch64-linux-gnu g++-powerpc64le-linux-gnu'-
macOS:
brew install maven cmake
-
Windows:
- Manually install Maven from https://maven.apache.org/, adding
mvn.bat
directory to your%PATH%
- Manually install CMake from https://cmake.org/download/, adding
cmake.exe
directory to your%PATH%
- Manually install Maven from https://maven.apache.org/, adding
-
mvn # compile for current system
mvn -P x86 # cross-compile using multi-lib for 32-bit x86 on current host OS(Linux/Unix, Windows)
mvn -P x86_64 # cross-compile using multi-lib for 64-bit x86/amd64 on current host OS(Linux/Unix, MacOS, Windows)
mvn -P ppc64 # cross-compile using multi-lib for PowerPC Linux/Unix
mvn -P armhf # cross-compile using multi-lib for arm 32 bit hard floating point Linux/Unix
mvn -P aarch64 # cross-compile using multi-lib for arm64 based on current host OS (Linux/Unix, MacOS, Windows)
```
* **Important:** Call `mvn clean` between different compiler profiles.
* **Note:** For other cross-compilation profiles or platforms search for `CMAKE_TOOLCHAIN_FILE` in `pom.xml`. Each has a respective CMake toolchain file.
* Prefer to skip maven? The project is configured to allow calling `cmake -DCMAKE_TOOLCHAIN_FILE=<...>` directly but the `javah` generated header file must be present.
### Package
Without recompiling native libraries
```bash
mvn -P package,jar-with-dependencies
The build will output two .jar
files in the target/
directory. One archive, which is build by the maven-jar-plugin
, has a classifier which maches the machine's classifier (unless you are doing a cross-compile). This one will contain a freshly compiled library, like libjssc.so
for Linux or a jssc.dll
if you are on Windows. They go into a directory /natives/os_bitness
.
The other .jar
artifact which is generated by the build doesn't use the library compiled by cmake
. It uses the checked-in libraries form the directory src/main/resources-precompiled/natives/
. This jar is the artefact we are going to publish to maven central.
It will contain a broader varieties of OSes and architectures in just one .jar
file, but the libraries checked in into this git repository need to stay updated.
If you do not need a freshly compiled library, you can just execute mvn package -P package
to skip the cmake
compilation and the unit tests.