summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarol Herbst <kherbst@redhat.com>2018-04-10 23:36:11 +0200
committerAlexey Sotkin <alexey.sotkin@intel.com>2018-04-16 18:47:33 +0300
commit7b8cc990eff226d1e8085ba88fd0f4ae9e62c6b0 (patch)
tree90df94402cee0f853b68d805299392b082ba052c
parente367854522b56ff56a8793b11c52a7b6d5949435 (diff)
cmake: rework to be able to build outside LLVM
v2: convert to lower case
-rw-r--r--CMakeLists.txt71
-rw-r--r--LLVMSPIRVLib.pc.in12
-rw-r--r--lib/SPIRV/CMakeLists.txt31
-rw-r--r--test/CMakeLists.txt42
-rw-r--r--test/lit.cfg.py4
-rw-r--r--test/lit.site.cfg.py.in4
-rw-r--r--tools/llvm-spirv/CMakeLists.txt30
7 files changed, 145 insertions, 49 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ec95845..52ffc21 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,15 +1,66 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
+cmake_minimum_required(VERSION 3.3)
-# Name & Version
-PROJECT(LLVM_SPIRV
- VERSION 0.1.0.0
- LANGUAGES CXX)
+# check if we build inside llvm or not
+if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+ set(BUILD_EXTERNAL YES)
+ project(LLVM_SPIRV
+ VERSION
+ 0.1.0.0
+ LANGUAGES
+ CXX
+ )
+
+ set(CMAKE_CXX_STANDARD 11)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+ if(LLVM_INCLUDE_TESTS)
+ set(LLVM_TEST_COMPONENTS
+ llvm-as
+ llvm-dis
+ )
+ endif(LLVM_INCLUDE_TESTS)
+
+ find_package(LLVM 7.0.0 REQUIRED
+ COMPONENTS
+ Analysis
+ BitReader
+ BitWriter
+ Core
+ Support
+ TransformUtils
+ ${LLVM_TEST_COMPONENTS}
+ )
+ set(CMAKE_MODULE_PATH
+ ${CMAKE_MODULE_PATH}
+ ${LLVM_CMAKE_DIR}
+ )
+ include(AddLLVM)
+
+ message(STATUS "Found LLVM: ${LLVM_VERSION}")
+else(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+ set(BUILD_EXTERNAL NO)
+endif(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
-message(STATUS "LLVM-SPIRV found at ${CMAKE_CURRENT_SOURCE_DIR}")
set(LLVM_SPIRV_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include)
-set(LLVM_SPIRV_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
+add_subdirectory(lib/SPIRV)
+add_subdirectory(tools/llvm-spirv)
+if(LLVM_INCLUDE_TESTS)
+ add_subdirectory(test)
+endif(LLVM_INCLUDE_TESTS)
+
+install(
+ FILES
+ ${LLVM_SPIRV_INCLUDE_DIRS}/SPIRV.h
+ DESTINATION
+ include
+)
-SUBDIRS(lib/SPIRV tools/llvm-spirv test)
+get_target_property(LLVMSPIRVlib_LIBDIR LLVMSPIRVLib BINARY_DIR)
+configure_file(LLVMSPIRVLib.pc.in ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc @ONLY)
+install(
+ FILES
+ ${CMAKE_BINARY_DIR}/LLVMSPIRVLib.pc
+ DESTINATION
+ ${CMAKE_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}/pkgconfig
+)
diff --git a/LLVMSPIRVLib.pc.in b/LLVMSPIRVLib.pc.in
new file mode 100644
index 0000000..1c98802
--- /dev/null
+++ b/LLVMSPIRVLib.pc.in
@@ -0,0 +1,12 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=@LLVMSPIRVlib_LIBDIR@
+includedir=${prefix}/include
+
+Name: LLVMSPIRVLib
+Description: LLVM/SPIR-V bi-directional translator
+Version: @LLVM_SPIRV_VERSION@
+URL: https://github.com/KhronosGroup/SPIRV-LLVM-Translator
+
+Libs: -L${libdir} -lLLVMSPIRVLib
+Cflags: -I${includedir}
diff --git a/lib/SPIRV/CMakeLists.txt b/lib/SPIRV/CMakeLists.txt
index fc593b4..b4203b0 100644
--- a/lib/SPIRV/CMakeLists.txt
+++ b/lib/SPIRV/CMakeLists.txt
@@ -1,15 +1,9 @@
-include_directories(
- ${LLVM_SPIRV_INCLUDE_DIRS}
- ${CMAKE_CURRENT_SOURCE_DIR}/Mangler
- ${CMAKE_CURRENT_SOURCE_DIR}/libSPIRV
- ${CMAKE_CURRENT_SOURCE_DIR})
-
option(SPIRV_USE_LLVM_API "Enable usage of LLVM API for libSPIRV." ON)
-if ( SPIRV_USE_LLVM_API )
+if(SPIRV_USE_LLVM_API)
add_definitions(-D_SPIRV_LLVM_API)
-endif()
+endif(SPIRV_USE_LLVM_API)
-add_llvm_library(LLVMSPIRVLib
+add_llvm_library(LLVMSPIRVLib SHARED
libSPIRV/SPIRVBasicBlock.cpp
libSPIRV/SPIRVDebug.cpp
libSPIRV/SPIRVDecorate.cpp
@@ -31,8 +25,8 @@ add_llvm_library(LLVMSPIRVLib
OCLUtil.cpp
SPIRVLowerBool.cpp
SPIRVLowerConstExpr.cpp
- SPIRVLowerOCLBlocks.cpp
SPIRVLowerMemmove.cpp
+ SPIRVLowerOCLBlocks.cpp
SPIRVReader.cpp
SPIRVRegularizeLLVM.cpp
SPIRVToOCL20.cpp
@@ -40,6 +34,19 @@ add_llvm_library(LLVMSPIRVLib
SPIRVWriter.cpp
SPIRVWriterPass.cpp
TransOCLMD.cpp
- )
+ LINK_COMPONENTS
+ Analysis
+ BitWriter
+ Core
+ Support
+ TransformUtils
+)
-add_dependencies(LLVMSPIRVLib intrinsics_gen)
+target_include_directories(LLVMSPIRVLib
+ PRIVATE
+ ${LLVM_INCLUDE_DIR}
+ ${LLVM_SPIRV_INCLUDE_DIRS}
+ ${CMAKE_CURRENT_SOURCE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/libSPIRV
+ ${CMAKE_CURRENT_SOURCE_DIR}/Mangler
+)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 54d4901..719ab54 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,18 +1,42 @@
+# required by lit.site.cfg.py.in
+get_target_property(LLVM_SPIRV_DIR llvm-spirv BINARY_DIR)
+set(LLVM_SPIRV_TEST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg.py
MAIN_CONFIG
- ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
- )
-
-list(APPEND LLVM_SPIRV_TEST_DEPS
- FileCheck count not
- llvm-as
- llvm-dis
- llvm-spirv
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.cfg.py
)
+if(NOT BUILD_EXTERNAL)
+ set(LLVM_SPIRV_TEST_DEPS
+ count
+ FileCheck
+ not
+ )
+endif(NOT BUILD_EXTERNAL)
+
add_lit_testsuite(check-llvm-spirv "Running the LLVM-SPIRV regression tests"
${CMAKE_CURRENT_BINARY_DIR}
- DEPENDS ${LLVM_SPIRV_TEST_DEPS}
+ ARGS
+ --verbose
+ DEPENDS
+ ${LLVM_SPIRV_TEST_DEPS}
+ llvm-as
+ llvm-dis
+ llvm-spirv
+)
+
+# to enable a custom test target on cmake below 3.11
+# starting with 3.11 "test" is only reserved if ENABLE_TESTING(ON)
+if(BUILD_EXTERNAL)
+ cmake_policy(PUSH)
+ if(POLICY CMP0037 AND ${CMAKE_VERSION} VERSION_LESS "3.11.0")
+ cmake_policy(SET CMP0037 OLD)
+ endif(POLICY CMP0037 AND ${CMAKE_VERSION} VERSION_LESS "3.11.0")
+ add_custom_target(test
+ DEPENDS
+ check-llvm-spirv
)
+ cmake_policy(POP)
+endif(BUILD_EXTERNAL)
diff --git a/test/lit.cfg.py b/test/lit.cfg.py
index ac60d2d..924f3f2 100644
--- a/test/lit.cfg.py
+++ b/test/lit.cfg.py
@@ -25,7 +25,7 @@ config.excludes = ['CMakeLists.txt']
config.test_source_root = os.path.dirname(__file__)
# test_exec_root: The root path where tests should be run.
-config.test_exec_root = os.path.join(config.llvm_obj_root, 'test')
+config.test_exec_root = os.path.join(config.test_run_dir, 'test_output')
llvm_config.use_default_substitutions()
@@ -33,7 +33,7 @@ llvm_config.use_default_substitutions()
config.substitutions.append(('%PATH%', config.environment['PATH']))
-tool_dirs = [config.llvm_tools_dir]
+tool_dirs = [config.llvm_tools_dir, config.llvm_spirv_dir]
tools = ['llvm-as', 'llvm-dis', 'llvm-spirv']
diff --git a/test/lit.site.cfg.py.in b/test/lit.site.cfg.py.in
index 32af69f..70a1d16 100644
--- a/test/lit.site.cfg.py.in
+++ b/test/lit.site.cfg.py.in
@@ -5,6 +5,7 @@ import sys
config.llvm_src_root = "@LLVM_SOURCE_DIR@"
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
+config.llvm_spirv_dir = "@LLVM_SPIRV_DIR@"
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
config.llvm_shlib_dir = "@SHLIBDIR@"
config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@"
@@ -13,6 +14,7 @@ config.host_triple = "@LLVM_HOST_TRIPLE@"
config.target_triple = "@TARGET_TRIPLE@"
config.host_arch = "@HOST_ARCH@"
config.python_executable = "@PYTHON_EXECUTABLE@"
+config.test_run_dir = "@CMAKE_CURRENT_BINARY_DIR@"
# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
@@ -28,4 +30,4 @@ except KeyError:
@LIT_SITE_CFG_IN_FOOTER@
# Let the main config do the real work.
-lit_config.load_config(config, "@LLVM_SPIRV_SOURCE_DIR@/test/lit.cfg.py")
+lit_config.load_config(config, "@LLVM_SPIRV_TEST_SOURCE_DIR@/lit.cfg.py")
diff --git a/tools/llvm-spirv/CMakeLists.txt b/tools/llvm-spirv/CMakeLists.txt
index f4d41a9..48567ab 100644
--- a/tools/llvm-spirv/CMakeLists.txt
+++ b/tools/llvm-spirv/CMakeLists.txt
@@ -1,15 +1,15 @@
-set(LLVM_LINK_COMPONENTS
- Analysis
- BitReader
- BitWriter
- Core
- SPIRVLib
- Support
- TransformUtils
- )
-
-include_directories(${LLVM_SPIRV_INCLUDE_DIRS})
-
-add_llvm_tool(llvm-spirv
- llvm-spirv.cpp
- )
+set(LLVM_LINK_COMPONENTS
+ SPIRVLib
+)
+
+add_llvm_tool(llvm-spirv
+ llvm-spirv.cpp
+ # llvm_setup_rpath messes with the rpath making llvm-spirv not executable from the build directory
+ NO_INSTALL_RPATH
+)
+
+target_include_directories(llvm-spirv
+ PRIVATE
+ ${LLVM_INCLUDE_DIR}
+ ${LLVM_SPIRV_INCLUDE_DIRS}
+)