https://github.com/CNugteren/CLTune
Tip revision: cba89a40d8320b0da4c4ea888fc5130b301e3201 authored by Cedric Nugteren on 27 April 2016, 09:03:34 UTC
Merge pull request #37 from CNugteren/development
Merge pull request #37 from CNugteren/development
Tip revision: cba89a4
CMakeLists.txt
# ==================================================================================================
# This file is part of the CLTune project.
#
# Author(s):
# Cedric Nugteren <www.cedricnugteren.nl>
#
# -------------------------------------------------------------------------------------------------
#
# Copyright 2014 SURFsara
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ==================================================================================================
# CMake project
cmake_minimum_required(VERSION 2.8.10)
project("cltune" CXX)
set(cltune_VERSION_MAJOR 2)
set(cltune_VERSION_MINOR 2)
set(cltune_VERSION_PATCH 0)
# Options
option(SAMPLES "Enable compilation of sample programs" ON)
option(TESTS "Enable compilation of the Google tests" OFF)
# Select between OpenCL and CUDA back-end
option(USE_OPENCL "Use OpenCL instead of CUDA" ON)
if(USE_OPENCL)
message("-- Building with OpenCL")
add_definitions(-DUSE_OPENCL)
else()
message("-- Building with CUDA")
endif()
# ==================================================================================================
# RPATH settings
set(CMAKE_SKIP_BUILD_RPATH false) # Use, i.e. don't skip the full RPATH for the build tree
set(CMAKE_BUILD_WITH_INSTALL_RPATH false) # When building, don't use the install RPATH already
set(CMAKE_INSTALL_RPATH "") # The RPATH to be used when installing
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH false) # Don't add the automatically determined parts
# ==================================================================================================
# Compiler-version check (requires at least CMake 2.8.10)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
message(FATAL_ERROR "GCC version must be at least 4.7")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.3)
message(FATAL_ERROR "Clang version must be at least 3.3")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
message(FATAL_ERROR "Clang version must be at least 5.0")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14.0)
message(FATAL_ERROR "ICC version must be at least 14.0")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0)
message(FATAL_ERROR "MS Visual Studio version must be at least 18.0")
endif()
endif()
# C++ compiler settings
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(FLAGS "/Ox /wd4715 /wd4996")
else ()
set(FLAGS "-O3 -std=c++11")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(FLAGS "${FLAGS} -Wall -Wno-comment")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8.4)
set(FLAGS "${FLAGS} -Wno-attributes")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(FLAGS "${FLAGS} -Wextra")
endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
# ==================================================================================================
# Package scripts location
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
# Requires CUDA or OpenCL. The latter is found through the included "FindOpenCL.cmake".
if(USE_OPENCL)
find_package(OpenCL REQUIRED)
set(FRAMEWORK_INCLUDE_DIRS ${OPENCL_INCLUDE_DIRS})
set(FRAMEWORK_LIBRARY_DIRS )
set(FRAMEWORK_LIBRARIES ${OPENCL_LIBRARIES})
else()
find_package(CUDA REQUIRED)
set(FRAMEWORK_INCLUDE_DIRS ${CUDA_INCLUDE_DIRS})
set(FRAMEWORK_LIBRARY_DIRS ${CUDA_TOOLKIT_ROOT_DIR}/lib64)
set(FRAMEWORK_LIBRARIES cuda nvrtc)
endif()
# ==================================================================================================
# Include directories: CLTune headers and OpenCL/CUDA includes
include_directories(${cltune_SOURCE_DIR}/include ${FRAMEWORK_INCLUDE_DIRS})
# Link directories: CUDA toolkit
link_directories(${FRAMEWORK_LIBRARY_DIRS})
# Gathers all source-files
set(TUNER
src/cltune.cc
src/tuner_impl.cc
src/kernel_info.cc
src/searcher.cc
src/searchers/full_search.cc
src/searchers/random_search.cc
src/searchers/annealing.cc
src/searchers/pso.cc
src/ml_model.cc
src/ml_models/linear_regression.cc
src/ml_models/neural_network.cc)
# Creates and links the library
add_library(cltune SHARED ${TUNER})
target_link_libraries(cltune ${FRAMEWORK_LIBRARIES})
# Installs the library
install(TARGETS cltune DESTINATION lib)
install(FILES include/cltune.h DESTINATION include)
# ==================================================================================================
# Optional: Enables compilation of sample programs
if (SAMPLES)
# Adds sample programs
add_executable(sample_simple samples/simple/simple.cc)
add_executable(sample_conv_simple samples/conv_simple/conv_simple.cc)
add_executable(sample_multiple_kernels samples/multiple_kernels/multiple_kernels.cc)
add_executable(sample_gemm samples/gemm/gemm.cc)
add_executable(sample_conv samples/conv/conv.cc)
target_link_libraries(sample_simple cltune ${FRAMEWORK_LIBRARIES} ${OpenMP_LIBRARY})
target_link_libraries(sample_conv_simple cltune ${FRAMEWORK_LIBRARIES} ${OpenMP_LIBRARY})
target_link_libraries(sample_multiple_kernels cltune ${FRAMEWORK_LIBRARIES} ${OpenMP_LIBRARY})
target_link_libraries(sample_gemm cltune ${FRAMEWORK_LIBRARIES} ${OpenMP_LIBRARY})
target_link_libraries(sample_conv cltune ${FRAMEWORK_LIBRARIES} ${OpenMP_LIBRARY})
# Note: these are not installed because they depend on their separate OpenCL kernel files
endif()
# ==================================================================================================
# Optional: Enable inclusion of the test-suite
if (TESTS)
enable_testing()
include_directories(${cltune_SOURCE_DIR}/test ${cltune_SOURCE_DIR}/include ${FRAMEWORK_INCLUDE_DIRS})
add_executable(unit_tests
test/main.cc
test/clcudaapi.cc
test/tuner.cc
test/kernel_info.cc)
target_link_libraries(unit_tests cltune ${FRAMEWORK_LIBRARIES})
add_test(unit_tests unit_tests)
endif()
# ==================================================================================================