Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/google/ruy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorbjacob <benoitjacob@google.com>2021-01-20 06:21:49 +0300
committerGitHub <noreply@github.com>2021-01-20 06:21:49 +0300
commit4ed621615d2f0a54410976cdaaae22779eaec664 (patch)
treed508bf20de9c68f19aea55330c4d94949c6b608e /cmake
parentb87d6d2e65ca24ba38e9afbf1e9d0744dbda82d3 (diff)
Revert "Add CMake support with a converter from Bazel (#233)" (#243)
This reverts commit b87d6d2e65ca24ba38e9afbf1e9d0744dbda82d3.
Diffstat (limited to 'cmake')
-rwxr-xr-xcmake/bazel_to_cmake.py279
-rwxr-xr-xcmake/bazel_to_cmake.sh35
-rwxr-xr-xcmake/run_android_test.sh16
-rw-r--r--cmake/ruy_add_all_subdirs.cmake37
-rw-r--r--cmake/ruy_cc_binary.cmake57
-rw-r--r--cmake/ruy_cc_library.cmake85
-rw-r--r--cmake/ruy_cc_test.cmake76
-rw-r--r--cmake/ruy_include_directories.cmake33
8 files changed, 0 insertions, 618 deletions
diff --git a/cmake/bazel_to_cmake.py b/cmake/bazel_to_cmake.py
deleted file mode 100755
index ba1a38b..0000000
--- a/cmake/bazel_to_cmake.py
+++ /dev/null
@@ -1,279 +0,0 @@
-#!/usr/bin/env python3
-# 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.
-
-"""This is yet another bazel-to-cmake converter. It's independently written from
-scratch but relies on the same basic idea as others (including IREE's), namely:
-to let the python interpreter do the bulk of the work, exploiting the fact that
-both Bazel's BUILD syntax and Starlark (".bzl") languages are more or less
-subsets of Python.
-
-The main features that this converter supports and that others don't, justifying
-its existence as of early 2021, are:
- 1. Ad-hoc support for select(), generating CMake if()...elseif()... chains
- parsing the condition keys (e.g. anything ending in ":windows" is
- interpreted as the condition "the target platform is Windows"). This allows
- to just ignore config_setting, as we only care about the config_setting
- names, not their actual implementation, as well as all the variants from
- the Bazel 'selects' library.
- 2. Support for load(), loading macros from Starlark files.
-"""
-
-import re
-import os
-import os.path
-import pickle
-import sys
-import datetime
-import itertools
-
-# Ruy's dependencies.
-external_targets = ['gtest', 'gtest_main', 'cpuinfo']
-
-# Text replacements [oldstring, newstring] pairs, applied on all BUILD and
-# Starlark files that we load. Only used by preprocess_input_text.
-replacements = [
- ['$(STACK_FRAME_UNLIMITED)', ''],
- ['native.cc_', 'cc_'],
- ['selects.config_setting_group', 'config_setting_group'],
- ['@com_google_googletest//:gtest', 'gtest'],
- ['@com_google_googletest//:gtest_main', 'gtest_main'],
- ['@cpuinfo//:cpuinfo_with_unstripped_include_path', 'cpuinfo'],
-]
-
-
-def preprocess_input_text(text):
- result = text
- for replacement in replacements:
- result = result.replace(replacement[0], replacement[1])
- return result
-
-
-def set_cmake_list(list_name, values, indent):
- semicolon_separated = ";".join(values)
- print(f'{indent}set({list_name} "{semicolon_separated}")')
-
-
-def generate_cmake_select(select_name, dict):
- new_if_branch_keyword = 'if'
- default_value = []
- for key in dict:
- condition = ''
- if key == '//conditions:default':
- default_value = dict[key]
- continue
- elif re.search(r':windows$', key):
- condition = 'CMAKE_SYSTEM_NAME STREQUAL Windows'
- elif re.search(r':ppc$', key):
- condition = 'CMAKE_SYSTEM_PROCESSOR STREQUAL ppc64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL ppc64le'
- elif re.search(r':s390x$', key):
- condition = 'CMAKE_SYSTEM_PROCESSOR STREQUAL s390 OR CMAKE_SYSTEM_PROCESSOR STREQUAL s390x'
- elif re.search(r':fuchsia$', key):
- condition = 'CMAKE_SYSTEM_NAME STREQUAL Fuchsia'
- elif re.search(r':arm32_assuming_neon$', key):
- condition = 'CMAKE_SYSTEM_PROCESSOR STREQUAL arm'
- elif re.search(r':do_not_want_O3$', key):
- # Ruy is a specialist library: we always want code to be compiled
- # with -O3 unless the build type is Debug or the compiler does not
- # support that flag syntax.
- condition = '(CMAKE_BUILD_TYPE STREQUAL Debug) OR MSVC'
- elif re.search(r':x86_64_and_not_msvc$', key):
- condition = '(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64) AND NOT MSVC'
- elif re.search(r':windows_msvc$', key):
- condition = 'MSVC'
- elif re.search(r':ruy_profiler$', key):
- condition = '${RUY_PROFILER}'
- else:
- raise ValueError(f'Unhandled key in select: {key}')
-
- print(f'{new_if_branch_keyword}({condition})')
- set_cmake_list(select_name, dict[key], ' ')
- new_if_branch_keyword = 'elseif'
-
- print('else()')
- set_cmake_list(select_name, default_value, ' ')
-
- print('endif()\n')
-
-
-def trim_multiple_ruy_prefixes(name):
- return re.sub(r'(ruy_)+ruy', 'ruy', name)
-
-def get_cmake_local_target_name(name):
- global package_prefix
- return trim_multiple_ruy_prefixes(f'ruy_{package_prefix}_{name}')
-
-
-def get_cmake_dep_target_name(name):
- if name in external_targets:
- return name
- if name.startswith('$'):
- # Happens for deps that are the result of expanding a select() that we
- # have compiled to expanding a variable.
- return name
- if name.startswith('//'):
- after_last_slash = name.split('/')[-1]
- if not ':' in after_last_slash:
- name = f'{name}:{after_last_slash}'
- raw=name[2:].replace('/', '_').replace(':', '_')
- return trim_multiple_ruy_prefixes(raw)
- if name.startswith(':'):
- name = name[1:]
- return get_cmake_local_target_name(name)
-
-
-#
-# Functions implementing BUILD functions
-#
-
-
-def package(**kwargs):
- pass
-
-
-def exports_files(*args):
- pass
-
-
-def load(filename, *args):
- if filename.startswith('@'):
- return
- elif filename.startswith(':'):
- filename = os.path.join(bazel_package_dir, filename[1:])
- elif filename.startswith('//'):
- split = filename[2:].split(':')
- filename = os.path.join(bazel_workspace_dir, split[0], split[1])
-
- src_file_content = open(filename).read()
- processed_file_content = preprocess_input_text(src_file_content)
- exec(processed_file_content, globals(), globals())
-
-
-def config_setting(**kwargs):
- # Nothing to do since our implementation of select() is based on parsing
- # the names of config_settings, not looking deep into their actual
- # implementation.
- pass
-
-
-def filegroup(**kwargs):
- pass
-
-
-def config_setting_group(**kwargs):
- # See config_setting.
- pass
-
-
-def bzl_library(**kwargs):
- pass
-
-
-select_index = 0
-select_cache = {}
-
-
-def select(select_dict):
- global select_index
- global select_cache
- global package_prefix
- key = pickle.dumps(sorted(select_dict.items()))
- if key in select_cache:
- select_name = select_cache[key]
- else:
- unique_values = sorted(set(itertools.chain.from_iterable(select_dict.values()))) # sorting ensures determinism, no spurious diffs
- description = '_'.join(unique_values)
- select_name = f'{package_prefix}_{select_index}_{description}'
- select_name = select_name.replace('c++', 'cxx')
- select_name = re.sub(r'[^a-zA-Z0-9]+', '_', select_name)
- select_index = select_index + 1
- select_cache[key] = select_name
- generate_cmake_select(select_name, select_dict)
-
- return [f'${{{select_name}}}']
-
-
-def generic_rule(rule_name, **kwargs):
- print(f'{rule_name}(')
- for key in kwargs.keys():
- values = kwargs[key]
- if type(values) is bool:
- if values:
- print(f' {key.upper()}')
- continue
- else:
- raise ValueError(
- 'Cannot specify FALSE boolean args in CMake')
- if key == 'visibility':
- if values == ['//visibility:public']:
- print(f' PUBLIC')
- continue
- if key == 'tags':
- values = list(filter(lambda x : not x.startswith('req_dep'), values))
- if not values:
- continue
- print(f' {key.upper()}')
- if type(values) is list:
- for value in values:
- if key == 'deps':
- target_name = get_cmake_dep_target_name(value)
- print(f' {target_name}')
- else:
- print(f' {value}')
- else:
- if key == 'name':
- target_name = get_cmake_local_target_name(values)
- print(f' {target_name}')
- else:
- print(f' {values}')
- print(')\n')
-
-
-def cc_library(**kwargs):
- generic_rule('ruy_cc_library', **kwargs)
-
-
-def cc_test(**kwargs):
- generic_rule('ruy_cc_test', **kwargs)
-
-
-def cc_binary(**kwargs):
- generic_rule('ruy_cc_binary', **kwargs)
-
-
-#
-# Program entry point.
-#
-if __name__ == "__main__":
- if len(sys.argv) != 3:
- print("Usage: bazel_to_cmake.py bazel_workspace_dir bazel_package_dir")
- sys.exit(1)
-
- bazel_workspace_dir = sys.argv[1]
- bazel_package_dir = sys.argv[2]
- bazel_package_relative_dir = os.path.relpath(
- bazel_package_dir, bazel_workspace_dir)
- package_prefix = bazel_package_relative_dir.replace(os.path.sep, '_')
-
- print("""# This file is generated (whence no license header). Do not edit!
-# To regenerate, run:
-# cmake/bazel_to_cmake.sh
-""")
-
- src_build_file = os.path.join(bazel_package_dir, "BUILD")
- src_build_content = open(src_build_file).read()
- processed_build_content = preprocess_input_text(src_build_content)
- exec(processed_build_content)
-
- print("ruy_add_all_subdirs()")
diff --git a/cmake/bazel_to_cmake.sh b/cmake/bazel_to_cmake.sh
deleted file mode 100755
index 296219e..0000000
--- a/cmake/bazel_to_cmake.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-# 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.
-
-this_script_dir="$(dirname "$0")"
-
-root_dir="$(git -C "${this_script_dir}" rev-parse --show-toplevel)"
-
-build_files="$(find "${root_dir}" -type f -name BUILD)"
-
-if ! command -v python3 &> /dev/null; then
- python_command=python
-else
- python_command=python3
-fi
-
-for build_file in ${build_files}; do
- package_dir="$(dirname "${build_file}")"
- if [[ "${package_dir}" == "${root_dir}" ]]; then
- # The root CMakeLists.txt is not generated.
- continue
- fi
- "${python_command}" "${this_script_dir}/bazel_to_cmake.py" "${root_dir}" "${package_dir}" > "${package_dir}/CMakeLists.txt"
-done
diff --git a/cmake/run_android_test.sh b/cmake/run_android_test.sh
deleted file mode 100755
index d643232..0000000
--- a/cmake/run_android_test.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-# Minimal script pushing and running a file on device!
-# Contemporary versions of ADB properly propagate exit codes so nothing more
-# is needed to let CTest report test success/failure.
-
-# TODO: consider clearing temporary files after testing, although that will
-# get in the way of debugging and will make code more complex... also,
-# Ruy's test files aren't huge and people running these probably have
-# bigger clutter issues in their /data/local/tmp anyway. Anyway, if we want
-# to do this, we could copy IREE's code.
-
-device_tmpdir=/data/local/tmp
-
-adb push "$1" "${device_tmpdir}"
-adb shell "${device_tmpdir}/$(basename "$1")"
diff --git a/cmake/ruy_add_all_subdirs.cmake b/cmake/ruy_add_all_subdirs.cmake
deleted file mode 100644
index 1a7d126..0000000
--- a/cmake/ruy_add_all_subdirs.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2020 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.
-
-# Forked from IREE's iree_add_all_subdirs.cmake.
-
-# add_all_subidrs
-#
-# CMake function to add all subdirectories of the current directory that contain
-# a CMakeLists.txt file
-#
-# Takes no arguments.
-function(ruy_add_all_subdirs)
- FILE(GLOB _CHILDREN RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*)
- SET(_DIRLIST "")
- foreach(_CHILD ${_CHILDREN})
- if((NOT(subdir MATCHES third_party)) AND
- (IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${_CHILD}) AND
- (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_CHILD}/CMakeLists.txt))
- LIST(APPEND _DIRLIST ${_CHILD})
- endif()
- endforeach()
-
- foreach(subdir ${_DIRLIST})
- add_subdirectory(${subdir})
- endforeach()
-endfunction()
diff --git a/cmake/ruy_cc_binary.cmake b/cmake/ruy_cc_binary.cmake
deleted file mode 100644
index 21dbb9d..0000000
--- a/cmake/ruy_cc_binary.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 2019 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.
-
-# Forked from IREE's iree_cc_binary.cmake.
-
-include(CMakeParseArguments)
-include(cmake/ruy_include_directories.cmake)
-
-# ruy_cc_binary()
-#
-# CMake function to imitate Bazel's cc_binary rule.
-function(ruy_cc_binary)
- cmake_parse_arguments(
- _RULE
- "TESTONLY"
- "NAME"
- "SRCS;COPTS;LINKOPTS;DEPS;TAGS"
- ${ARGN}
- )
-
- if(_RULE_TESTONLY AND NOT RUY_ENABLE_TESTS)
- return()
- endif()
-
- set(_NAME "${_RULE_NAME}")
-
- add_executable(${_NAME} "")
- target_sources(${_NAME}
- PRIVATE
- ${_RULE_SRCS}
- )
- set_target_properties(${_NAME} PROPERTIES OUTPUT_NAME "${_RULE_NAME}")
- ruy_include_directories(${_NAME} "${_RULE_DEPS}")
- target_compile_options(${_NAME}
- PRIVATE
- ${_RULE_COPTS}
- )
- target_link_options(${_NAME}
- PRIVATE
- ${_RULE_LINKOPTS}
- )
- target_link_libraries(${_NAME}
- PUBLIC
- ${_RULE_DEPS}
- )
-endfunction()
diff --git a/cmake/ruy_cc_library.cmake b/cmake/ruy_cc_library.cmake
deleted file mode 100644
index 2fa413f..0000000
--- a/cmake/ruy_cc_library.cmake
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2019 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.
-
-# Forked from IREE's iree_cc_library.cmake.
-
-include(CMakeParseArguments)
-include(cmake/ruy_include_directories.cmake)
-
-# ruy_cc_library()
-#
-# CMake function to imitate Bazel's cc_library rule.
-function(ruy_cc_library)
- cmake_parse_arguments(
- _RULE
- "PUBLIC;TESTONLY"
- "NAME"
- "HDRS;SRCS;COPTS;DEFINES;LINKOPTS;DEPS"
- ${ARGN}
- )
-
- if(_RULE_TESTONLY AND NOT RUY_ENABLE_TESTS)
- return()
- endif()
-
- set(_NAME "${_RULE_NAME}")
-
- # Check if this is a header-only library.
- if("${_RULE_SRCS}" STREQUAL "")
- set(_RULE_IS_INTERFACE 1)
- else()
- set(_RULE_IS_INTERFACE 0)
- endif()
-
- if(_RULE_IS_INTERFACE)
- # Generating a header-only library.
- add_library(${_NAME} INTERFACE)
- target_include_directories(${_NAME}
- INTERFACE
- "${PROJECT_SOURCE_DIR}"
- )
- target_link_libraries(${_NAME}
- INTERFACE
- ${_RULE_DEPS}
- ${_RULE_LINKOPTS}
- )
- target_compile_definitions(${_NAME}
- INTERFACE
- ${_RULE_DEFINES}
- )
- else()
- # Generating a static binary library.
- add_library(${_NAME} STATIC "")
- target_sources(${_NAME}
- PRIVATE
- ${_RULE_SRCS}
- ${_RULE_HDRS}
- )
- ruy_include_directories(${_NAME} "${_RULE_DEPS}")
- target_compile_options(${_NAME}
- PRIVATE
- ${_RULE_COPTS}
- )
- target_link_libraries(${_NAME}
- PUBLIC
- ${_RULE_DEPS}
- PRIVATE
- ${_RULE_LINKOPTS}
- )
- target_compile_definitions(${_NAME}
- PUBLIC
- ${_RULE_DEFINES}
- )
- endif()
-endfunction()
diff --git a/cmake/ruy_cc_test.cmake b/cmake/ruy_cc_test.cmake
deleted file mode 100644
index 2d78697..0000000
--- a/cmake/ruy_cc_test.cmake
+++ /dev/null
@@ -1,76 +0,0 @@
-# Copyright 2019 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.
-
-# Forked from IREE's iree_cc_test.cmake.
-
-include(CMakeParseArguments)
-include(cmake/ruy_include_directories.cmake)
-
-# ruy_cc_test()
-#
-# CMake function to imitate Bazel's cc_test rule.
-function(ruy_cc_test)
- cmake_parse_arguments(
- _RULE
- ""
- "NAME"
- "SRCS;COPTS;LINKOPTS;DEPS;TAGS"
- ${ARGN}
- )
-
- if(NOT RUY_ENABLE_TESTS)
- return()
- endif()
-
- set(_NAME "${_RULE_NAME}")
-
- add_executable(${_NAME} "")
- target_sources(${_NAME}
- PRIVATE
- ${_RULE_SRCS}
- )
- set_target_properties(${_NAME} PROPERTIES OUTPUT_NAME "${_RULE_NAME}")
- ruy_include_directories(${_NAME} "${_RULE_DEPS}")
- target_compile_options(${_NAME}
- PRIVATE
- ${_RULE_COPTS}
- )
- target_link_options(${_NAME}
- PRIVATE
- ${_RULE_LINKOPTS}
- )
- target_link_libraries(${_NAME}
- PUBLIC
- ${_RULE_DEPS}
- )
- if(ANDROID)
- add_test(
- NAME
- ${_NAME}
- COMMAND
- "${CMAKE_SOURCE_DIR}/cmake/run_android_test.sh"
- "$<TARGET_FILE:${_NAME}>"
- )
- else()
- add_test(
- NAME
- ${_NAME}
- COMMAND
- "$<TARGET_FILE:${_NAME}>"
- )
- endif()
- if (_RULE_TAGS)
- set_property(TEST ${_NAME} PROPERTY LABELS ${_RULE_TAGS})
- endif()
-endfunction()
diff --git a/cmake/ruy_include_directories.cmake b/cmake/ruy_include_directories.cmake
deleted file mode 100644
index d2e0ad1..0000000
--- a/cmake/ruy_include_directories.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright 2019-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.
-
-function(ruy_include_directories NAME DEPS)
- target_include_directories(${NAME}
- PUBLIC
- "${PROJECT_SOURCE_DIR}"
- )
- if (cpuinfo IN_LIST DEPS)
- target_include_directories(${NAME}
- PRIVATE
- "${PROJECT_SOURCE_DIR}/third_party/cpuinfo"
- )
- endif()
- if ((gtest IN_LIST DEPS) OR
- (gtest_main IN_LIST DEPS))
- target_include_directories(${NAME}
- PRIVATE
- "${PROJECT_SOURCE_DIR}/third_party/googletest/googletest"
- )
- endif()
-endfunction() \ No newline at end of file