You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.7 KiB
91 lines
3.7 KiB
4 months ago
|
# 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)
|
||
|
|
||
|
|
||
|
|
||
|
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)
|
||
|
|
||
|
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)
|
||
|
|
||
|
# 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)
|
||
|
# 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()
|
||
|
|
||
|
# 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()
|