-
Notifications
You must be signed in to change notification settings - Fork 85
/
CMakeLists.txt
117 lines (101 loc) · 4.52 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Copyright 2021 Google LLC
#
# 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
#
# https://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_policy(SET CMP0012 NEW)
cmake_policy(SET CMP0048 NEW)
project(ruy CXX)
cmake_minimum_required(VERSION 3.13) # Copied from IREE
set(CMAKE_CXX_STANDARD 14)
include(GNUInstallDirs)
if (PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME)
set(RUY_IS_TOPLEVEL TRUE)
set(RUY_MINIMAL_BUILD_DEFAULT_VALUE OFF)
else()
set(RUY_IS_TOPLEVEL FALSE)
set(RUY_MINIMAL_BUILD_DEFAULT_VALUE ON)
endif()
option(RUY_MINIMAL_BUILD "Disable ruy's tests, examples, etc. Build only ruy public libraries." ${RUY_MINIMAL_BUILD_DEFAULT_VALUE})
if (NOT RUY_MINIMAL_BUILD)
enable_testing()
endif()
option(RUY_PROFILER "Enable ruy's built-in profiler (harms performance)" OFF)
option(RUY_ENABLE_INSTALL "Enable install rule" ${RUY_IS_TOPLEVEL})
include(cmake/ruy_add_all_subdirs.cmake)
include(cmake/ruy_cc_library.cmake)
include(cmake/ruy_cc_binary.cmake)
include(cmake/ruy_cc_test.cmake)
option(RUY_FIND_CPUINFO "Use find_package to find cpuinfo" OFF)
# Skip cpuinfo if it was already generated, which can happen when ruy is
# a subdirectory in a wider project that already uses cpuinfo.
if (NOT TARGET cpuinfo::cpuinfo)
if (RUY_FIND_CPUINFO)
find_package(cpuinfo REQUIRED)
else()
# Test if the third_party/cpuinfo submodule was checked out before
# adding that subdirectory, so we can do more helpful things below in the
# else() block when it's not.
set(RUY_CPUINFO_CMAKELISTS_FILE "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cpuinfo/CMakeLists.txt")
if (EXISTS "${RUY_CPUINFO_CMAKELISTS_FILE}")
# Disabling cpuinfo's tests and benchmarks to prevent a copy of its
# googletest dependency getting downloaded into a 'deps' directory in the
# source tree!
set(CPUINFO_BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE)
set(CPUINFO_BUILD_UNIT_TESTS OFF CACHE BOOL "" FORCE)
set(CPUINFO_BUILD_MOCK_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory("third_party/cpuinfo" EXCLUDE_FROM_ALL)
else()
# third_party/cpuinfo is not checked out. That could be intentional when
# ruy is a subdirectory in a wider project that is already providing
# the cpuinfo target. Maybe that wider project's CMakeLists is ordered
# in such a way that cpuinfo gets generated after ruy. In that case,
# it's helpful that we continue silently. In the worst case if the cpuinfo
# target never gets defined, ruy will fail to compile.
# On the other hand, if ruy is the top-level project here (not part of a
# wider project) then nothing will define the cpuinfo target for us,
# so we will definitely fail to compile, so we may as well fail right here.
if (RUY_IS_TOPLEVEL)
message(FATAL_ERROR "This file does not exist:\n${RUY_CPUINFO_CMAKELISTS_FILE}\n"
"That typically means that the git submodules of the ruy "
"repository haven't been checked out. Try this in the ruy "
"git directory:\n git submodule update --init")
endif()
endif()
endif()
endif()
# googletest is only needed for tests. Projects embedding ruy as a subdirectory
# and not needing to build ruy tests may proceed without a local checkout of
# third_party/googletest.
if (NOT RUY_MINIMAL_BUILD
AND NOT TARGET gtest
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/CMakeLists.txt")
add_subdirectory("third_party/googletest" EXCLUDE_FROM_ALL)
endif()
add_subdirectory("ruy")
if (NOT RUY_MINIMAL_BUILD)
add_subdirectory("example")
endif()
if (RUY_ENABLE_INSTALL)
install(EXPORT ${PROJECT_NAME}Targets
NAMESPACE ${PROJECT_NAME}::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
include(CMakePackageConfigHelpers)
configure_package_config_file(
"cmake/${PROJECT_NAME}Config.cmake.in"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
endif()