|  | # 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. | 
|  |  | 
|  | include(BuildFlatBuffers) | 
|  | include(CMakeParseArguments) | 
|  |  | 
|  | # flatbuffer_cc_library() | 
|  | # | 
|  | # CMake function to imitate Bazel's flatbuffer_cc_library rule. | 
|  | # | 
|  | # Parameters: | 
|  | # NAME: name of target (see Note) | 
|  | # SRCS: List of source files for the library | 
|  | # DEPS: List of other libraries to be linked in to the binary targets | 
|  | # COPTS: List of private compile options | 
|  | # DEFINES: List of public defines | 
|  | # LINKOPTS: List of link options | 
|  | # FLATC_ARGS: List of flattbuffers arguments. Default: | 
|  | #             "--keep-prefix" | 
|  | #             "--scoped-enums" | 
|  | #             "--reflect-names" | 
|  | #             "--gen-object-api" | 
|  | # PUBLIC: Add this so that this library will be exported under iree:: | 
|  | # Also in IDE, target will appear in IREE folder while non PUBLIC will be in IREE/internal. | 
|  | # TESTONLY: When added, this target will only be built if user passes -DIREE_BUILD_TESTS=ON to CMake. | 
|  | # | 
|  | # Note: | 
|  | # By default, flatbuffer_cc_library will always create a library named ${NAME}, | 
|  | # and alias target iree::${NAME}. The iree:: form should always be used. | 
|  | # This is to reduce namespace pollution. | 
|  | # | 
|  | # flatbuffer_cc_library( | 
|  | #   NAME | 
|  | #     base_schema | 
|  | #   SRCS | 
|  | #     "a.fbs" | 
|  | # ) | 
|  | # flatbuffer_cc_library( | 
|  | #   NAME | 
|  | #     other_schemas | 
|  | #   SRCS | 
|  | #     "b.fbs" | 
|  | #   DEPS | 
|  | #     iree::schemas::base_schema | 
|  | #   PUBLIC | 
|  | # ) | 
|  | # | 
|  | # iree_cc_binary( | 
|  | #   NAME | 
|  | #     main_lib | 
|  | #   ... | 
|  | #   DEPS | 
|  | #     iree::schemas::other_schemas | 
|  | # ) | 
|  | function(flatbuffer_cc_library) | 
|  | cmake_parse_arguments(_RULE | 
|  | "PUBLIC;TESTONLY" | 
|  | "NAME" | 
|  | "SRCS;COPTS;DEFINES;LINKOPTS;DEPS;FLATC_ARGS" | 
|  | ${ARGN} | 
|  | ) | 
|  |  | 
|  | if(_RULE_TESTONLY AND NOT IREE_BUILD_TESTS) | 
|  | return() | 
|  | endif() | 
|  |  | 
|  | # Prefix the library with the package name, so we get: iree_package_name | 
|  | iree_package_name(_PACKAGE_NAME) | 
|  | set(_NAME "${_PACKAGE_NAME}_${_RULE_NAME}") | 
|  |  | 
|  | if(NOT DEFINED _RULE_FLATC_ARGS) | 
|  | set(FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS | 
|  | # Preserve root-relative include paths in generated code. | 
|  | "--keep-prefix" | 
|  | # Use C++11 'enum class' for enums. | 
|  | "--scoped-enums" | 
|  | # Include reflection tables used for dumping debug representations. | 
|  | "--reflect-names" | 
|  | # Generate FooT types for unpack/pack support. Note that this should only | 
|  | # be used in tooling as the code size/runtime overhead is non-trivial. | 
|  | "--gen-object-api" | 
|  | ) | 
|  | else() | 
|  | set(FLATBUFFERS_FLATC_SCHEMA_EXTRA_ARGS ${_RULE_FLATC_ARGS}) | 
|  | endif() | 
|  |  | 
|  | set(_GEN_TARGET "${_NAME}_gen") | 
|  |  | 
|  | build_flatbuffers( | 
|  | "${_RULE_SRCS}" | 
|  | "${IREE_ROOT_DIR}" | 
|  | "${_GEN_TARGET}" # custom_target_name | 
|  | "${_RULE_DEPS}"  # additional_dependencies | 
|  | "${CMAKE_CURRENT_BINARY_DIR}" # generated_include_dir | 
|  | "${CMAKE_CURRENT_BINARY_DIR}" # binary_schemas_dir | 
|  | "" # copy_text_schemas_dir | 
|  | ) | 
|  |  | 
|  | # Add dependency on flatc explicitly. This is needed for cross-compiling | 
|  | # where flatc comes from another CMake invocation for host. | 
|  | iree_add_executable_dependencies(${_GEN_TARGET} flatc) | 
|  |  | 
|  | add_library(${_NAME} INTERFACE) | 
|  | add_dependencies(${_NAME} ${_GEN_TARGET}) | 
|  | target_include_directories(${_NAME} SYSTEM | 
|  | INTERFACE | 
|  | "$<BUILD_INTERFACE:${IREE_COMMON_INCLUDE_DIRS}>" | 
|  | ${CMAKE_CURRENT_BINARY_DIR} | 
|  | ) | 
|  | target_link_libraries(${_NAME} | 
|  | INTERFACE | 
|  | flatbuffers | 
|  | ${_RULE_LINKOPTS} | 
|  | ${IREE_DEFAULT_LINKOPTS} | 
|  | ) | 
|  | target_compile_definitions(${_NAME} | 
|  | INTERFACE | 
|  | ${_RULE_DEFINES} | 
|  | ) | 
|  |  | 
|  | # Alias the iree_package_name library to iree::package::name. | 
|  | # This lets us more clearly map to Bazel and makes it possible to | 
|  | # disambiguate the underscores in paths vs. the separators. | 
|  | iree_package_ns(_PACKAGE_NS) | 
|  | add_library(${_PACKAGE_NS}::${_RULE_NAME} ALIAS ${_NAME}) | 
|  | endfunction() |