diff --git a/build.sh b/build.sh index e1d6df016dd..48182ca1a6f 100755 --- a/build.sh +++ b/build.sh @@ -148,10 +148,8 @@ function buildLibCudfJniInDocker { -DCUDF_CPP_BUILD_DIR=$workspaceRepoDir/java/target/libcudf-cmake-build \ -DCUDA_STATIC_RUNTIME=ON \ -DPER_THREAD_DEFAULT_STREAM=ON \ - -DRMM_LOGGING_LEVEL=OFF \ -DUSE_GDS=ON \ -DGPU_ARCHS=${CUDF_CMAKE_CUDA_ARCHITECTURES} \ - -DCUDF_JNI_ARROW_STATIC=ON \ -DCUDF_JNI_LIBCUDF_STATIC=ON \ -Dtest=*,!CuFileTest" } diff --git a/java/README.md b/java/README.md index afd69df11ef..ea1b9e3e4e4 100644 --- a/java/README.md +++ b/java/README.md @@ -75,16 +75,6 @@ If you decide to build without Docker and the build script, examining the cmake settings in the [Java CI build script](ci/build-in-docker.sh) can be helpful if you are encountering difficulties during the build. -## Dynamically Linking Arrow - -Since libcudf builds by default with a dynamically linked Arrow dependency, it may be -desirable to build the Java bindings without requiring a statically-linked Arrow to avoid -rebuilding an already built libcudf.so. To do so, specify the additional command-line flag -`-DCUDF_JNI_ARROW_STATIC=OFF` when building the Java bindings with Maven. However this will -result in a jar that requires the correct Arrow version to be available in the runtime -environment, and therefore is not recommended unless you are only performing local testing -within the libcudf build environment. - ## Statically Linking the CUDA Runtime If you use the default cmake options libcudart will be dynamically linked to libcudf and libcudfjni. diff --git a/java/ci/build-in-docker.sh b/java/ci/build-in-docker.sh index d6a193fbeaf..d21010ba30e 100755 --- a/java/ci/build-in-docker.sh +++ b/java/ci/build-in-docker.sh @@ -78,7 +78,6 @@ BUILD_ARG="-Dmaven.repo.local=\"$WORKSPACE/.m2\"\ -DPER_THREAD_DEFAULT_STREAM=$ENABLE_PTDS\ -DCUDA_STATIC_RUNTIME=$ENABLE_CUDA_STATIC_RUNTIME\ -DCUDF_JNI_LIBCUDF_STATIC=ON\ - -DRMM_LOGGING_LEVEL=$RMM_LOGGING_LEVEL\ -DUSE_GDS=$ENABLE_GDS -Dtest=*,!CuFileTest" if [ "$SIGN_FILE" == true ]; then diff --git a/java/pom.xml b/java/pom.xml index e2efed19636..50b6ca59440 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -165,10 +165,8 @@ OFF OFF OFF - INFO OFF ALL - ON OFF ${project.build.directory}/cmake-build 1.7.30 @@ -386,13 +384,11 @@ - - diff --git a/java/src/main/native/CMakeLists.txt b/java/src/main/native/CMakeLists.txt index 9851102d011..3a375412bbd 100755 --- a/java/src/main/native/CMakeLists.txt +++ b/java/src/main/native/CMakeLists.txt @@ -41,7 +41,6 @@ option(BUILD_TESTS "Configure CMake to build tests" ON) option(PER_THREAD_DEFAULT_STREAM "Build with per-thread default stream" OFF) option(CUDA_STATIC_RUNTIME "Statically link the CUDA runtime" OFF) option(USE_GDS "Build with GPUDirect Storage (GDS)/cuFile support" OFF) -option(CUDF_JNI_ARROW_STATIC "Statically link Arrow" ON) option(CUDF_JNI_LIBCUDF_STATIC "Link with libcudf.a" OFF) message(VERBOSE "CUDF_JNI: Build with NVTX support: ${USE_NVTX}") @@ -50,7 +49,6 @@ message(VERBOSE "CUDF_JNI: Configure CMake to build tests: ${BUILD_TESTS}") message(VERBOSE "CUDF_JNI: Build with per-thread default stream: ${PER_THREAD_DEFAULT_STREAM}") message(VERBOSE "CUDF_JNI: Statically link the CUDA runtime: ${CUDA_STATIC_RUNTIME}") message(VERBOSE "CUDF_JNI: Build with GPUDirect Storage support: ${USE_GDS}") -message(VERBOSE "CUDF_JNI: Build with static Arrow library: ${CUDF_JNI_ARROW_STATIC}") message(VERBOSE "CUDF_JNI: Link with libcudf statically: ${CUDF_JNI_LIBCUDF_STATIC}") set(CUDF_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../../../cpp") @@ -93,67 +91,16 @@ endif() rapids_cmake_build_type("Release") # ################################################################################################## -# * Thrust/CUB -# ------------------------------------------------------------------------------------ -include(${CUDF_SOURCE_DIR}/cmake/thirdparty/get_thrust.cmake) +# * nvcomp------------------------------------------------------------------------------------------ -# ################################################################################################## -# * CUDF ------------------------------------------------------------------------------------------ - -set(CUDF_INCLUDE "${PROJECT_SOURCE_DIR}/../../../../cpp/include" - "${PROJECT_SOURCE_DIR}/../../../../cpp/src/" -) - -set(CUDF_LIB_HINTS HINTS "$ENV{CUDF_ROOT}" "$ENV{CUDF_ROOT}/lib" "$ENV{CONDA_PREFIX}/lib" - "${CUDF_CPP_BUILD_DIR}" -) - -find_library(CUDF_LIB "cudf" REQUIRED HINTS ${CUDF_LIB_HINTS}) - -# ################################################################################################## -# * ZLIB ------------------------------------------------------------------------------------------ - -# find zlib -rapids_find_package(ZLIB REQUIRED) +set(nvcomp_DIR "${CUDF_CPP_BUILD_DIR}/_deps/nvcomp-build") +rapids_find_package(nvcomp REQUIRED) # ################################################################################################## -# * RMM ------------------------------------------------------------------------------------------- +# * CUDF ------------------------------------------------------------------------------------------ -include(${CUDF_SOURCE_DIR}/cmake/thirdparty/get_rmm.cmake) - -# ################################################################################################## -# * ARROW ----------------------------------------------------------------------------------------- - -find_path(ARROW_INCLUDE "arrow" HINTS "$ENV{ARROW_ROOT}/include" - "${CUDF_CPP_BUILD_DIR}/_deps/arrow-src/cpp/src" -) - -message(STATUS "ARROW: ARROW_INCLUDE set to ${ARROW_INCLUDE}") - -if(CUDF_JNI_ARROW_STATIC) - # Find static version of Arrow lib - set(CUDF_JNI_ARROW_LIBNAME "libarrow.a") -else() - set(CUDF_JNI_ARROW_LIBNAME "arrow") -endif() - -find_library( - ARROW_LIBRARY ${CUDF_JNI_ARROW_LIBNAME} REQUIRED - HINTS "$ENV{ARROW_ROOT}/lib" "${CUDF_CPP_BUILD_DIR}/_deps/arrow-build/release" - "${CUDF_CPP_BUILD_DIR}/_deps/arrow-build/debug" -) - -if(NOT ARROW_LIBRARY) - if(CUDF_JNI_ARROW_STATIC) - message( - FATAL_ERROR "Arrow static library not found. Was libcudf built with CUDF_USE_ARROW_STATIC=ON?" - ) - else() - message(FATAL_ERROR "Arrow dynamic library not found.") - endif() -else() - message(STATUS "ARROW: ARROW_LIBRARY set to ${ARROW_LIBRARY}") -endif() +set(cudf_ROOT "${CUDF_CPP_BUILD_DIR}") +rapids_find_package(cudf REQUIRED) # ################################################################################################## # * find JNI ------------------------------------------------------------------------------------- @@ -164,27 +111,6 @@ else() message(FATAL_ERROR "JDK with JNI not found, please check your settings.") endif() -# ################################################################################################## -# * nvcomp ---------------------------------------------------------------------------------------- - -find_path(NVCOMP_INCLUDE "nvcomp" HINTS "${CUDF_CPP_BUILD_DIR}/_deps/nvcomp-src/include" - "$ENV{CONDA_PREFIX}/include" -) - -message(STATUS "NVCOMP: NVCOMP_INCLUDE set to ${NVCOMP_INCLUDE}") - -set(CUDF_JNI_NVCOMP_LIBNAME "libnvcomp.a") -find_library( - NVCOMP_LIBRARY ${CUDF_JNI_NVCOMP_LIBNAME} REQUIRED HINTS "${CUDF_CPP_BUILD_DIR}/lib" - "$ENV{CONDA_PREFIX}/lib" -) - -if(NOT NVCOMP_LIBRARY) - message(FATAL_ERROR "nvcomp static library not found.") -else() - message(STATUS "NVCOMP: NVCOMP_LIBRARY set to ${NVCOMP_LIBRARY}") -endif() - # ################################################################################################## # * GDS/cufile ------------------------------------------------------------------------------------ @@ -238,17 +164,8 @@ endif() # * include paths --------------------------------------------------------------------------------- target_include_directories( - cudfjni - PUBLIC cudf::Thrust - "${LIBCUDACXX_INCLUDE}" - "${CUDAToolkit_INCLUDE_DIRS}" - "${NVCOMP_INCLUDE}" - "${CMAKE_BINARY_DIR}/include" - "${CMAKE_SOURCE_DIR}/include" - "${CMAKE_SOURCE_DIR}/src" - "${JNI_INCLUDE_DIRS}" - "${CUDF_INCLUDE}" - "${ARROW_INCLUDE}" + cudfjni PUBLIC "${CMAKE_BINARY_DIR}/include" "${CMAKE_SOURCE_DIR}/include" + "${CMAKE_SOURCE_DIR}/src" "${JNI_INCLUDE_DIRS}" ) # ################################################################################################## @@ -291,39 +208,24 @@ if(USE_GDS) POSITION_INDEPENDENT_CODE ON INTERFACE_POSITION_INDEPENDENT_CODE ON ) - target_include_directories( - cufilejni - PUBLIC "${LIBCUDACXX_INCLUDE}" "${CUDF_INCLUDE}" - PRIVATE "${cuFile_INCLUDE_DIRS}" - ) - target_link_libraries(cufilejni PRIVATE cudfjni rmm::rmm "${cuFile_LIBRARIES}") + target_include_directories(cufilejni PRIVATE "${cuFile_INCLUDE_DIRS}") + target_link_libraries(cufilejni PRIVATE cudfjni "${cuFile_LIBRARIES}") endif() -# ################################################################################################## -# * rmm logging level ----------------------------------------------------------------------------- - -set(RMM_LOGGING_LEVEL - "INFO" - CACHE STRING "Choose the logging level." -) -# Set the possible values of build type for cmake-gui -set_property( - CACHE RMM_LOGGING_LEVEL PROPERTY STRINGS "TRACE" "DEBUG" "INFO" "WARN" "ERROR" "CRITICAL" "OFF" -) -message(STATUS "RMM_LOGGING_LEVEL = '${RMM_LOGGING_LEVEL}'.") - -target_compile_definitions(cudfjni PUBLIC SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_${RMM_LOGGING_LEVEL}) - # ################################################################################################## # * link libraries -------------------------------------------------------------------------------- -set(CUDF_LINK ${CUDF_LIB}) +set(CUDF_LINK PUBLIC cudf::cudf) if(CUDF_JNI_LIBCUDF_STATIC) - set(CUDF_LINK -Wl,--whole-archive ${CUDF_LIB} -Wl,--no-whole-archive ZLIB::ZLIB) + # Whole-link libcudf.a into the shared library but not its dependencies + set(CUDF_LINK PRIVATE -Wl,--whole-archive cudf::cudf -Wl,--no-whole-archive PUBLIC cudf::cudf) endif() +# When nvcomp is installed we need to use nvcomp::nvcomp but from the cudf build directory it will +# just be nvcomp. target_link_libraries( - cudfjni PRIVATE ${CUDF_LINK} ${NVCOMP_LIBRARY} ${ARROW_LIBRARY} rmm::rmm CUDA::cuda_driver + cudfjni ${CUDF_LINK} PRIVATE $ + $ ) # ##################################################################################################