From dc895f6dc8b9a6f85c09a62999280d96e349e7b1 Mon Sep 17 00:00:00 2001 From: Christian Blichmann Date: Tue, 29 Mar 2022 05:56:49 -0700 Subject: [PATCH] Introduce an API version to the build rules This will allow us to experiment with (and subsequently migrate to) changes to the generated API, possibly incompatible ones. This change should be a no-op for current builds, as there is only a single version of Sandboxed API. PiperOrigin-RevId: 438003314 Change-Id: Ia23ea4360bee0227692d9f5220ab20d85f089ba7 --- cmake/SapiBuildDefs.cmake | 8 +++++++- sandboxed_api/bazel/sapi.bzl | 25 +++++++++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cmake/SapiBuildDefs.cmake b/cmake/SapiBuildDefs.cmake index 134115e..f06797f 100644 --- a/cmake/SapiBuildDefs.cmake +++ b/cmake/SapiBuildDefs.cmake @@ -87,14 +87,20 @@ endmacro() # LIBRARY_NAME into. # HEADER If set, does not generate an interface header, but uses the one # specified. +# API_VERSION Which version of the Sandboxed API to generate. Currently, only +# version "1" is defined. function(add_sapi_library) set(_sapi_opts NOEMBED) - set(_sapi_one_value HEADER LIBRARY LIBRARY_NAME NAMESPACE) + set(_sapi_one_value HEADER LIBRARY LIBRARY_NAME NAMESPACE API_VERSION) set(_sapi_multi_value SOURCES FUNCTIONS INPUTS) cmake_parse_arguments(PARSE_ARGV 0 _sapi "${_sapi_opts}" "${_sapi_one_value}" "${_sapi_multi_value}") set(_sapi_NAME "${ARGV0}") + if(_sapi_API_VERSION AND NOT _sapi_API_VERSION VERSION_EQUAL "1") + message(FATAL_ERROR "API_VERSION \"1\" is the only one defined right now") + endif() + set(_sapi_gen_header "${_sapi_NAME}.sapi.h") foreach(func IN LISTS _sapi_FUNCTIONS) list(APPEND _sapi_exported_funcs "LINKER:--export-dynamic-symbol,${func}") diff --git a/sandboxed_api/bazel/sapi.bzl b/sandboxed_api/bazel/sapi.bzl index 2ab3723..d24b317 100644 --- a/sandboxed_api/bazel/sapi.bzl +++ b/sandboxed_api/bazel/sapi.bzl @@ -148,12 +148,25 @@ sapi_interface = rule( "out": attr.output(mandatory = True), "embed_dir": attr.string(), "embed_name": attr.string(), - "functions": attr.string_list(allow_empty = True, default = []), - "input_files": attr.label_list(allow_files = True), - "lib": attr.label(providers = [CcInfo], mandatory = True), + "functions": attr.string_list( + allow_empty = True, + default = [], + ), + "input_files": attr.label_list( + providers = [CcInfo], + allow_files = True, + ), + "lib": attr.label( + providers = [CcInfo], + mandatory = True, + ), "lib_name": attr.string(mandatory = True), "namespace": attr.string(), "limit_scan_depth": attr.bool(default = False), + "api_version": attr.int( + default = 1, + values = [1], # Only a single version is defined right now + ), "generator": attr.label( executable = True, cfg = "host", @@ -173,6 +186,7 @@ def sapi_library( lib, lib_name, namespace = "", + api_version = 1, embed = True, add_default_deps = True, limit_scan_depth = False, @@ -197,6 +211,8 @@ def sapi_library( embed: Whether the SAPI library should be embedded inside the host code add_default_deps: Add SAPI dependencies to target (deprecated) limit_scan_depth: Limit include depth for header generator (deprecated) + api_version: Which version of the Sandboxed API to generate. Currently, + only version 1 is defined. srcs: Any additional sources to include with the sandboxed library hdrs: Like srcs, any additional headers to include with the sandboxed library @@ -204,7 +220,7 @@ def sapi_library( header: If set, do not generate a header, but use the specified one (deprecated). input_files: List of source files which the SAPI interface generator - should scan for function declaration + should scan for function declarations deps: Extra dependencies to add to the SAPI library tags: Extra tags to associate with the target generator_executable: Label of the SAPI interface generator to use @@ -303,6 +319,7 @@ def sapi_library( embed_name = embed_name, embed_dir = embed_dir, namespace = namespace, + api_version = api_version, generator = generator_executable, limit_scan_depth = limit_scan_depth, **common