From f8eac707003be954c0852e855a52fa3c612660da Mon Sep 17 00:00:00 2001 From: Markus Pilman <markus.pilman@snowflake.net> Date: Fri, 4 May 2018 15:35:27 -0700 Subject: [PATCH] Fixed C bindings DLLEXPORT and Java bindings --- bindings/c/CMakeLists.txt | 13 ++- bindings/java/CMakeLists.txt | 140 +++++++++++++++++++++++++++++++++ bindings/python/CMakeLists.txt | 53 +++++++++++++ 3 files changed, 203 insertions(+), 3 deletions(-) create mode 100644 bindings/java/CMakeLists.txt create mode 100644 bindings/python/CMakeLists.txt diff --git a/bindings/c/CMakeLists.txt b/bindings/c/CMakeLists.txt index 859a2eed96..b6269e72fb 100644 --- a/bindings/c/CMakeLists.txt +++ b/bindings/c/CMakeLists.txt @@ -29,11 +29,18 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foundationdb/fdb_c_options COMMENT "Generate C options") add_custom_target(fdb_c_options DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/foundationdb/fdb_c_options.g.h) -add_library(fdb_c SHARED ${FDB_C_SRCS}) +include(GenerateExportHeader) + +add_library(fdb_c SHARED ${FDB_C_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/fdb_c.g.S) add_dependencies(fdb_c fdb_c_generated fdb_c_options) target_link_libraries(fdb_c PUBLIC fdbclient) -target_include_directories(fdb_c PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/foundationdb) - +target_include_directories(fdb_c PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/foundationdb) +# TODO: re-enable once the old vcxproj-based build system is removed. +#generate_export_header(fdb_c EXPORT_MACRO_NAME "DLLEXPORT" +# EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/foundationdb/fdb_c_export.h) install(TARGETS fdb_c DESTINATION lib64 COMPONENT clients) install(FILES foundationdb/fdb_c.h ${CMAKE_CURRENT_BINARY_DIR}/foundationdb/fdb_c_options.g.h ${CMAKE_SOURCE_DIR}/fdbclient/vexillographer/fdb.options DESTINATION include/foundationdb COMPONENT clients) diff --git a/bindings/java/CMakeLists.txt b/bindings/java/CMakeLists.txt new file mode 100644 index 0000000000..1c90a1889c --- /dev/null +++ b/bindings/java/CMakeLists.txt @@ -0,0 +1,140 @@ +set(JAVA_BINDING_SRCS + src/main/com/apple/foundationdb/async/AsyncIterable.java + src/main/com/apple/foundationdb/async/AsyncIterator.java + src/main/com/apple/foundationdb/async/AsyncUtil.java + src/main/com/apple/foundationdb/async/Cancellable.java + src/main/com/apple/foundationdb/async/CloneableException.java + src/main/com/apple/foundationdb/async/CloseableAsyncIterator.java + src/main/com/apple/foundationdb/async/package-info.java + src/main/com/apple/foundationdb/Cluster.java + src/main/com/apple/foundationdb/Database.java + src/main/com/apple/foundationdb/directory/Directory.java + src/main/com/apple/foundationdb/directory/DirectoryAlreadyExistsException.java + src/main/com/apple/foundationdb/directory/DirectoryException.java + src/main/com/apple/foundationdb/directory/DirectoryLayer.java + src/main/com/apple/foundationdb/directory/DirectoryMoveException.java + src/main/com/apple/foundationdb/directory/DirectoryPartition.java + src/main/com/apple/foundationdb/directory/DirectorySubspace.java + src/main/com/apple/foundationdb/directory/DirectoryUtil.java + src/main/com/apple/foundationdb/directory/DirectoryVersionException.java + src/main/com/apple/foundationdb/directory/MismatchedLayerException.java + src/main/com/apple/foundationdb/directory/NoSuchDirectoryException.java + src/main/com/apple/foundationdb/directory/package-info.java + src/main/com/apple/foundationdb/directory/PathUtil.java + src/main/com/apple/foundationdb/FDB.java + src/main/com/apple/foundationdb/FDBDatabase.java + src/main/com/apple/foundationdb/FDBTransaction.java + src/main/com/apple/foundationdb/FutureCluster.java + src/main/com/apple/foundationdb/FutureDatabase.java + src/main/com/apple/foundationdb/FutureKey.java + src/main/com/apple/foundationdb/FutureResult.java + src/main/com/apple/foundationdb/FutureResults.java + src/main/com/apple/foundationdb/FutureStrings.java + src/main/com/apple/foundationdb/FutureVersion.java + src/main/com/apple/foundationdb/FutureVoid.java + src/main/com/apple/foundationdb/JNIUtil.java + src/main/com/apple/foundationdb/KeySelector.java + src/main/com/apple/foundationdb/KeyValue.java + src/main/com/apple/foundationdb/LocalityUtil.java + src/main/com/apple/foundationdb/NativeFuture.java + src/main/com/apple/foundationdb/NativeObjectWrapper.java + src/main/com/apple/foundationdb/OptionConsumer.java + src/main/com/apple/foundationdb/OptionsSet.java + src/main/com/apple/foundationdb/package-info.java + src/main/com/apple/foundationdb/Range.java + src/main/com/apple/foundationdb/RangeQuery.java + src/main/com/apple/foundationdb/RangeResult.java + src/main/com/apple/foundationdb/RangeResultInfo.java + src/main/com/apple/foundationdb/RangeResultSummary.java + src/main/com/apple/foundationdb/ReadTransaction.java + src/main/com/apple/foundationdb/ReadTransactionContext.java + src/main/com/apple/foundationdb/subspace/package-info.java + src/main/com/apple/foundationdb/subspace/Subspace.java + src/main/com/apple/foundationdb/Transaction.java + src/main/com/apple/foundationdb/TransactionContext.java + src/main/com/apple/foundationdb/tuple/ByteArrayUtil.java + src/main/com/apple/foundationdb/tuple/IterableComparator.java + src/main/com/apple/foundationdb/tuple/package-info.java + src/main/com/apple/foundationdb/tuple/Tuple.java + src/main/com/apple/foundationdb/tuple/TupleUtil.java + src/main/com/apple/foundationdb/tuple/Versionstamp.java) + +set(JAVA_TESTS_SRCS + src/test/com/apple/foundationdb/test/AbstractTester.java + src/test/com/apple/foundationdb/test/AsyncDirectoryExtension.java + src/test/com/apple/foundationdb/test/AsyncStackTester.java + src/test/com/apple/foundationdb/test/BlockingBenchmark.java + src/test/com/apple/foundationdb/test/ConcurrentGetSetGet.java + src/test/com/apple/foundationdb/test/Context.java + src/test/com/apple/foundationdb/test/ContinuousSample.java + src/test/com/apple/foundationdb/test/DirectoryExtension.java + src/test/com/apple/foundationdb/test/DirectoryOperation.java + src/test/com/apple/foundationdb/test/DirectoryTest.java + src/test/com/apple/foundationdb/test/DirectoryUtil.java + src/test/com/apple/foundationdb/test/Example.java + src/test/com/apple/foundationdb/test/Instruction.java + src/test/com/apple/foundationdb/test/IterableTest.java + src/test/com/apple/foundationdb/test/LocalityTests.java + src/test/com/apple/foundationdb/test/ParallelRandomScan.java + src/test/com/apple/foundationdb/test/PerformanceTester.java + src/test/com/apple/foundationdb/test/RangeTest.java + src/test/com/apple/foundationdb/test/RYWBenchmark.java + src/test/com/apple/foundationdb/test/SerialInsertion.java + src/test/com/apple/foundationdb/test/SerialIteration.java + src/test/com/apple/foundationdb/test/SerialTest.java + src/test/com/apple/foundationdb/test/Stack.java + src/test/com/apple/foundationdb/test/StackEntry.java + src/test/com/apple/foundationdb/test/StackOperation.java + src/test/com/apple/foundationdb/test/StackTester.java + src/test/com/apple/foundationdb/test/StackUtils.java + src/test/com/apple/foundationdb/test/TesterArgs.java + src/test/com/apple/foundationdb/test/TestResult.java + src/test/com/apple/foundationdb/test/TupleTest.java + src/test/com/apple/foundationdb/test/VersionstampSmokeTest.java + src/test/com/apple/foundationdb/test/WatchTest.java + src/test/com/apple/foundationdb/test/WhileTrueTest.java) + +set(GENERATED_JAVA_DIR ${CMAKE_CURRENT_BINARY_DIR}/src/main/com/foundationdb) +file(MAKE_DIRECTORY ${GENERATED_JAVA_DIR}) + +set(GENERATED_JAVA_FILES + ${GENERATED_JAVA_DIR}/ClusterOptions.java + ${GENERATED_JAVA_DIR}/ConflictRangeType.java + ${GENERATED_JAVA_DIR}/DatabaseOptions.java + ${GENERATED_JAVA_DIR}/MutationType.java + ${GENERATED_JAVA_DIR}/NetworkOptions.java + ${GENERATED_JAVA_DIR}/StreamingMode.java + ${GENERATED_JAVA_DIR}/TransactionOptions.java + ${GENERATED_JAVA_DIR}/FDBException.java) + +add_custom_command(OUTPUT ${GENERATED_JAVA_FILES} + COMMAND ${MONO_EXECUTABLE} ${VEXILLOGRAPHER_EXE} ${CMAKE_SOURCE_DIR}/fdbclient/vexillographer/fdb.options java ${GENERATED_JAVA_DIR} + DEPENDS ${CMAKE_SOURCE_DIR}/fdbclient/vexillographer/fdb.options vexillographer + COMMENT "Generate Java options") +add_custom_target(fdb_java_options DEPENDS ${GENERATED_JAVA_DIR}/StreamingMode.java) + +set(SYSTEM_NAME "linux") +if (APPLE) + set(SYSTEM_NAME "osx") +endif() + +add_library(fdb_java SHARED fdbJNI.cpp) +message(DEBUG ${JNI_INCLUDE_DIRS}) +message(DEBUG ${JNI_LIBRARIES}) +target_include_directories(fdb_java PRIVATE ${JNI_INCLUDE_DIRS}) +# libfdb_java.so is loaded by fdb-java.jar and doesn't need to depened on jvm shared libraries. +target_link_libraries(fdb_java PRIVATE fdb_c) +set_target_properties(fdb_java PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/${SYSTEM_NAME}/amd64/) + +set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8") +set(CMAKE_JNI_TARGET TRUE) +set(JAR_VERSION "${FDB_MAJOR}.${FDB_MINOR}.${FDB_REVISION}") +add_jar(fdb-java ${JAVA_BINDING_SRCS} ${GENERATED_JAVA_FILES} + OUTPUT_DIR ${PROJECT_BINARY_DIR}/lib) +add_dependencies(fdb-java fdb_java_options fdb_java) +add_jar(foundationdb-tests SOURCES ${JAVA_TESTS_SRCS} INCLUDE_JARS fdb-java) +add_dependencies(foundationdb-tests fdb_java_options) + +install_jar(fdb-java DESTINATION share/java COMPONENT clients) +install(TARGETS fdb_java DESTINATION lib64 COMPONENT clients) diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt new file mode 100644 index 0000000000..4a1040d238 --- /dev/null +++ b/bindings/python/CMakeLists.txt @@ -0,0 +1,53 @@ +set(SRCS + fdb/__init__.py + fdb/directory_impl.py + fdb/impl.py + fdb/locality.py + fdb/six.py + fdb/subspace_impl.py + fdb/tuple.py) + +if(APPLE) + list(APPEND SRCS fdb/libfdb_c.dylib.pth) +else() + list(APPEND SRCS fdb/libfdb_c.so.pth) +endif() + +set(out_files "") +foreach(src ${SRCS}) + get_filename_component(dirname ${src} DIRECTORY) + get_filename_component(extname ${src} EXT) + add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/bindings/python/${src} + COMMAND mkdir -p ${PROJECT_BINARY_DIR}/bindings/python/${dirname} + COMMAND cp ${src} ${PROJECT_BINARY_DIR}/bindings/python/${dirname}/ + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMENT "copy ${src}") + set(out_files "${out_files};${PROJECT_BINARY_DIR}/bindings/python/${src}") + if(${extname} STREQUAL ".py") + add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/bindings/python/${src}c + COMMAND python -m py_compile ${PROJECT_BINARY_DIR}/bindings/python/${src} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src} ${CMAKE_CURRENT_BINARY_DIR}/${src} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/bindings/python/${dirname} + COMMENT "compile ${src}") + set(out_files "${out_files};${PROJECT_BINARY_DIR}/bindings/python/${src}c") + endif() +endforeach() +add_custom_target(python_binding ALL DEPENDS ${out_files}) + +file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/bindings/python/fdb) +set(options_file ${PROJECT_BINARY_DIR}/bindings/python/fdb/fdboptions.py) +add_custom_command(OUTPUT ${options_file} ${options_file}c + COMMAND ${MONO_EXECUTABLE} ${VEXILLOGRAPHER_EXE} ${CMAKE_SOURCE_DIR}/fdbclient/vexillographer/fdb.options python ${options_file} + COMMAND python -m py_compile ${options_file} + DEPENDS ${PROJECT_SOURCE_DIR}/fdbclient/vexillographer/fdb.options vexillographer + COMMENT "Generate Python options") +add_custom_target(fdb_python_options DEPENDS + ${options_file} + ${PROJECT_SOURCE_DIR}/fdbclient/vexillographer/fdb.options + vexillographer) + +add_dependencies(python_binding fdb_python_options) + +set(out_files "${out_files};${options_file};${options_file}c") +install(FILES ${out_files} DESTINATION lib64/python2.6/site-packages/fdb COMPONENT clients)