-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
We have been building jostle on Windows. I will share our build steps below in case it helps others build it on Windows.
Update to CMakeLists.txt:
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
#
# Windows
#
SET(OPTIONS "-O2")
SET(OPEN_SSL_LIB "${OPENSSL_PREFIX}/lib64/libcrypto.lib")
SET(OPEN_SSL_DLL "${OPENSSL_PREFIX}/lib64/libcrypto-3-x64.dll")
SET(INSTALL_PATH "${JAVA_PRJ_HOME}/jostle/src/main/resources/native/windows/amd64/")
SET(JNI_INCLUDE "${JAVA_HOME}/include/" "${JAVA_HOME}/include/win32" "${JAVA_PRJ_HOME}/jostle/build/generated/sources/headers/java/main")
add_library(interface_jni SHARED
jni/native_info_jni.c
jni/open_ssl_jni.c
jni/block_cipher_ni_jni.c
jni/spec_ni_jni.c
jni/mldsa_ni_jni.c
jni/slhdsa_ni_jni.c
jni/mlkem_ni_jni.c
jni/asn1_ni_jni.c
util/mldsa.h
util/mldsa.c
util/slhdsa.h
util/slhdsa.c
util/mlkem.h
util/mlkem.c
util/encapdecap.h
util/encapdecap.c
util/block_cipher_ctx.h
util/block_cipher_ctx.c
util/ctr_u128_t.h
util/ctr_u128_t.c
util/bc_err_codes.h
util/key_spec.c
util/key_spec.h
jni/byte_array_critical.c
jni/byte_array_critical.h
jni/bytearrays.c
jni/bytearrays.h
util/asn1_util.c
util/asn1_util.h
util/ops.h
util/ops.c
jni/ops.c
)
target_include_directories(interface_jni PUBLIC "${OPENSSL_PREFIX}/include" "${JNI_INCLUDE}")
target_link_libraries(interface_jni PUBLIC "${OPEN_SSL_LIB}")
target_compile_options(interface_jni PRIVATE /W4 /O2)
if (DEFINED ENV{JOSTLE_OPS_TEST})
target_compile_definitions(interface_jni PUBLIC JOSTLE_OPS)
endif ()
add_library(interface_ffi SHARED
ffi/ffi.h
ffi/ffi.c
ffi/types.h
ffi/native_info_ffi.h
ffi/native_info_ffi.c
ffi/openssl_ffi.h
ffi/openssl_ffi.c
ffi/block_cipher_ni_ffi.c
ffi/spec_ni_ffi.c
ffi/mldsa_ni_ffi.c
ffi/mlkem_ni_ffi.c
ffi/slh_dsa_ni_ffi.c
ffi/asn1_ni_ffi.c
util/mldsa.h
util/mldsa.c
util/slhdsa.h
util/slhdsa.c
util/mlkem.h
util/mlkem.c
util/encapdecap.h
util/encapdecap.c
util/block_cipher_ctx.h
util/block_cipher_ctx.c
util/ctr_u128_t.h
util/ctr_u128_t.c
util/bc_err_codes.h
util/key_spec.c
util/key_spec.h
util/asn1_util.c
util/asn1_util.h
util/ops.h
util/ops.c
)
set_target_properties(interface_ffi PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
target_include_directories(interface_ffi PUBLIC "${OPENSSL_PREFIX}/include")
target_link_libraries(interface_ffi PUBLIC "${OPEN_SSL_LIB}")
target_compile_options(interface_ffi PRIVATE /W4 /O2)
if (DEFINED ENV{JOSTLE_OPS_TEST})
target_compile_definitions(interface_ffi PUBLIC JOSTLE_OPS)
endif ()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/loading/native" DESTINATION "${JAVA_PRJ_HOME}/jostle/src/main/resources")
install(TARGETS interface_jni RUNTIME DESTINATION ${INSTALL_PATH})
install(TARGETS interface_ffi RUNTIME DESTINATION ${INSTALL_PATH})
install(FILES "${OPEN_SSL_DLL}" DESTINATION ${INSTALL_PATH})
endif ()
Changes to interface/loading/native/resolutions.txt:
#
# Windows amd64
#
"^Windows.*" "^amd64" "/native/windows/amd64"
We also add this file:
interface/loading/native/windows/amd64/deps.txt
OSSL:libcrypto-3-x64.dll
JNI:interface_jni.dll
FFI:interface_ffi.dllHow we build native libraries:
cd interface
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -G "Ninja" -DCMAKE_C_COMPILER=clang-cl ..
cmake --build . --config Release
cmake --install . --config ReleaseDumpinfo:
DumpInfo
Provider:
Info: Jostle Provider for OpenSSL v1.0.0-SNAPSHOT
Name: JSL
OS: Windows 11
Version: 10.0
Arch: amd64
Java Version: 25
Java Vendor: Eclipse Adoptium
Loader:
Load Attempted: true
Load Successful: true
Loader Message: Loader Finished Successfully
Loader Interface Resolution Strategy: auto
Loader Interface: FFI
Loaded Native Libraries:
Extracted: /native/windows/amd64/libcrypto-3-x64.dll
Extracted: /native/windows/amd64/interface_ffi.dll
Native Status:
Native Available: true
OpenSSL Version: 3.6.0-dev
.END
Use: -fine to emit FINE level logsMetadata
Metadata
Assignees
Labels
No labels