• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python2.7
2# Copyright 2015 gRPC authors.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16import json
17import os
18import sys
19import yaml
20
21run_dir = os.path.dirname(sys.argv[0])
22sources_path = os.path.abspath(
23    os.path.join(run_dir,
24                 '../../third_party/boringssl-with-bazel/sources.json'))
25try:
26    with open(sources_path, 'r') as s:
27        sources = json.load(s)
28except IOError:
29    sources_path = os.path.abspath(
30        os.path.join(run_dir,
31                     '../../../../third_party/openssl/boringssl/sources.json'))
32    with open(sources_path, 'r') as s:
33        sources = json.load(s)
34
35
36def map_dir(filename):
37    return 'third_party/boringssl-with-bazel/' + filename
38
39
40class Grpc(object):
41    """Adapter for boring-SSL json sources files. """
42
43    def __init__(self, sources):
44        self.yaml = None
45        self.WriteFiles(sources)
46
47    def WriteFiles(self, files):
48        test_binaries = ['ssl_test', 'crypto_test']
49        asm_outputs = {
50            key: value for key, value in files.items() if any(
51                f.endswith(".S") or f.endswith(".asm") for f in value)
52        }
53        self.yaml = {
54            '#':
55                'generated with src/boringssl/gen_build_yaml.py',
56            'raw_boringssl_build_output_for_debugging': {
57                'files': files,
58            },
59            'libs': [
60                {
61                    'name':
62                        'boringssl',
63                    'build':
64                        'private',
65                    'language':
66                        'c',
67                    'secure':
68                        False,
69                    'src':
70                        sorted(
71                            map_dir(f) for f in files['ssl'] + files['crypto']),
72                    'asm_src': {
73                        k: [map_dir(f) for f in value
74                           ] for k, value in asm_outputs.items()
75                    },
76                    'headers':
77                        sorted(
78                            map_dir(f)
79                            # We want to include files['fips_fragments'], but not build them as objects.
80                            # See https://boringssl-review.googlesource.com/c/boringssl/+/16946
81                            for f in files['ssl_headers'] +
82                            files['ssl_internal_headers'] +
83                            files['crypto_headers'] +
84                            files['crypto_internal_headers'] +
85                            files['fips_fragments']),
86                    'boringssl':
87                        True,
88                    'defaults':
89                        'boringssl',
90                },
91                {
92                    'name': 'boringssl_test_util',
93                    'build': 'private',
94                    'language': 'c++',
95                    'secure': False,
96                    'boringssl': True,
97                    'defaults': 'boringssl',
98                    'src': [map_dir(f) for f in sorted(files['test_support'])],
99                }
100            ],
101            'targets': [{
102                'name': 'boringssl_%s' % test,
103                'build': 'test',
104                'run': False,
105                'secure': False,
106                'language': 'c++',
107                'src': sorted(map_dir(f) for f in files[test]),
108                'vs_proj_dir': 'test/boringssl',
109                'boringssl': True,
110                'defaults': 'boringssl',
111                'deps': [
112                    'boringssl_test_util',
113                    'boringssl',
114                ]
115            } for test in test_binaries],
116            'tests': [{
117                'name': 'boringssl_%s' % test,
118                'args': [],
119                'exclude_configs': ['asan', 'ubsan'],
120                'ci_platforms': ['linux', 'mac', 'posix', 'windows'],
121                'platforms': ['linux', 'mac', 'posix', 'windows'],
122                'flaky': False,
123                'gtest': True,
124                'language': 'c++',
125                'boringssl': True,
126                'defaults': 'boringssl',
127                'cpu_cost': 1.0
128            } for test in test_binaries]
129        }
130
131
132grpc_platform = Grpc(sources)
133print(yaml.dump(grpc_platform.yaml))
134