diff --git a/hpvm/CMakeLists.txt b/hpvm/CMakeLists.txt index 431c042b634af412399ea2a8902592cfe6e37d88..fcfaf264a64d52bfe13e0023fe92ad12b7cf2016 100644 --- a/hpvm/CMakeLists.txt +++ b/hpvm/CMakeLists.txt @@ -8,10 +8,9 @@ message(STATUS "CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}") # find_package will use the auxillary cmake/Find*.cmake we provide list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) find_package(CUDNN 7 EXACT REQUIRED) # CUDNN_INCLUDE_PATH, CUDNN_LIBRARY_DIR and CUDNN::cudnn +find_package(OpenCL REQUIRED) # Defines ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARY} include_directories(./include/) -# find_package will use the auxillary cmake/Find*.cmake we provide -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) # Generate TENSOR_RT_PREFIX into config.h set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) diff --git a/hpvm/projects/hpvm-rt/CMakeLists.txt b/hpvm/projects/hpvm-rt/CMakeLists.txt index 6efd8d3d0a9d86236adc87657fb68b782f3daaa0..ad78c35828cf9be9f66f23301fbe4d207222d4d1 100644 --- a/hpvm/projects/hpvm-rt/CMakeLists.txt +++ b/hpvm/projects/hpvm-rt/CMakeLists.txt @@ -3,8 +3,6 @@ add_definitions(-DNUM_CORES=8) SET(CMAKE_C_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang) SET(CMAKE_CXX_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang++) SET(CMAKE_CXX_STANDARD 11) -# Defines ${OpenCL_INCLUDE_DIRS} and ${OpenCL_LIBRARY} if found -find_package(OpenCL REQUIRED) # This puts libhpvm-rt.a in lib/ which we don't care about # we want ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/hpvm-rt.dir/hpvm-rt.cpp.o diff --git a/hpvm/tools/py-approxhpvm/CMakeLists.txt b/hpvm/tools/py-approxhpvm/CMakeLists.txt index 4d48fe6be9e539cbb9f3ad609a44331d0880bda7..f9d9d6ec60825fc1e858a28e0598189fd6b1cda5 100644 --- a/hpvm/tools/py-approxhpvm/CMakeLists.txt +++ b/hpvm/tools/py-approxhpvm/CMakeLists.txt @@ -3,16 +3,20 @@ # main.py.in (to become approxhpvm.py) requires the following variables: # LLVM_PROJECT_DIR, LLVM_BUILD_DIR # TRT_PATH, TRT_INCLUDE_DIRS, TRT_LINK_DIRS, TRT_LINK_LIBS +# DIRECT_LINK_LIBS # AVAILABLE_PASSES, HPVM_RT_PATH set(LLVM_PROJECT_DIR ${CMAKE_SOURCE_DIR}) set(LLVM_BUILD_DIR ${CMAKE_BINARY_DIR}) -set(TRT_PATH "$<TARGET_FILE:tensor_runtime>") get_target_property(TRT_INCLUDE_DIRS tensor_runtime INCLUDE_DIRECTORIES) get_target_property(TRT_LINK_DIRS tensor_runtime TRT_LINK_DIRS) get_target_property(TRT_LINK_LIBS tensor_runtime TRT_LINK_LIBS) +# This is defined globally. We need to manually link to this +# because OpenCL functions are injected by HPVM Passes. +set(DIRECT_LINK_LIBS ${OpenCL_LIBRARY} "$<TARGET_FILE:tensor_runtime>") + # The hpvm-rt runtime # This has to be explicitly set as hpvm-rt.bc is created in a custom_target # and does not export its file location. diff --git a/hpvm/tools/py-approxhpvm/main.py.in b/hpvm/tools/py-approxhpvm/main.py.in index 7f5459d9e68f1e084c114dc1c39c0312726059d1..7b211911643c64d8bf2c34ef8a43e3ac98cdd88a 100644 --- a/hpvm/tools/py-approxhpvm/main.py.in +++ b/hpvm/tools/py-approxhpvm/main.py.in @@ -10,10 +10,10 @@ HPVM_PROJECT_DIR = Path("@LLVM_PROJECT_DIR@") / "tools/hpvm" LLVM_BUILD_BIN = Path("@LLVM_BUILD_DIR@") / "bin" # Directories to include -TRT_PATH = Path("@TRT_PATH@") TRT_INCLUDE_DIRS = "@TRT_INCLUDE_DIRS@".split(";") TRT_LINK_DIRS = [Path(s) for s in "@TRT_LINK_DIRS@".split(";")] TRT_LINK_LIBS = "@TRT_LINK_LIBS@".split(";") +DIRECT_LINK_LIBS = "@DIRECT_LINK_LIBS@".split(";") AVAILABLE_PASSES = "@AVAILABLE_PASSES@".split(";") HPVM_RT_PATH = "@HPVM_RT_PATH@" @@ -117,13 +117,21 @@ def link_binary(src_file: PathLike, target_file: PathLike) -> List[str]: match = re.match(r"lib(.*)\.so", libname) return libname if match is None else match.group(1) + link_dirs, link_libnames = [], [] + for lib in DIRECT_LINK_LIBS: + lib = Path(lib) + link_dirs.append(lib.parent) + link_libnames.append(drop_suffix(lib.name)) + link_dirs += TRT_LINK_DIRS + link_libnames += TRT_LINK_LIBS + linker_dir_flags = [] - for path in TRT_LINK_DIRS: + for path in link_dirs: linker_dir_flags.extend([f"-L{path}", f"-Wl,-rpath={path}"]) - linker_lib_flags = [f"-l{drop_suffix(lib)}" for lib in TRT_LINK_LIBS] + linker_lib_flags = [f"-l{drop_suffix(lib)}" for lib in link_libnames] return [ - str(LLVM_BUILD_BIN / "clang++"), str(src_file), str(TRT_PATH), "-o", str(target_file), - *linker_dir_flags, *linker_lib_flags + str(LLVM_BUILD_BIN / "clang++"), str(src_file), + "-o", str(target_file), *linker_dir_flags, *linker_lib_flags ]