Skip to content

Commit

Permalink
Allow export rocksdb namespace in JNI library on windows.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhubner committed Mar 26, 2024
1 parent 8443506 commit 9d50374
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 859 deletions.
28 changes: 28 additions & 0 deletions build_tools/extract-exported-functions.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
Param(
[Parameter(Mandatory = $true)]
[string]$InputFile = $null,

[Parameter(Mandatory = $true)]
[string]$OutputPath = $null
)

Write-Host "InputFile : $InputFile"
Write-Host "OutputPath : $OutputPath"

$regexPattern = "^ *\d+ +[0-9A-F]+ [0-9A-F]+ (rocksdb_[a-zA-Z_0-9]+).*$"

$extractedValues = @()
$extractedValues += "LIBRARY ROCKSJNI"
$extractedValues += "EXPORTS"

$fileContent = Get-Content -Path $InputFile
foreach ($line in $fileContent)
{
if ($line -match $regexPattern)
{
$extractedData = $Matches[1]
$extractedValues += $extractedData
}
}
$extractedValues | Out-File -FilePath $OutputPath -Encoding utf8
Write-Host "Extraction completed. Extracted values are stored in $OutputPath."
30 changes: 25 additions & 5 deletions java/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,6 @@ set(JNI_NATIVE_SOURCES
rocksjni/write_batch_with_index.cc
rocksjni/write_buffer_manager.cc
)
if(WIN32)
list(APPEND JNI_NATIVE_SOURCES rocksjni/rocksjni.def)
endif (WIN32)

set(JAVA_MAIN_CLASSES
src/main/java/org/rocksdb/AbstractCompactionFilter.java
Expand Down Expand Up @@ -774,20 +771,43 @@ if(NOT MSVC)
set_property(TARGET ${ROCKSDB_STATIC_LIB} PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()

option(WITH_JNI_EXPORT_ROCKSDB "Export ROCKSDB namespace in rocksdbjni.dll (Only on Windows)" OFF)
if(WITH_JNI_EXPORT_ROCKSDB)
find_program(
VC_DUMPBIN dumpbin
REQUIRED
)
set(ROCKSDBJNIDEF rocksdbjnidef)
set(ROCKSDBJNI_DEF_FILENAME rocksdbjni.def)

add_custom_target(${ROCKSDBJNIDEF}
COMMAND ${VC_DUMPBIN} /exports /OUT:dumpbin.raw $<TARGET_FILE:${ROCKSDB_SHARED_LIB}>
COMMAND powershell "${CMAKE_SOURCE_DIR}/build_tools/extract-exported-functions.ps1"
-InputFile ${CMAKE_CURRENT_BINARY_DIR}/dumpbin.raw
-OutputPath ${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDBJNI_DEF_FILENAME}
DEPENDS ${ROCKSDB_SHARED_LIB}
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDBJNI_DEF_FILENAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating ${ROCKSDBJNI_DEF_FILENAME}"
VERBATIM
)
list(APPEND JNI_NATIVE_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${ROCKSDBJNI_DEF_FILENAME})
endif ()

set(ROCKSDBJNI_STATIC_LIB rocksdbjni${ARTIFACT_SUFFIX})
if(MINGW)
# Build mingw only as staic library.
add_library(${ROCKSDBJNI_STATIC_LIB} ${JNI_NATIVE_SOURCES})
else()
add_library(${ROCKSDBJNI_STATIC_LIB} SHARED ${JNI_NATIVE_SOURCES})
endif()
add_dependencies(${ROCKSDBJNI_STATIC_LIB} rocksdbjni_headers)
add_dependencies(${ROCKSDBJNI_STATIC_LIB} rocksdbjni_headers ${ROCKSDBJNIDEF})
target_link_libraries(${ROCKSDBJNI_STATIC_LIB} ${ROCKSDB_STATIC_LIB} ${ROCKSDB_LIB})

if(NOT MINGW)
set(ROCKSDBJNI_SHARED_LIB rocksdbjni-shared${ARTIFACT_SUFFIX})
add_library(${ROCKSDBJNI_SHARED_LIB} SHARED ${JNI_NATIVE_SOURCES})
add_dependencies(${ROCKSDBJNI_SHARED_LIB} rocksdbjni_headers)
add_dependencies(${ROCKSDBJNI_SHARED_LIB} rocksdbjni_headers ${ROCKSDBJNIDEF})
target_link_libraries(${ROCKSDBJNI_SHARED_LIB} ${ROCKSDB_STATIC_LIB} ${ROCKSDB_LIB})

set_target_properties(
Expand Down
Loading

0 comments on commit 9d50374

Please sign in to comment.