@@ -18,12 +18,15 @@ project(monero-java-jni)
1818#############
1919
2020set (MONERO_CPP "${CMAKE_SOURCE_DIR} /external/monero-cpp" )
21- message (STATUS MONERO_CPP : ${MONERO_CPP} : ${MONERO_CPP} )
21+ message (STATUS MONERO_CPP : ${MONERO_CPP} )
2222
2323set (MONERO_CPP_SRC "${MONERO_CPP} /src" )
2424set (MONERO_PROJECT ${MONERO_CPP} /external/monero-project)
2525set (MONERO_PROJECT_SRC "${MONERO_PROJECT} /src" )
2626
27+ list (APPEND CMAKE_MODULE_PATH "${MONERO_PROJECT} /cmake" )
28+ list (APPEND CMAKE_MODULE_PATH "${MONERO_CPP} /cmake" )
29+
2730# check JAVA_HOME
2831if (NOT DEFINED ENV{JAVA_HOME} OR "$ENV{JAVA_HOME} " STREQUAL "" )
2932 message (FATAL_ERROR "JAVA_HOME variable not set, for example: export JAVA_HOME=/path/to/jdk" )
@@ -57,49 +60,193 @@ message(STATUS EXTRA_LIBRARIES: ${EXTRA_LIBRARIES})
5760set (Boost_NO_BOOST_CMAKE 1)
5861set (Boost_USE_MULTITHREADED ON )
5962find_package (Boost 1.58 QUIET REQUIRED COMPONENTS chrono date_time filesystem program_options regex serialization wserialization system thread)
60- message (STATUS "Using Boost include dir at ${Boost_INCLUDE_DIR} " )
63+
64+ if (Boost_FOUND)
65+ message (STATUS "Using Boost include dir at ${Boost_INCLUDE_DIR} " )
66+ message (STATUS "Using Boost lib version: ${Boost_LIB_VERSION} " )
67+ message (STATUS "Using Boost libs: ${Boost_LIBRARIES} " )
68+ endif ()
6169
6270############
6371# OpenSSL
6472############
6573
66- if (APPLE AND NOT IOS)
67- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -std=c++14" )
68- if (NOT OPENSSL_ROOT_DIR)
69- EXECUTE_PROCESS (COMMAND brew --prefix openssl
70- OUTPUT_VARIABLE OPENSSL_ROOT_DIR
71- OUTPUT_STRIP_TRAILING_WHITESPACE)
72- message (STATUS "Using OpenSSL found at ${OPENSSL_ROOT_DIR} " )
74+ find_package (OpenSSL REQUIRED)
75+
76+ if (WIN32 )
77+ list (APPEND OPENSSL_LIBRARIES ws2_32 crypt32 bcrypt)
78+ endif ()
79+
80+ if (OPENSSL_FOUND)
81+ message (STATUS "Using OpenSSL include dir at ${OPENSSL_INCLUDE_DIR} " )
82+ message (STATUS "Using OpenSSL libs: ${OPENSSL_LIBRARIES} " )
83+ endif ()
84+
85+ ############
86+ # libsodium
87+ ############
88+
89+ find_library (SODIUM_LIBRARY sodium REQUIRED)
90+ if (SODIUM_LIBRARY)
91+ message (STATUS "Using libsodium library at ${SODIUM_LIBRARY} " )
92+ find_path (SODIUM_INCLUDE_PATH sodium/crypto_verify_32.h)
93+ if (SODIUM_INCLUDE_PATH)
94+ message (STATUS "SODIUM_INCLUDE_PATH: ${SODIUM_INCLUDE_PATH} " )
95+ else ()
96+ message (FATAL_ERROR "Could not find required sodium/crypto_verify_32.h" )
7397 endif ()
7498endif ()
7599
76- find_package (OpenSSL REQUIRED)
77- message (STATUS "Using OpenSSL include dir at ${OPENSSL_INCLUDE_DIR} " )
100+ ############
101+ # HIDAPI
102+ ############
78103
79- if (STATIC AND NOT IOS)
80- if (UNIX )
81- set (OPENSSL_LIBRARIES "${OPENSSL_LIBRARIES} ;${CMAKE_DL_LIBS} ;${CMAKE_THREAD_LIBS_INIT} " )
104+ option (USE_DEVICE_TREZOR "Trezor hardware wallet suport" ON )
105+ if (USE_DEVICE_TREZOR)
106+ if (APPLE )
107+ include_directories (SYSTEM /usr/include /malloc)
108+ if (POLICY CMP0042)
109+ cmake_policy (SET CMP0042 NEW)
110+ endif ()
82111 endif ()
112+
113+ find_package (HIDAPI REQUIRED)
114+ message (STATUS "Using HIDAPI include dir at ${HIDAPI_INCLUDE_DIR} " )
115+ add_definitions (-DHAVE_HIDAPI)
116+ else ()
117+ message (STATUS "Trezor support disabled by USE_DEVICE_TREZOR" )
83118endif ()
84119
85- if (WIN32 )
86- list (APPEND OPENSSL_LIBRARIES ws2_32 crypt32 bcrypt)
120+
121+ #############
122+ # Monero
123+ #############
124+
125+ set (MONERO_PROJECT_BUILD "${MONERO_PROJECT} /build/release" CACHE STRING "Monero project build directory" )
126+ message (STATUS "Using monero-project build: " ${MONERO_PROJECT_BUILD} )
127+
128+ list (APPEND CMAKE_MODULE_PATH "${MONERO_PROJECT} /cmake" )
129+
130+ add_library (wallet STATIC IMPORTED )
131+ set_target_properties (wallet PROPERTIES IMPORTED_LOCATION
132+ ${MONERO_PROJECT_BUILD} /lib/libwallet.a)
133+
134+ # libwallet-crypto.a provides x86_64 asm for some wallet functions
135+ if (EXISTS ${MONERO_PROJECT_BUILD} /src/crypto/wallet/libwallet-crypto.a)
136+ add_library (wallet_crypto_lib STATIC IMPORTED )
137+ set_target_properties (wallet_crypto_lib PROPERTIES IMPORTED_LOCATION
138+ ${MONERO_PROJECT_BUILD} /src/crypto/wallet/libwallet-crypto.a)
139+ set (wallet_crypto wallet_crypto_lib)
140+ endif ()
141+
142+ add_library (lmdb STATIC IMPORTED )
143+ set_target_properties (lmdb PROPERTIES IMPORTED_LOCATION
144+ ${MONERO_PROJECT_BUILD} /external/db_drivers/liblmdb/liblmdb.a)
145+
146+ add_library (epee STATIC IMPORTED )
147+ set_target_properties (epee PROPERTIES IMPORTED_LOCATION
148+ ${MONERO_PROJECT_BUILD} /contrib/epee/src/libepee.a)
149+
150+ add_library (rpc_base STATIC IMPORTED )
151+ set_target_properties (rpc_base PROPERTIES IMPORTED_LOCATION
152+ ${MONERO_PROJECT_BUILD} /src/rpc/librpc_base.a)
153+
154+ add_library (net STATIC IMPORTED )
155+ set_target_properties (net PROPERTIES IMPORTED_LOCATION
156+ ${MONERO_PROJECT_BUILD} /src/net/libnet.a)
157+
158+ add_library (hardforks STATIC IMPORTED )
159+ set_target_properties (hardforks PROPERTIES IMPORTED_LOCATION
160+ ${MONERO_PROJECT_BUILD} /src/hardforks/libhardforks.a)
161+
162+ add_library (easylogging STATIC IMPORTED )
163+ set_target_properties (easylogging PROPERTIES IMPORTED_LOCATION
164+ ${MONERO_PROJECT_BUILD} /external/easylogging++/libeasylogging.a)
165+
166+ add_library (cryptonote_core STATIC IMPORTED )
167+ set_target_properties (cryptonote_core PROPERTIES IMPORTED_LOCATION
168+ ${MONERO_PROJECT_BUILD} /src/cryptonote_core/libcryptonote_core.a)
169+
170+ add_library (cryptonote_basic STATIC IMPORTED )
171+ set_target_properties (cryptonote_basic PROPERTIES IMPORTED_LOCATION
172+ ${MONERO_PROJECT_BUILD} /src/cryptonote_basic/libcryptonote_basic.a)
173+
174+ add_library (cryptonote_format_utils_basic STATIC IMPORTED )
175+ set_target_properties (cryptonote_format_utils_basic PROPERTIES IMPORTED_LOCATION
176+ ${MONERO_PROJECT_BUILD} /src/cryptonote_basic/libcryptonote_format_utils_basic.a)
177+
178+ add_library (mnemonics STATIC IMPORTED )
179+ set_target_properties (mnemonics PROPERTIES IMPORTED_LOCATION
180+ ${MONERO_PROJECT_BUILD} /src/mnemonics/libmnemonics.a)
181+
182+ add_library (common STATIC IMPORTED )
183+ set_target_properties (common PROPERTIES IMPORTED_LOCATION
184+ ${MONERO_PROJECT_BUILD} /src/common/libcommon.a)
185+
186+ add_library (cncrypto STATIC IMPORTED )
187+ set_target_properties (cncrypto PROPERTIES IMPORTED_LOCATION
188+ ${MONERO_PROJECT_BUILD} /src/crypto/libcncrypto.a)
189+
190+ add_library (ringct STATIC IMPORTED )
191+ set_target_properties (ringct PROPERTIES IMPORTED_LOCATION
192+ ${MONERO_PROJECT_BUILD} /src/ringct/libringct.a)
193+
194+ add_library (ringct_basic STATIC IMPORTED )
195+ set_target_properties (ringct_basic PROPERTIES IMPORTED_LOCATION
196+ ${MONERO_PROJECT_BUILD} /src/ringct/libringct_basic.a)
197+
198+ add_library (blockchain_db STATIC IMPORTED )
199+ set_target_properties (blockchain_db PROPERTIES IMPORTED_LOCATION
200+ ${MONERO_PROJECT_BUILD} /src/blockchain_db/libblockchain_db.a)
201+
202+ add_library (blocks STATIC IMPORTED )
203+ set_target_properties (blocks PROPERTIES IMPORTED_LOCATION
204+ ${MONERO_PROJECT_BUILD} /src/blocks/libblocks.a)
205+
206+ add_library (checkpoints STATIC IMPORTED )
207+ set_target_properties (checkpoints PROPERTIES IMPORTED_LOCATION
208+ ${MONERO_PROJECT_BUILD} /src/checkpoints/libcheckpoints.a)
209+
210+ add_library (device STATIC IMPORTED )
211+ set_target_properties (device PROPERTIES IMPORTED_LOCATION
212+ ${MONERO_PROJECT_BUILD} /src/device/libdevice.a)
213+
214+ add_library (device_trezor STATIC IMPORTED )
215+ set_target_properties (device_trezor PROPERTIES IMPORTED_LOCATION
216+ ${MONERO_PROJECT_BUILD} /src/device_trezor/libdevice_trezor.a)
217+
218+ add_library (multisig STATIC IMPORTED )
219+ set_target_properties (multisig PROPERTIES IMPORTED_LOCATION
220+ ${MONERO_PROJECT_BUILD} /src/multisig/libmultisig.a)
221+
222+ add_library (version STATIC IMPORTED )
223+ set_target_properties (version PROPERTIES IMPORTED_LOCATION
224+ ${MONERO_PROJECT_BUILD} /src/libversion.a)
225+
226+ add_library (randomx STATIC IMPORTED )
227+ set_target_properties (randomx PROPERTIES IMPORTED_LOCATION
228+ ${MONERO_PROJECT_BUILD} /external/randomx/librandomx.a)
229+
230+ ############
231+ # Unbound
232+ ############
233+
234+ find_library (UNBOUND_LIBRARIES libunbound.a) # LD_LIBRARY_PATH
235+ if (UNBOUND_LIBRARIES)
236+ message (STATUS "Found libunbound library: ${UNBOUND_LIBRARIES} " )
87237endif ()
88238
89239######################
90240# monero-cpp
91241######################
92242
93- add_library (monero-cpp SHARED IMPORTED )
243+ add_library (monero-cpp STATIC IMPORTED )
94244
95- # import shared c++ library
96- if (APPLE )
97- set_target_properties (monero-cpp PROPERTIES IMPORTED_LOCATION ./libmonero-cpp.dylib)
98- elseif (WIN32 )
99- set_target_properties (monero-cpp PROPERTIES IMPORTED_LOCATION ./libmonero-cpp.dll)
100- set_target_properties (monero-cpp PROPERTIES IMPORTED_IMPLIB ./libmonero-cpp.dll.a)
245+ # import static c++ library
246+ if (WIN32 )
247+ set_target_properties (monero-cpp PROPERTIES IMPORTED_LOCATION ./libmonero-cpp.lib)
101248else ()
102- set_target_properties (monero-cpp PROPERTIES IMPORTED_LOCATION ./libmonero-cpp.so )
249+ set_target_properties (monero-cpp PROPERTIES IMPORTED_LOCATION ./libmonero-cpp.a )
103250endif ()
104251
105252###############################################
@@ -116,19 +263,19 @@ target_include_directories(monero-java PUBLIC
116263 "$ENV{JAVA_HOME} "
117264 "$ENV{JAVA_HOME} /include"
118265 "${MONERO_CPP} /external/libsodium/include/sodium"
119- "${MONERO_CPP} /external/openssl-sdk/include"
120266 "${MONERO_CPP_SRC} /"
121267 "${MONERO_PROJECT} /contrib/epee/include"
122268 "${MONERO_PROJECT} /external/"
123269 "${MONERO_PROJECT} /external/easylogging++"
124270 "${MONERO_PROJECT} /external/rapidjson/include"
125271 "${MONERO_PROJECT_SRC} /"
126272 "${MONERO_PROJECT_SRC} /crypto"
127- "${MONERO_PROJECT_SRC} /crypto/crypto_ops_builder/include/"
128273 "${MONERO_PROJECT_SRC} /wallet"
129274 "${MONERO_PROJECT_SRC} /wallet/api"
275+ ${SODIUM_INCLUDE_PATH}
130276 ${Boost_INCLUDE_DIR}
131277 ${OPENSSL_INCLUDE_DIR}
278+ ${HIDAPI_INCLUDE_DIR}
132279)
133280
134281if (APPLE )
@@ -141,8 +288,35 @@ endif()
141288
142289target_link_libraries (monero-java
143290 monero-cpp
291+ wallet
292+ rpc_base
293+ net
294+ lmdb
295+ easylogging
296+ cryptonote_core
297+ cryptonote_basic
298+ cryptonote_format_utils_basic
299+ mnemonics
300+ ringct
301+ ringct_basic
302+ common
303+ cncrypto
304+ blockchain_db
305+ blocks
306+ checkpoints
307+ device
308+ device_trezor
309+ multisig
310+ version
311+ randomx
312+ epee
313+ hardforks
314+ ${wallet_crypto}
315+ ${UNBOUND_LIBRARIES}
144316 ${Boost_LIBRARIES}
145317 ${OPENSSL_LIBRARIES}
318+ ${SODIUM_LIBRARY}
319+ ${HIDAPI_LIBRARIES}
146320 ${EXTRA_LIBRARIES}
147321)
148322
0 commit comments