-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
CMakeLists.txt
130 lines (111 loc) · 4.54 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# make sure it works with OpenJDK
set(JAVA_AWT_LIBRARY NotNeeded)
set(JAVA_JVM_LIBRARY NotNeeded)
find_package(JNI REQUIRED)
set(src_base src/main/c++)
set(vw_jni_headers
${src_base}/jni_base_learner.h
${src_base}/vowpalWabbit_learner_VWCCBLearner.h
${src_base}/vowpalWabbit_learner_VWActionProbsLearner.h
${src_base}/vowpalWabbit_learner_VWActionScoresLearner.h
${src_base}/vowpalWabbit_learner_VWLearners.h
${src_base}/vowpalWabbit_learner_VWMulticlassLearner.h
${src_base}/vowpalWabbit_learner_VWMultilabelsLearner.h
${src_base}/vowpalWabbit_learner_VWProbLearner.h
${src_base}/vowpalWabbit_learner_VWScalarLearner.h
${src_base}/vowpalWabbit_learner_VWScalarsLearner.h
${src_base}/vowpalWabbit_VW.h
${src_base}/jni_spark_vw.h
${src_base}/jni_spark_vw_generated.h
${src_base}/util.h
)
set(vw_jni_sources
${src_base}/jni_base_learner.cc
${src_base}/vowpalWabbit_learner_VWCCBLearner.cc
${src_base}/vowpalWabbit_learner_VWActionProbsLearner.cc
${src_base}/vowpalWabbit_learner_VWActionScoresLearner.cc
${src_base}/vowpalWabbit_learner_VWLearners.cc
${src_base}/vowpalWabbit_learner_VWMulticlassLearner.cc
${src_base}/vowpalWabbit_learner_VWMultilabelsLearner.cc
${src_base}/vowpalWabbit_learner_VWProbLearner.cc
${src_base}/vowpalWabbit_learner_VWScalarLearner.cc
${src_base}/vowpalWabbit_learner_VWScalarsLearner.cc
${src_base}/vowpalWabbit_VW.cc
${src_base}/jni_spark_vw.cc
${src_base}/jni_spark_cluster.cc
${src_base}/util.cc
${CMAKE_CURRENT_SOURCE_DIR}/../vowpalwabbit/spanning_tree.cc
)
add_library(vw_jni SHARED ${vw_jni_headers} ${vw_jni_sources})
target_link_libraries(vw_jni PUBLIC vw)
set_property(TARGET vw_jni PROPERTY POSITION_INDEPENDENT_CODE ON)
target_include_directories(vw_jni PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${JNI_INCLUDE_DIRS})
# Ensure target directory exists
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/target/bin/natives/linux_64/)
add_custom_command(TARGET vw_jni POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:vw_jni> ${CMAKE_CURRENT_SOURCE_DIR}/target/bin/natives/linux_64/
)
if(STATIC_LINK_VW_JAVA)
target_link_libraries(vw_jni PUBLIC -Wl,--exclude-libs,ALL -static-libgcc -static-libstdc++ -fPIC)
else()
# enable-new-dtags and rpath enables shared object library lookup in the location of libvw_spark_jni.so
target_link_libraries(vw_jni PUBLIC -fPIC -Wl,--enable-new-dtags -Wl,-rpath,\"\$ORIGIN\")
endif()
# Replace version number in POM
configure_file(pom.xml.in ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml @ONLY)
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(JAVA_INSTALL_PATH /usr/lib)
else()
set(JAVA_INSTALL_PATH /Library/Java/Extensions)
endif()
if(VW_INSTALL)
install(TARGETS vw_jni
RUNTIME DESTINATION ${JAVA_INSTALL_PATH}
LIBRARY DESTINATION ${JAVA_INSTALL_PATH}
)
endif()
if(NOT WIN32)
# Ensure target directory exists
file(MAKE_DIRECTORY target/classes)
file(MAKE_DIRECTORY target/test-classes)
file(MAKE_DIRECTORY target/bin/natives/linux_64)
# Development
# - uncomment the following section to generate the jni headers
# - it's commented to speed up the build as it's not expected to change frequently
# find_package(Java)
# include(UseJava)
# add_custom_target(javacompile
# COMMAND mvn compile
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
# COMMENT "Compile classes for javah")
# create_javah(TARGET javaheaders
# CLASSES
# org.vowpalwabbit.spark.VowpalWabbitNative
# org.vowpalwabbit.spark.VowpalWabbitExample
# org.vowpalwabbit.spark.ClusterSpanningTree
# CLASSPATH ${CMAKE_CURRENT_SOURCE_DIR}/target/classes
# OUTPUT_NAME ${CMAKE_CURRENT_SOURCE_DIR}/src/main/c++/jni_spark_vw_generated.h)
# add_dependencies(javaheaders javacompile)
add_custom_command(TARGET vw_jni POST_BUILD
COMMAND cp $<TARGET_FILE:vw_jni> target/bin/natives/linux_64
COMMAND echo $<TARGET_FILE:vw-bin> > ${CMAKE_CURRENT_SOURCE_DIR}/target/test-classes/vw-bin.txt
# -B is batch mode and avoids the massive download progress print out
COMMAND mvn -B verify
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Copying shared libary dependencies to output directory")
# Replace version number in POM
configure_file(pom.xml.in ${CMAKE_CURRENT_SOURCE_DIR}/pom.xml @ONLY)
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(JAVA_INSTALL_PATH /usr/lib)
else()
set(JAVA_INSTALL_PATH /Library/Java/Extensions)
endif()
if(VW_INSTALL)
install(TARGETS vw_jni
RUNTIME DESTINATION ${JAVA_INSTALL_PATH}
LIBRARY DESTINATION ${JAVA_INSTALL_PATH}
)
endif()
endif()