Skip to content

Commit f289839

Browse files
bmarwelltresf
authored andcommitted
Maven packaging (#18)
* Change maven id and project name to just "jssc" at "io.github.java-native" namespace * Adds two releasable jars (platform-specific jar and uber jar). TODO: add non-shaded fat jar #21 * Allow cmake to parse version info from pom.xml * Adds ability to skip native compilation steps including cmake and tests * Leverages maven-assembly-plugin for better classifier to the default artifact * Alphabetize, organize and remove hard-coding of dependencies/variables * Adds Travis-CI for many platforms. Note, some binaries are not yet usable, sorry! * Adds Ubuntu 14.04 cross-compiled binaries to the source tree. TODO: Move to git-lfs * Add LICENSE to pom.xml (#22)
1 parent 590dfd9 commit f289839

File tree

19 files changed

+432
-87
lines changed

19 files changed

+432
-87
lines changed

.gitignore

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ target/
1515
*.gch
1616
*.pch
1717

18-
# Compiled Dynamic libraries
19-
*.so
20-
*.dylib
21-
*.dll
22-
2318
# Fortran module files
2419
*.mod
2520
*.smod

.travis.yml

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ language: java
22

33
cache:
44
directories:
5-
- '$HOME/.m2'
6-
- '$HOME/.jabba/jdk'
5+
- $HOME/.m2
6+
- $HOME/.jabba/jdk
7+
8+
before_cache:
9+
- rm -rf $HOME/.m2/repository/com/github/java-native
710

811
matrix:
912
include:
@@ -13,13 +16,58 @@ matrix:
1316
packages:
1417
- cmake3
1518
- g++
19+
- os: linux
20+
env: PROFILE=m32
21+
addons:
22+
apt:
23+
packages:
24+
- cmake3
25+
- g++-multilib
26+
- os: linux
27+
env: PROFILE=mingw32
28+
addons:
29+
apt:
30+
packages:
31+
- cmake3
32+
- g++-mingw-w64-i686
33+
- os: linux
34+
env: PROFILE=mingw64
35+
addons:
36+
apt:
37+
packages:
38+
- cmake3
39+
- g++-mingw-w64-x86-64
40+
- os: linux
41+
env: PROFILE=armsf,armtrusty
42+
addons:
43+
apt:
44+
packages:
45+
- cmake3
46+
- g++-arm-linux-gnueabi
47+
- os: linux
48+
env: PROFILE=aarch64
49+
addons:
50+
apt:
51+
packages:
52+
- cmake3
53+
- g++-aarch64-linux-gnu
54+
- os: linux
55+
env: PROFILE=ppc64
56+
addons:
57+
apt:
58+
packages:
59+
- cmake3
60+
- g++-powerpc64le-linux-gnu
1661
- os: osx
1762
addons:
1863
homebrew:
1964
packages:
2065
- cmake
2166

22-
script: mvn --batch-mode test
67+
install:
68+
- mvn dependency:resolve
69+
70+
script: if [ -z "$PROFILE" ]; then mvn --batch-mode; else mvn -P "$PROFILE" --batch-mode; fi
2371

2472
after_success:
2573
- bash <(curl -s https://codecov.io/bash)

CMakeLists.txt

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ cmake_policy(SET CMP0042 NEW)
44

55
project(jssc VERSION 2.7.1 LANGUAGES CXX)
66

7-
8-
97
find_package(Java)
108
find_package(JNI)
119

@@ -61,10 +59,7 @@ else()
6159
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
6260
endif()
6361

64-
# output to maven conventions to target/generated-sources/<generator>
65-
# The other part will be in conventions to native-lib-loader.
66-
67-
# handle maven-triggered builds; place library in correct subfolder
62+
# Handle maven-triggered builds; place library in correct subfolder
6863
if(MAVEN_OUTPUT_DIRECTORY)
6964
# Detect platform if -DNATIVE_LIB_DIR is not provided
7065
# TODO: Handle arm, hardfloat, etc
@@ -84,26 +79,43 @@ if(MAVEN_OUTPUT_DIRECTORY)
8479
endif()
8580
SET(NATIVE_LIB_DIR ${OS_NAME}_${OS_BITS})
8681
endif()
87-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MAVEN_OUTPUT_DIRECTORY}/META-INF/lib/${NATIVE_LIB_DIR})
82+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${MAVEN_OUTPUT_DIRECTORY}/natives/${NATIVE_LIB_DIR})
8883
endif()
8984

9085
# version.h using #cmakedefine for version from pom.xml.
91-
# Hint: Do not use PROJECT_VERSION, this is already used by cmake.
92-
set(JSSC_VERSION "${JSSC_VERSION}")
86+
set(JSSC_VERSION "0.0.0-UNKNOWN")
87+
file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml POM_FILE)
88+
foreach(POM_LINE ${POM_FILE})
89+
# Assume first "<version>" is the project version
90+
if(POM_LINE MATCHES "<version>")
91+
string(REGEX REPLACE "^[ \t]+|<[^>]*>" "" DETECTED_VERSION "${POM_LINE}")
92+
string(STRIP "${DETECTED_VERSION}" DETECTED_VERSION)
93+
if(DETECTED_VERSION STREQUAL "")
94+
MESSAGE(WARNING "Could not parse version from pom.xml, defaulting to \"${JSSC_VERSION}\"")
95+
else()
96+
SET(JSSC_VERSION "${DETECTED_VERSION}")
97+
MESSAGE(STATUS "Found version \"${JSSC_VERSION}\" in pom.xml")
98+
endif()
99+
break()
100+
endif()
101+
endforeach()
93102
configure_file(src/cpp/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)
94103

95104
add_library(jssc SHARED src/cpp/${JSSC_PLATFORM}/jssc.cpp)
96105

97106
target_include_directories(jssc PRIVATE ${JNI_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${JSSC_ADDITIONAL_INCLUDES})
98107

99-
set_target_properties(jssc PROPERTIES VERSION ${PROJECT_VERSION})
100108
set_target_properties(jssc PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_BINARY_DIR}/jssc_SerialNativeInterface.h)
101109
set_target_properties(jssc PROPERTIES POSITION_INDEPENDENT_CODE ON)
102110
if(WIN32)
103111
# Fix paths for MSVC (Debug/Release) and MINGW
104112
set_target_properties(jssc PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
105113
set_target_properties(jssc PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
106114
endif()
115+
if(FORCE_M32)
116+
# Build 32-bit binary on Linux
117+
set_target_properties(jssc PROPERTIES COMPILE_FLAGS -m32 LINK_FLAGS -m32)
118+
endif()
107119

108120
# Call strip on non-debug builds
109121
if(CMAKE_STRIP AND NOT CMAKE_BUILD_TYPE MATCHES "Deb")
@@ -115,10 +127,9 @@ endif()
115127

116128
# Handle compiler warnings
117129
if(MSVC)
118-
#TODO Treat warnings as errors /WX
130+
#TODO Treat warnings as errors /WX
119131
target_compile_options(jssc PRIVATE /W4)
120132
else()
121-
#TODO Treat warnings as errors -Werror
133+
#TODO Treat warnings as errors -Werror
122134
target_compile_options(jssc PRIVATE -Wall -Wextra -pedantic)
123135
endif()
124-

0 commit comments

Comments
 (0)