diff --git a/install_deps.cmake b/install_deps.cmake index bed85269c4..a10932b82f 100755 --- a/install_deps.cmake +++ b/install_deps.cmake @@ -1,5 +1,13 @@ #!/usr/bin/cmake -P +function(cget_exec) + execute_process(${ARGN} RESULT_VARIABLE RESULT) + if(NOT RESULT EQUAL 0) + message("${RESULT}") + message(FATAL_ERROR "Process failed: ${ARGN}") + endif() +endfunction() + set(ARGS) foreach(i RANGE 3 ${CMAKE_ARGC}) list(APPEND ARGS ${CMAKE_ARGV${i}}) @@ -34,73 +42,79 @@ endif() get_filename_component(PREFIX ${_PREFIX} ABSOLUTE) -find_package(CMakeGet QUIET PATHS ${PREFIX}) - -if(NOT CMakeGet_FOUND) - set(FILENAME ${PREFIX}/tmp/cmake-get-install.cmake) - file(DOWNLOAD https://raw.githubusercontent.com/pfultz2/cmake-get/master/install.cmake ${FILENAME} STATUS RESULT_LIST) - list(GET RESULT_LIST 0 RESULT) - list(GET RESULT_LIST 1 RESULT_MESSAGE) - if(NOT RESULT EQUAL 0) - message(FATAL_ERROR "Download for install.cmake failed: ${RESULT_MESSAGE}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} -P ${FILENAME} ${PREFIX}) - file(REMOVE ${FILENAME}) - find_package(CMakeGet REQUIRED PATHS ${PREFIX}) +find_program(VIRTUALENV_PYTHON_EXE python3) +if(NOT VIRTUALENV_PYTHON_EXE) + find_program(VIRTUALENV_PYTHON_EXE python) endif() +function(virtualenv_create) + cget_exec( + COMMAND ${VIRTUALENV_PYTHON_EXE} -m venv ${PREFIX} + ) +endfunction() + +function(virtualenv_install) + virtualenv_create() + # TODO: Check result + message("${PREFIX}/pip install ${ARGN}") + cget_exec( + COMMAND ${PREFIX}/bin/python ${PREFIX}/bin/pip install ${ARGN} + ) +endfunction() + +virtualenv_install(cget) + # Set compiler to hcc if not set if(NOT DEFINED ENV{CXX} AND NOT DEFINED CMAKE_CXX_COMPILER AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) - find_program(HCC hcc + find_program(CLANGXX clang++ PATHS - /opt/rocm/hcc + /opt/rocm/llvm /opt/rocm PATH_SUFFIXES bin ) - if(HCC) - set(ENV{CXX} ${HCC}) + if(CLANGXX) + set(ENV{CXX} ${CLANGXX}) else() - message(STATUS "Cannot find hcc") - find_program(CLANGXX clang++ - PATHS - /opt/rocm/llvm - /opt/rocm - PATH_SUFFIXES - bin - ) - if(CLANGXX) - set(ENV{CXX} ${CLANGXX}) - else() - message(FATAL_ERROR "Cannot find clang++") - endif() + message(FATAL_ERROR "Cannot find clang++") endif() endif() if(NOT DEFINED ENV{CC} AND NOT DEFINED CMAKE_C_COMPILER AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) find_program(CLANGC clang - PATHS - /opt/rocm/llvm - /opt/rocm - PATH_SUFFIXES - bin - ) - if(CLANGC) - set(ENV{CC} ${CLANGC}) - else() + PATHS + /opt/rocm/llvm + /opt/rocm + PATH_SUFFIXES + bin + ) + if(CLANGC) + set(ENV{CC} ${CLANGC}) + else() message(STATUS "Cannot find clang to set to CC") - endif() + endif() endif() -cmake_get(pfultz2/rocm-recipes PREFIX ${PREFIX} CMAKE_ARGS ${PARSE_UNPARSED_ARGUMENTS}) +function(cget) + cget_exec(COMMAND ${PREFIX}/bin/cget -p ${PREFIX} ${ARGN}) +endfunction() + +# Clean directory +# Skip clean since relative symlinks are incorrectly removed +# cget(clean -y) +set(TOOLCHAIN_FLAG) +if(DEFINED CMAKE_TOOLCHAIN_FILE) + set(TOOLCHAIN_FLAG -t ${CMAKE_TOOLCHAIN_FILE}) +endif() +# Initialize directory +cget(init ${TOOLCHAIN_FLAG} -DCMAKE_INSTALL_RPATH=${PREFIX}/lib ${PARSE_UNPARSED_ARGUMENTS}) + +# Install dependencies +cget(install -U pfultz2/rocm-recipes) if(PARSE_--minimum) - message(STATUS "MIOpen minimum dependency install.") - set(REQFILE ${CMAKE_CURRENT_LIST_DIR}/min-requirements.txt) + cget(install -U -f min-requirements.txt) else() - message(STATUS "MIOpen normal dependency install.") - set(REQFILE ${CMAKE_CURRENT_LIST_DIR}/requirements.txt) + cget(install -U -f requirements.txt) endif() - -cmake_get_from(${REQFILE} PREFIX ${PREFIX} CMAKE_ARGS -DCMAKE_INSTALL_RPATH=${PREFIX}/lib ${PARSE_UNPARSED_ARGUMENTS})