diff --git a/.github/workflows/Java.yml b/.github/workflows/Java.yml index c0da752d..7aa23a7a 100644 --- a/.github/workflows/Java.yml +++ b/.github/workflows/Java.yml @@ -164,6 +164,9 @@ jobs: if: ${{ inputs.skip_tests != 'true' }} shell: bash run: make test + - name: See if this actually universal + shell: bash + run: lipo -archs build/release/libduckdb_java.so_osx_universal | grep "x86_64 arm64" - name: Deploy shell: bash env: diff --git a/CMakeLists.txt b/CMakeLists.txt index 9722ef66..e645ffc5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,8 @@ set(DUCKDB_SRC_FILES src/duckdb/ub_src_catalog.cpp src/duckdb/ub_src_catalog_cat set(CMAKE_JAVA_COMPILE_FLAGS -source 1.8 -target 1.8 -encoding utf-8) +add_definitions(-DDUCKDB_BUILD_LIBRARY) + if(MSVC) add_definitions(/bigobj) else() @@ -36,16 +38,6 @@ else() endif() -add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver - GENERATE_NATIVE_HEADERS duckdb-native) -add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) - -add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES}) -target_compile_options(duckdb_java PRIVATE -fexceptions) -target_link_libraries(duckdb_java duckdb-native ) - - - set(OS_NAME "unknown") set(OS_ARCH "amd64") @@ -59,6 +51,7 @@ endif() if(APPLE) set(OS_NAME "osx") set(OS_ARCH "universal") + SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) endif() if(WIN32) set(OS_NAME "windows") @@ -71,6 +64,16 @@ if(OVERRIDE_JDBC_OS_ARCH) set(OS_ARCH ${OVERRIDE_JDBC_OS_ARCH}) endif() + +add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver + GENERATE_NATIVE_HEADERS duckdb-native) +add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) + +add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES}) +target_compile_options(duckdb_java PRIVATE -fexceptions) +target_link_libraries(duckdb_java duckdb-native ) + + string(JOIN "_" LIB_SUFFIX ".so" ${OS_NAME} ${OS_ARCH}) set_target_properties(duckdb_java PROPERTIES SUFFIX ${LIB_SUFFIX}) set_target_properties(duckdb_java PROPERTIES PREFIX "lib") diff --git a/CMakeLists.txt.in b/CMakeLists.txt.in index 3e2db8c0..6244f626 100644 --- a/CMakeLists.txt.in +++ b/CMakeLists.txt.in @@ -28,6 +28,8 @@ set(DUCKDB_SRC_FILES ${SOURCE_FILES}) set(CMAKE_JAVA_COMPILE_FLAGS -source 1.8 -target 1.8 -encoding utf-8) +add_definitions(-DDUCKDB_BUILD_LIBRARY) + if(MSVC) add_definitions(/bigobj) else() @@ -36,16 +38,6 @@ else() endif() -add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver - GENERATE_NATIVE_HEADERS duckdb-native) -add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) - -add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES}) -target_compile_options(duckdb_java PRIVATE -fexceptions) -target_link_libraries(duckdb_java duckdb-native ${LIBRARY_FILES}) - - - set(OS_NAME "unknown") set(OS_ARCH "amd64") @@ -58,7 +50,8 @@ endif() if(APPLE) set(OS_NAME "osx") - set(OS_ARCH "universal") + set(OS_ARCH "universal") + SET(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "Build architectures for Mac OS X" FORCE) endif() if(WIN32) set(OS_NAME "windows") @@ -71,11 +64,18 @@ if(OVERRIDE_JDBC_OS_ARCH) set(OS_ARCH ${OVERRIDE_JDBC_OS_ARCH}) endif() +add_jar(duckdb_jdbc ${JAVA_SRC_FILES} META-INF/services/java.sql.Driver + GENERATE_NATIVE_HEADERS duckdb-native) +add_jar(duckdb_jdbc_tests ${JAVA_TEST_FILES} INCLUDE_JARS duckdb_jdbc) + +add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES}) +target_compile_options(duckdb_java PRIVATE -fexceptions) +target_link_libraries(duckdb_java duckdb-native ${LIBRARY_FILES}) + string(JOIN "_" LIB_SUFFIX ".so" ${OS_NAME} ${OS_ARCH}) set_target_properties(duckdb_java PROPERTIES SUFFIX ${LIB_SUFFIX}) set_target_properties(duckdb_java PROPERTIES PREFIX "lib") - add_custom_command( OUTPUT dummy_jdbc_target DEPENDS duckdb_java duckdb_jdbc duckdb_jdbc_tests