1*e5eeaa8eSAndroid Build Coastguard Worker /*
2*e5eeaa8eSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project
3*e5eeaa8eSAndroid Build Coastguard Worker *
4*e5eeaa8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*e5eeaa8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*e5eeaa8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*e5eeaa8eSAndroid Build Coastguard Worker *
8*e5eeaa8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*e5eeaa8eSAndroid Build Coastguard Worker *
10*e5eeaa8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*e5eeaa8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*e5eeaa8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*e5eeaa8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*e5eeaa8eSAndroid Build Coastguard Worker * limitations under the License.
15*e5eeaa8eSAndroid Build Coastguard Worker */
16*e5eeaa8eSAndroid Build Coastguard Worker #pragma once
17*e5eeaa8eSAndroid Build Coastguard Worker
18*e5eeaa8eSAndroid Build Coastguard Worker #include <map>
19*e5eeaa8eSAndroid Build Coastguard Worker #include <string>
20*e5eeaa8eSAndroid Build Coastguard Worker #include <vector>
21*e5eeaa8eSAndroid Build Coastguard Worker
22*e5eeaa8eSAndroid Build Coastguard Worker // Define basic data structure for linker configuration
23*e5eeaa8eSAndroid Build Coastguard Worker struct Namespace;
24*e5eeaa8eSAndroid Build Coastguard Worker
25*e5eeaa8eSAndroid Build Coastguard Worker struct Link {
26*e5eeaa8eSAndroid Build Coastguard Worker Namespace *from, *to;
27*e5eeaa8eSAndroid Build Coastguard Worker bool allow_all_shared;
28*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> shared_libs;
29*e5eeaa8eSAndroid Build Coastguard Worker };
30*e5eeaa8eSAndroid Build Coastguard Worker
31*e5eeaa8eSAndroid Build Coastguard Worker struct Namespace {
32*e5eeaa8eSAndroid Build Coastguard Worker std::string name;
33*e5eeaa8eSAndroid Build Coastguard Worker bool is_isolated;
34*e5eeaa8eSAndroid Build Coastguard Worker bool is_visible;
35*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> search_path;
36*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> permitted_path;
37*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> asan_search_path;
38*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> asan_permitted_path;
39*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> hwasan_search_path;
40*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> hwasan_permitted_path;
41*e5eeaa8eSAndroid Build Coastguard Worker std::map<std::string, Link> links;
42*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> allowed_libs;
43*e5eeaa8eSAndroid Build Coastguard Worker };
44*e5eeaa8eSAndroid Build Coastguard Worker
45*e5eeaa8eSAndroid Build Coastguard Worker struct Section {
46*e5eeaa8eSAndroid Build Coastguard Worker std::string name;
47*e5eeaa8eSAndroid Build Coastguard Worker std::vector<std::string> dirs;
48*e5eeaa8eSAndroid Build Coastguard Worker std::map<std::string, Namespace> namespaces;
49*e5eeaa8eSAndroid Build Coastguard Worker };
50*e5eeaa8eSAndroid Build Coastguard Worker
51*e5eeaa8eSAndroid Build Coastguard Worker struct Configuration {
52*e5eeaa8eSAndroid Build Coastguard Worker std::map<std::string, Section> sections;
53*e5eeaa8eSAndroid Build Coastguard Worker };
54*e5eeaa8eSAndroid Build Coastguard Worker
55*e5eeaa8eSAndroid Build Coastguard Worker template <class K, class V>
MapContainsKey(const std::map<K,V> & map,K key)56*e5eeaa8eSAndroid Build Coastguard Worker bool MapContainsKey(const std::map<K, V>& map, K key) {
57*e5eeaa8eSAndroid Build Coastguard Worker return map.find(key) != map.end();
58*e5eeaa8eSAndroid Build Coastguard Worker }