* [R-package] Remove dependency on gendef for Visual Studio builds (fixes #5608) * clarify docs * removed debugging print statement * Make R CMake install more robust * Fix doc format; add ToC * Update build.rst * Fix AppVeyor Co-authored-by: Hyunsu Cho <chohyu01@cs.washington.edu>
This commit is contained in:
34
cmake/RPackageInstall.cmake.in
Normal file
34
cmake/RPackageInstall.cmake.in
Normal file
@@ -0,0 +1,34 @@
|
||||
# Commands to install the R package as a CMake install target
|
||||
|
||||
function(check_call)
|
||||
set(cmd COMMAND)
|
||||
cmake_parse_arguments(
|
||||
PARSE_ARGV 0
|
||||
CALL_ARG "" "" "${cmd}"
|
||||
)
|
||||
string(REPLACE ";" " " commands "${CALL_ARG_COMMAND}")
|
||||
message("Command: ${commands}")
|
||||
execute_process(COMMAND ${CALL_ARG_COMMAND}
|
||||
OUTPUT_VARIABLE _out
|
||||
ERROR_VARIABLE _err
|
||||
RESULT_VARIABLE _res)
|
||||
if(NOT "${_res}" EQUAL "0")
|
||||
message(FATAL_ERROR "out: ${_out}, err: ${_err}, res: ${_res}")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Important paths
|
||||
set(build_dir "@build_dir@")
|
||||
set(LIBR_EXECUTABLE "@LIBR_EXECUTABLE@")
|
||||
|
||||
# Back up cmake_install.cmake
|
||||
file(WRITE "${build_dir}/R-package/src/Makevars" "all:")
|
||||
file(WRITE "${build_dir}/R-package/src/Makevars.win" "all:")
|
||||
|
||||
# Install dependencies
|
||||
set(XGB_DEPS_SCRIPT
|
||||
"deps = setdiff(c('data.table', 'magrittr', 'stringi'), rownames(installed.packages())); if(length(deps)>0) install.packages(deps, repo = 'https://cloud.r-project.org/')")
|
||||
check_call(COMMAND "${LIBR_EXECUTABLE}" -q -e "${XGB_DEPS_SCRIPT}")
|
||||
|
||||
# Install the XGBoost R package
|
||||
check_call(COMMAND "${LIBR_EXECUTABLE}" CMD INSTALL --no-multiarch --build "${build_dir}/R-package")
|
||||
16
cmake/RPackageInstallTargetSetup.cmake
Normal file
16
cmake/RPackageInstallTargetSetup.cmake
Normal file
@@ -0,0 +1,16 @@
|
||||
# Assembles the R-package files in build_dir;
|
||||
# if necessary, installs the main R package dependencies;
|
||||
# runs R CMD INSTALL.
|
||||
function(setup_rpackage_install_target rlib_target build_dir)
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/RPackageInstall.cmake.in ${PROJECT_BINARY_DIR}/RPackageInstall.cmake @ONLY)
|
||||
install(
|
||||
DIRECTORY "${xgboost_SOURCE_DIR}/R-package"
|
||||
DESTINATION "${build_dir}"
|
||||
REGEX "src/*" EXCLUDE
|
||||
REGEX "R-package/configure" EXCLUDE
|
||||
)
|
||||
install(TARGETS ${rlib_target}
|
||||
LIBRARY DESTINATION "${build_dir}/R-package/src/"
|
||||
RUNTIME DESTINATION "${build_dir}/R-package/src/")
|
||||
install(SCRIPT ${PROJECT_BINARY_DIR}/RPackageInstall.cmake)
|
||||
endfunction()
|
||||
@@ -110,38 +110,6 @@ function(format_gencode_flags flags out)
|
||||
set(${out} "${${out}}" PARENT_SCOPE)
|
||||
endfunction(format_gencode_flags flags)
|
||||
|
||||
# Assembles the R-package files in build_dir;
|
||||
# if necessary, installs the main R package dependencies;
|
||||
# runs R CMD INSTALL.
|
||||
function(setup_rpackage_install_target rlib_target build_dir)
|
||||
# backup cmake_install.cmake
|
||||
install(CODE "file(COPY \"${build_dir}/R-package/cmake_install.cmake\"
|
||||
DESTINATION \"${build_dir}/bak\")")
|
||||
|
||||
install(CODE "file(REMOVE_RECURSE \"${build_dir}/R-package\")")
|
||||
install(
|
||||
DIRECTORY "${xgboost_SOURCE_DIR}/R-package"
|
||||
DESTINATION "${build_dir}"
|
||||
REGEX "src/*" EXCLUDE
|
||||
REGEX "R-package/configure" EXCLUDE
|
||||
)
|
||||
install(TARGETS ${rlib_target}
|
||||
LIBRARY DESTINATION "${build_dir}/R-package/src/"
|
||||
RUNTIME DESTINATION "${build_dir}/R-package/src/")
|
||||
install(CODE "file(WRITE \"${build_dir}/R-package/src/Makevars\" \"all:\")")
|
||||
install(CODE "file(WRITE \"${build_dir}/R-package/src/Makevars.win\" \"all:\")")
|
||||
set(XGB_DEPS_SCRIPT
|
||||
"deps = setdiff(c('data.table', 'magrittr', 'stringi'), rownames(installed.packages()));\
|
||||
if(length(deps)>0) install.packages(deps, repo = 'https://cloud.r-project.org/')")
|
||||
install(CODE "execute_process(COMMAND \"${LIBR_EXECUTABLE}\" \"-q\" \"-e\" \"${XGB_DEPS_SCRIPT}\")")
|
||||
install(CODE "execute_process(COMMAND \"${LIBR_EXECUTABLE}\" CMD INSTALL\
|
||||
\"--no-multiarch\" \"--build\" \"${build_dir}/R-package\")")
|
||||
|
||||
# restore cmake_install.cmake
|
||||
install(CODE "file(RENAME \"${build_dir}/bak/cmake_install.cmake\"
|
||||
\"${build_dir}/R-package/cmake_install.cmake\")")
|
||||
endfunction(setup_rpackage_install_target)
|
||||
|
||||
macro(enable_nvtx target)
|
||||
find_package(NVTX REQUIRED)
|
||||
target_include_directories(${target} PRIVATE "${NVTX_INCLUDE_DIR}")
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
# Windows users might want to change this to their R version:
|
||||
if(NOT R_VERSION)
|
||||
set(R_VERSION "3.4.1")
|
||||
set(R_VERSION "4.0.0")
|
||||
endif()
|
||||
if(NOT R_ARCH)
|
||||
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
|
||||
@@ -43,16 +43,26 @@ function(create_rlib_for_msvc)
|
||||
if(NOT EXISTS "${LIBR_LIB_DIR}")
|
||||
message(FATAL_ERROR "LIBR_LIB_DIR was not set!")
|
||||
endif()
|
||||
find_program(GENDEF_EXE gendef)
|
||||
find_program(DLLTOOL_EXE dlltool)
|
||||
if(NOT GENDEF_EXE OR NOT DLLTOOL_EXE)
|
||||
message(FATAL_ERROR "\nEither gendef.exe or dlltool.exe not found!\
|
||||
if(NOT DLLTOOL_EXE)
|
||||
message(FATAL_ERROR "\ndlltool.exe not found!\
|
||||
\nDo you have Rtools installed with its MinGW's bin/ in PATH?")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# extract symbols from R.dll into R.def and R.lib import library
|
||||
execute_process(COMMAND ${GENDEF_EXE}
|
||||
"-" "${LIBR_LIB_DIR}/R.dll"
|
||||
OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/R.def")
|
||||
get_filename_component(
|
||||
LIBR_RSCRIPT_EXECUTABLE_DIR
|
||||
${LIBR_EXECUTABLE}
|
||||
DIRECTORY
|
||||
)
|
||||
set(LIBR_RSCRIPT_EXECUTABLE "${LIBR_RSCRIPT_EXECUTABLE_DIR}/Rscript")
|
||||
|
||||
execute_process(
|
||||
COMMAND ${LIBR_RSCRIPT_EXECUTABLE}
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/../../R-package/inst/make-r-def.R"
|
||||
"${LIBR_LIB_DIR}/R.dll" "${CMAKE_CURRENT_BINARY_DIR}/R.def"
|
||||
)
|
||||
|
||||
execute_process(COMMAND ${DLLTOOL_EXE}
|
||||
"--input-def" "${CMAKE_CURRENT_BINARY_DIR}/R.def"
|
||||
"--output-lib" "${CMAKE_CURRENT_BINARY_DIR}/R.lib")
|
||||
|
||||
Reference in New Issue
Block a user