Skip to content
Snippets Groups Projects
Commit bd1a3361 authored by Yifan Zhao's avatar Yifan Zhao
Browse files

Fixed missing OpenCL link

parent c285ea1a
No related branches found
No related tags found
No related merge requests found
...@@ -8,10 +8,9 @@ message(STATUS "CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}") ...@@ -8,10 +8,9 @@ message(STATUS "CUDA Architecture: ${CMAKE_CUDA_ARCHITECTURES}")
# find_package will use the auxillary cmake/Find*.cmake we provide # find_package will use the auxillary cmake/Find*.cmake we provide
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 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(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/) 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 # Generate TENSOR_RT_PREFIX into config.h
set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) set(TENSOR_RT_PREFIX ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
......
...@@ -3,8 +3,6 @@ add_definitions(-DNUM_CORES=8) ...@@ -3,8 +3,6 @@ add_definitions(-DNUM_CORES=8)
SET(CMAKE_C_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang) SET(CMAKE_C_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang)
SET(CMAKE_CXX_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang++) SET(CMAKE_CXX_COMPILER ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/clang++)
SET(CMAKE_CXX_STANDARD 11) 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 # 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 # we want ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/hpvm-rt.dir/hpvm-rt.cpp.o
......
...@@ -3,16 +3,20 @@ ...@@ -3,16 +3,20 @@
# main.py.in (to become approxhpvm.py) requires the following variables: # main.py.in (to become approxhpvm.py) requires the following variables:
# LLVM_PROJECT_DIR, LLVM_BUILD_DIR # LLVM_PROJECT_DIR, LLVM_BUILD_DIR
# TRT_PATH, TRT_INCLUDE_DIRS, TRT_LINK_DIRS, TRT_LINK_LIBS # TRT_PATH, TRT_INCLUDE_DIRS, TRT_LINK_DIRS, TRT_LINK_LIBS
# DIRECT_LINK_LIBS
# AVAILABLE_PASSES, HPVM_RT_PATH # AVAILABLE_PASSES, HPVM_RT_PATH
set(LLVM_PROJECT_DIR ${CMAKE_SOURCE_DIR}) set(LLVM_PROJECT_DIR ${CMAKE_SOURCE_DIR})
set(LLVM_BUILD_DIR ${CMAKE_BINARY_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_INCLUDE_DIRS tensor_runtime INCLUDE_DIRECTORIES)
get_target_property(TRT_LINK_DIRS tensor_runtime TRT_LINK_DIRS) get_target_property(TRT_LINK_DIRS tensor_runtime TRT_LINK_DIRS)
get_target_property(TRT_LINK_LIBS tensor_runtime TRT_LINK_LIBS) 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 # The hpvm-rt runtime
# This has to be explicitly set as hpvm-rt.bc is created in a custom_target # This has to be explicitly set as hpvm-rt.bc is created in a custom_target
# and does not export its file location. # and does not export its file location.
......
...@@ -10,10 +10,10 @@ HPVM_PROJECT_DIR = Path("@LLVM_PROJECT_DIR@") / "tools/hpvm" ...@@ -10,10 +10,10 @@ HPVM_PROJECT_DIR = Path("@LLVM_PROJECT_DIR@") / "tools/hpvm"
LLVM_BUILD_BIN = Path("@LLVM_BUILD_DIR@") / "bin" LLVM_BUILD_BIN = Path("@LLVM_BUILD_DIR@") / "bin"
# Directories to include # Directories to include
TRT_PATH = Path("@TRT_PATH@")
TRT_INCLUDE_DIRS = "@TRT_INCLUDE_DIRS@".split(";") TRT_INCLUDE_DIRS = "@TRT_INCLUDE_DIRS@".split(";")
TRT_LINK_DIRS = [Path(s) for s in "@TRT_LINK_DIRS@".split(";")] TRT_LINK_DIRS = [Path(s) for s in "@TRT_LINK_DIRS@".split(";")]
TRT_LINK_LIBS = "@TRT_LINK_LIBS@".split(";") TRT_LINK_LIBS = "@TRT_LINK_LIBS@".split(";")
DIRECT_LINK_LIBS = "@DIRECT_LINK_LIBS@".split(";")
AVAILABLE_PASSES = "@AVAILABLE_PASSES@".split(";") AVAILABLE_PASSES = "@AVAILABLE_PASSES@".split(";")
HPVM_RT_PATH = "@HPVM_RT_PATH@" HPVM_RT_PATH = "@HPVM_RT_PATH@"
...@@ -117,13 +117,21 @@ def link_binary(src_file: PathLike, target_file: PathLike) -> List[str]: ...@@ -117,13 +117,21 @@ def link_binary(src_file: PathLike, target_file: PathLike) -> List[str]:
match = re.match(r"lib(.*)\.so", libname) match = re.match(r"lib(.*)\.so", libname)
return libname if match is None else match.group(1) 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 = [] 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_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 [ return [
str(LLVM_BUILD_BIN / "clang++"), str(src_file), str(TRT_PATH), "-o", str(target_file), str(LLVM_BUILD_BIN / "clang++"), str(src_file),
*linker_dir_flags, *linker_lib_flags "-o", str(target_file), *linker_dir_flags, *linker_lib_flags
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment