| # 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. |
| |
| import("//build_overrides/pigweed.gni") |
| import("$dir_pw_bloat/bloat.gni") |
| import("$dir_pw_build/python.gni") |
| import("$dir_pw_build/python_dist.gni") |
| import("$dir_pw_build/python_venv.gni") |
| import("$dir_pw_build/target_types.gni") |
| import("$dir_pw_unit_test/test.gni") |
| |
| group("default") { |
| deps = [ |
| ":fuzzers(//toolchains:host_fuzz)", |
| ":optimized_libs(//toolchains:host_optimized)", |
| ":python.install", |
| ":tests.run(//toolchains:host_debug)", |
| ] |
| } |
| |
| pw_source_set("cbor_writer") { |
| public = [ "include/dice/cbor_writer.h" ] |
| sources = [ "src/cbor_writer.c" ] |
| } |
| |
| pw_source_set("cbor_reader") { |
| public = [ "include/dice/cbor_reader.h" ] |
| sources = [ "src/cbor_reader.c" ] |
| } |
| |
| config("standalone_ops_config") { |
| include_dirs = [ "//include/dice/config/standalone" ] |
| } |
| |
| pw_static_library("dice_standalone") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/clear_memory.c", |
| "src/dice.c", |
| ] |
| all_dependent_configs = [ ":standalone_ops_config" ] |
| } |
| |
| config("boringssl_ed25519_ops_config") { |
| include_dirs = [ "//include/dice/config/boringssl_ed25519" ] |
| } |
| |
| config("boringssl_ecdsa_p256_ops_config") { |
| include_dirs = [ "//include/dice/config/boringssl_ecdsa_p256" ] |
| } |
| |
| config("boringssl_ecdsa_p384_ops_config") { |
| include_dirs = [ "//include/dice/config/boringssl_ecdsa_p384" ] |
| } |
| |
| pw_static_library("dice_with_boringssl_ed25519_ops") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_cert_op.c", |
| "src/boringssl_ed25519_ops.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| all_dependent_configs = [ ":boringssl_ed25519_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_boringssl_p256_ops") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_cert_op.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/boringssl_p256_ops.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| all_dependent_configs = [ ":boringssl_ecdsa_p256_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_boringssl_p384_ops") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_cert_op.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/boringssl_p384_ops.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| all_dependent_configs = [ ":boringssl_ecdsa_p384_ops_config" ] |
| } |
| |
| config("mbedtls_ops_config") { |
| include_dirs = [ "//include//dice/config/mbedtls_ecdsa_p256" ] |
| defines = [ "MBEDTLS_ALLOW_PRIVATE_ACCESS" ] |
| } |
| |
| pw_static_library("dice_with_mbedtls_ops") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/mbedtls_ops.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/mbedtls:mbedcrypto" ] |
| all_dependent_configs = [ ":mbedtls_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_cbor_ed25519_cert") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_ed25519_ops.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/cbor_cert_op.c", |
| "src/cbor_ed25519_cert_op.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ |
| ":cbor_writer", |
| "//third_party/boringssl:crypto", |
| ] |
| all_dependent_configs = [ ":boringssl_ed25519_ops_config" ] |
| } |
| |
| pw_static_library("boringssl_ecdsa_utils") { |
| public = [ |
| "include/dice/boringssl_ecdsa_utils.h", |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ "src/boringssl_ecdsa_utils.c" ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| } |
| |
| pw_static_library("dice_with_cbor_p256_cert") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_hash_kdf_ops.c", |
| "src/boringssl_p256_ops.c", |
| "src/cbor_cert_op.c", |
| "src/cbor_p256_cert_op.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":cbor_writer", |
| "//third_party/boringssl:crypto", |
| ] |
| all_dependent_configs = [ ":boringssl_ecdsa_p256_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_cbor_p384_cert") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_hash_kdf_ops.c", |
| "src/boringssl_p384_ops.c", |
| "src/cbor_cert_op.c", |
| "src/cbor_p384_cert_op.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/utils.c", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":cbor_writer", |
| "//third_party/boringssl:crypto", |
| ] |
| all_dependent_configs = [ ":boringssl_ecdsa_p384_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_cbor_template_ed25519_cert") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_ed25519_ops.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/template_cbor_cert_op.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| all_dependent_configs = [ ":boringssl_ed25519_ops_config" ] |
| } |
| |
| pw_static_library("dice_with_x509_template_cert") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ |
| "src/boringssl_ed25519_ops.c", |
| "src/boringssl_hash_kdf_ops.c", |
| "src/clear_memory.c", |
| "src/dice.c", |
| "src/template_cert_op.c", |
| "src/utils.c", |
| ] |
| deps = [ "//third_party/boringssl:crypto" ] |
| all_dependent_configs = [ ":boringssl_ed25519_ops_config" ] |
| } |
| |
| pw_source_set("fuzzer") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ "src/fuzzer.cc" ] |
| } |
| |
| pw_test("cbor_writer_test") { |
| sources = [ "src/cbor_writer_test.cc" ] |
| deps = [ ":cbor_writer" ] |
| } |
| |
| pw_test("cbor_reader_test") { |
| sources = [ "src/cbor_reader_test.cc" ] |
| deps = [ ":cbor_reader" ] |
| } |
| |
| pw_executable("cbor_writer_fuzzer") { |
| sources = [ "src/cbor_writer_fuzzer.cc" ] |
| deps = [ ":cbor_writer" ] |
| } |
| |
| pw_executable("cbor_reader_fuzzer") { |
| sources = [ "src/cbor_reader_fuzzer.cc" ] |
| deps = [ ":cbor_reader" ] |
| } |
| |
| pw_test("dice_test") { |
| sources = [ "src/dice_test.cc" ] |
| deps = [ |
| ":dice_standalone", |
| "//third_party/boringssl:crypto", |
| ] |
| } |
| |
| pw_test("boringssl_ed25519_ops_test") { |
| sources = [ |
| "src/boringssl_ed25519_ops_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_boringssl_ed25519_ops", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_ed25519", |
| ] |
| } |
| |
| pw_executable("boringssl_ed25519_ops_fuzzer") { |
| deps = [ |
| ":dice_with_boringssl_ed25519_ops", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_executable("boringssl_p256_ops_fuzzer") { |
| deps = [ |
| ":dice_with_boringssl_p256_ops", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_executable("boringssl_p384_ops_fuzzer") { |
| deps = [ |
| ":dice_with_boringssl_p384_ops", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_test("template_cert_op_test") { |
| sources = [ |
| "src/template_cert_op_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_x509_template_cert", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_ed25519", |
| ] |
| } |
| |
| pw_executable("template_cert_op_fuzzer") { |
| deps = [ |
| ":dice_with_x509_template_cert", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_test("cbor_ed25519_cert_op_test") { |
| sources = [ |
| "src/cbor_cert_op_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_cbor_ed25519_cert", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_ed25519", |
| ] |
| } |
| |
| pw_test("cbor_p256_cert_op_test") { |
| sources = [ |
| "src/cbor_p256_cert_op_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_cbor_p256_cert", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_p256", |
| ] |
| } |
| |
| pw_test("cbor_p384_cert_op_test") { |
| sources = [ |
| "src/cbor_p384_cert_op_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_cbor_p384_cert", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_p384", |
| ] |
| } |
| |
| pw_executable("cbor_ed25519_cert_op_fuzzer") { |
| deps = [ |
| ":dice_with_cbor_ed25519_cert", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_test("template_cbor_ed25519_cert_op_test") { |
| sources = [ |
| "src/template_cbor_cert_op_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_cbor_template_ed25519_cert", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_ed25519", |
| ] |
| } |
| |
| pw_executable("template_cbor_ed25519_cert_op_fuzzer") { |
| deps = [ |
| ":dice_with_cbor_template_ed25519_cert", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_test("mbedtls_ops_test") { |
| sources = [ |
| "src/mbedtls_ops_test.cc", |
| "src/test_utils.cc", |
| ] |
| deps = [ |
| ":boringssl_ecdsa_utils", |
| ":dice_with_mbedtls_ops", |
| "$dir_pw_string:pw_string", |
| "//third_party/boringssl:crypto", |
| "//third_party/cose-c:cose-c_ed25519", |
| ] |
| } |
| |
| pw_executable("mbedtls_ops_fuzzer") { |
| deps = [ |
| ":dice_with_mbedtls_ops", |
| ":fuzzer", |
| ] |
| } |
| |
| pw_static_library("dice_android") { |
| public = [ |
| "//include/dice/dice.h", |
| "//include/dice/utils.h", |
| ] |
| sources = [ "src/android.c" ] |
| deps = [ |
| ":cbor_reader", |
| ":cbor_writer", |
| ":dice_with_cbor_ed25519_cert", |
| ] |
| } |
| |
| pw_test("android_test") { |
| sources = [ "src/android_test.cc" ] |
| deps = [ ":dice_android" ] |
| } |
| |
| pw_executable("android_fuzzer") { |
| sources = [ "src/android_fuzzer.cc" ] |
| deps = [ ":dice_android" ] |
| } |
| |
| pw_test_group("tests") { |
| tests = [ |
| ":android_test", |
| ":boringssl_ed25519_ops_test", |
| ":cbor_ed25519_cert_op_test", |
| ":cbor_p256_cert_op_test", |
| ":cbor_p384_cert_op_test", |
| ":cbor_reader_test", |
| ":cbor_writer_test", |
| ":dice_test", |
| ":mbedtls_ops_test", |
| ":template_cbor_ed25519_cert_op_test", |
| ":template_cert_op_test", |
| ] |
| } |
| |
| group("fuzzers") { |
| deps = [ |
| ":android_fuzzer", |
| ":boringssl_ed25519_ops_fuzzer", |
| ":boringssl_p256_ops_fuzzer", |
| ":boringssl_p384_ops_fuzzer", |
| ":cbor_ed25519_cert_op_fuzzer", |
| ":cbor_reader_fuzzer", |
| ":cbor_writer_fuzzer", |
| ":mbedtls_ops_fuzzer", |
| ":template_cbor_ed25519_cert_op_fuzzer", |
| ":template_cert_op_fuzzer", |
| ] |
| } |
| |
| pw_static_library("empty_lib") { |
| } |
| |
| pw_executable("empty_main") { |
| sources = [ "src/empty_main.c" ] |
| } |
| |
| pw_executable("dice_standalone_main") { |
| sources = [ "src/dice_standalone_main.c" ] |
| deps = [ ":dice_standalone" ] |
| } |
| |
| pw_source_set("dice_main") { |
| public = [ |
| "include/dice/dice.h", |
| "include/dice/utils.h", |
| ] |
| sources = [ "src/dice_main.c" ] |
| } |
| |
| pw_executable("dice_with_boringssl_ed25519_ops_main") { |
| deps = [ |
| ":dice_main", |
| ":dice_with_boringssl_ed25519_ops", |
| ] |
| } |
| |
| pw_executable("dice_with_mbedtls_ops_main") { |
| deps = [ |
| ":dice_main", |
| ":dice_with_mbedtls_ops", |
| ] |
| } |
| |
| pw_executable("dice_with_cbor_cert_main") { |
| deps = [ |
| ":dice_main", |
| ":dice_with_cbor_ed25519_cert", |
| ] |
| } |
| |
| pw_executable("dice_with_cbor_template_ed25519_cert_main") { |
| deps = [ |
| ":dice_main", |
| ":dice_with_cbor_template_ed25519_cert", |
| ] |
| } |
| |
| pw_executable("dice_with_x509_template_cert_main") { |
| deps = [ |
| ":dice_main", |
| ":dice_with_x509_template_cert", |
| ] |
| } |
| |
| pw_size_diff("executable_size_report") { |
| title = "Executable sizes (includes thirdparty deps)" |
| base = ":empty_main" |
| binaries = [ |
| { |
| target = ":dice_standalone_main" |
| label = "DiceMainFlow only (No Ops)" |
| }, |
| { |
| target = ":dice_with_boringssl_ed25519_ops_main" |
| label = "Boringssl Ed25519 Ops" |
| base = ":dice_standalone_main" |
| }, |
| { |
| target = ":dice_with_mbedtls_ops_main" |
| label = "MbedTLS Ops" |
| base = ":dice_standalone_main" |
| }, |
| { |
| target = ":dice_with_cbor_cert_main" |
| label = "Boringssl with CBOR Cert" |
| base = ":dice_with_boringssl_ed25519_ops_main" |
| }, |
| { |
| target = ":dice_with_cbor_template_ed25519_cert_main" |
| label = "Boringssl with CBOR Template Ed25519 Cert" |
| base = ":dice_with_boringssl_ed25519_ops_main" |
| }, |
| { |
| target = ":dice_with_x509_template_cert_main" |
| label = "Boringssl with X.509 Template Cert" |
| base = ":dice_with_boringssl_ed25519_ops_main" |
| }, |
| ] |
| } |
| |
| pw_size_diff("library_size_report") { |
| title = "Library sizes (excludes thirdparty deps)" |
| base = ":empty_lib" |
| binaries = [ |
| { |
| target = ":dice_standalone" |
| label = "DICE Standalone (No Ops)" |
| }, |
| { |
| target = ":dice_with_boringssl_ed25519_ops" |
| label = "Boringssl Ops" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_mbedtls_ops" |
| label = "MbedTLS Ops" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_cbor_ed25519_cert" |
| label = "CBOR Cert" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_cbor_p256_cert" |
| label = "CBOR P256 Cert" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_cbor_p384_cert" |
| label = "CBOR P384 Cert" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_cbor_template_ed25519_cert" |
| label = "CBOR Template Cert" |
| base = ":dice_standalone" |
| }, |
| { |
| target = ":dice_with_x509_template_cert" |
| label = "X.509 Template Cert" |
| base = ":dice_standalone" |
| }, |
| ] |
| } |
| |
| group("optimized_libs") { |
| deps = [ |
| ":dice_android", |
| ":dice_standalone", |
| ":dice_with_boringssl_ed25519_ops", |
| ":dice_with_cbor_ed25519_cert", |
| ":dice_with_cbor_p256_cert", |
| ":dice_with_cbor_p384_cert", |
| ":dice_with_cbor_template_ed25519_cert", |
| ":dice_with_mbedtls_ops", |
| ":dice_with_x509_template_cert", |
| ":executable_size_report", |
| ":library_size_report", |
| ] |
| } |
| |
| # This group is built during bootstrap to setup the interactive Python |
| # environment. |
| pw_python_group("python") { |
| python_deps = [ ":pip_install_open_dice_tools" ] |
| } |
| |
| # In-tree Python packages |
| _open_dice_python_packages = [ "//tools:tools" ] |
| |
| # Pigweed Python packages to include |
| _pigweed_python_packages = [ "$dir_pw_env_setup:core_pigweed_python_packages" ] |
| |
| _all_python_packages = _open_dice_python_packages + _pigweed_python_packages |
| |
| # The default venv for Python actions in GN |
| # Set this gn arg in a declare_args block in this file 'BUILD.gn' or in '.gn' to |
| # use this venv. |
| # |
| # pw_build_PYTHON_BUILD_VENV = "//:open_dice_build_venv" |
| # |
| pw_python_venv("open_dice_build_venv") { |
| path = "$root_build_dir/python-venv" |
| constraints = pw_build_PIP_CONSTRAINTS |
| requirements = pw_build_PIP_REQUIREMENTS |
| |
| # Ensure all third party Python dependencies are installed into this venv. |
| # This works by checking the setup.cfg files for all packages listed here and |
| # installing the packages listed in the [options].install_requires field. |
| source_packages = _all_python_packages |
| } |
| |
| # This template collects all python packages and their dependencies into a |
| # single super Python package for installation into the bootstrapped virtual |
| # environment. |
| pw_python_distribution("generate_open_dice_tools_python_distribution") { |
| packages = _all_python_packages |
| generate_setup_cfg = { |
| name = "open-dice-tools" |
| version = "0.0.1" |
| append_date_to_version = true |
| include_default_pyproject_file = true |
| } |
| } |
| |
| # Install the open-dice-tools super Python package into the bootstrapped Python |
| # venv. |
| pw_internal_pip_install("pip_install_open_dice_tools") { |
| packages = [ ":generate_open_dice_tools_python_distribution" ] |
| } |