1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright (C) 2024 The Android Open Source Project
4
5package {
6    default_applicable_licenses: ["Android-Apache-2.0"],
7}
8
9soong_config_module_type {
10    name: "optee_client_cflags_cc_defaults",
11    module_type: "cc_defaults",
12    config_namespace: "optee_client",
13    bool_variables: [
14        "cfg_debug",
15        "cfg_werror",
16    ],
17    properties: ["cflags"],
18}
19
20optee_client_cflags_cc_defaults {
21    name: "optee_client_cflags_defaults",
22    cflags: [
23        "-c",
24        "-fPIC",
25        "-Wall",
26        "-Wbad-function-cast",
27        "-Wcast-align",
28        "-Werror-implicit-function-declaration",
29        "-Wextra",
30        "-Wfloat-equal",
31        "-Wformat-nonliteral",
32        "-Wformat-security",
33        "-Wformat=2",
34        "-Winit-self",
35        "-Wmissing-declarations",
36        "-Wmissing-format-attribute",
37        "-Wmissing-include-dirs",
38        "-Wmissing-noreturn",
39        "-Wmissing-prototypes",
40        "-Wnested-externs",
41        "-Wpointer-arith",
42        "-Wshadow",
43        "-Wstrict-prototypes",
44        "-Wswitch-default",
45        "-Wwrite-strings",
46    ],
47    soong_config_variables: {
48        cfg_debug: {
49            cflags: [
50                "-DDEBUG",
51                "-O0",
52                "-g",
53            ],
54        },
55        cfg_werror: {
56            cflags: ["-Werror"],
57        },
58    },
59}
60
61soong_config_module_type {
62    name: "optee_client_libteec_cc_defaults",
63    module_type: "cc_defaults",
64    config_namespace: "optee_client",
65    bool_variables: [
66        "cfg_tee_benchmark",
67    ],
68    value_variables: [
69        "cfg_tee_client_log_level",
70        "cfg_tee_client_log_file",
71        "cfg_tee_fs_parent_path",
72    ],
73    properties: [
74        "cflags",
75        "defaults",
76        "srcs",
77    ],
78}
79
80optee_client_libteec_cc_defaults {
81    name: "optee_client_libteec_log_file_defaults",
82    soong_config_variables: {
83        cfg_tee_fs_parent_path: {
84            cflags: ["-DTEEC_LOG_FILE=\"%s/teec.log\""],
85            conditions_default: {
86                cflags: ["-DTEEC_LOG_FILE=\"/data/vendor/tee/teec.log\""],
87            },
88        },
89    },
90}
91
92optee_client_libteec_cc_defaults {
93    name: "optee_client_libteec_defaults",
94    soong_config_variables: {
95        cfg_tee_benchmark: {
96            cflags: ["-DCFG_TEE_BENCHMARK"],
97            srcs: ["teec_benchmark.c"],
98        },
99        cfg_tee_client_log_level: {
100            cflags: ["-DDEBUGLEVEL_%s"],
101            conditions_default: {
102                cflags: ["-DDEBUGLEVEL_2"],
103            },
104        },
105        cfg_tee_client_log_file: {
106            cflags: ["-DTEEC_LOG_FILE=\"%s\""],
107            conditions_default: {
108                defaults: ["optee_client_libteec_log_file_defaults"],
109            },
110        },
111        cfg_tee_fs_parent_path: {
112            cflags: ["-DTEE_FS_PARENT_PATH=\"%s\""],
113            conditions_default: {
114                cflags: ["-DTEE_FS_PARENT_PATH=\"/data/vendor/tee\""],
115            },
116        },
117    },
118}
119
120cc_library_shared {
121    name: "libteec",
122    vendor: true,
123    compile_multilib: "both",
124    defaults: [
125        "optee_client_cflags_defaults",
126        "optee_client_libteec_defaults",
127    ],
128    cflags: [
129        "-DBINARY_PREFIX=\"TEEC\"",
130    ],
131    srcs: [
132        "libteec/src/tee_client_api.c",
133        "libteec/src/teec_trace.c",
134    ],
135    local_include_dirs: [
136        "libteec/include",
137        "libteec/src",
138    ],
139    export_include_dirs: ["libteec/include"],
140}
141
142cc_library_shared {
143    name: "libckteec",
144    vendor: true,
145    compile_multilib: "both",
146    defaults: ["optee_client_cflags_defaults"],
147    srcs: [
148        "libckteec/src/ck_debug.c",
149        "libckteec/src/ck_helpers.c",
150        "libckteec/src/invoke_ta.c",
151        "libckteec/src/pkcs11_api.c",
152        "libckteec/src/pkcs11_processing.c",
153        "libckteec/src/pkcs11_token.c",
154        "libckteec/src/serialize_ck.c",
155        "libckteec/src/serializer.c",
156    ],
157    shared_libs: ["libteec"],
158    local_include_dirs: [
159        "libckteec/include",
160        "libteec/include",
161    ],
162    export_include_dirs: ["libckteec/include"],
163}
164
165soong_config_module_type {
166    name: "optee_client_tee_supplicant_cc_defaults",
167    module_type: "cc_defaults",
168    config_namespace: "optee_client",
169    bool_variables: [
170        "cfg_ftrace_support",
171        "cfg_gp_sockets",
172        "cfg_ta_gprof_support",
173        "cfg_tee_supp_plugins",
174        "rpmb_emu",
175    ],
176    value_variables: [
177        "cfg_tee_client_load_path",
178        "cfg_tee_fs_parent_path",
179        "cfg_tee_plugin_load_path",
180        "cfg_tee_supp_log_level",
181    ],
182    properties: [
183        "cflags",
184        "defaults",
185        "ldflags",
186        "srcs",
187    ],
188}
189
190optee_client_tee_supplicant_cc_defaults {
191    name: "optee_client_tee_supplicant_plugin_load_path_defaults",
192    multilib: {
193        lib32: {
194            cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"/vendor/lib/tee-supplicant/plugins/\""],
195            ldflags: ["-Wl,-rpath=/vendor/lib/tee-supplicant/plugins/"],
196        },
197        lib64: {
198            cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"/vendor/lib64/tee-supplicant/plugins/\""],
199            ldflags: ["-Wl,-rpath=/vendor/lib64/tee-supplicant/plugins/"],
200        },
201    },
202}
203
204optee_client_tee_supplicant_cc_defaults {
205    name: "optee_client_tee_supplicant_plugin_defaults",
206    soong_config_variables: {
207        cfg_tee_plugin_load_path: {
208            cflags: ["-DTEE_PLUGIN_LOAD_PATH=\"%s\""],
209            ldflags: ["-Wl,-rpath=%s"],
210            conditions_default: {
211                defaults: ["optee_client_tee_supplicant_plugin_load_path_defaults"],
212            },
213        },
214    },
215}
216
217optee_client_tee_supplicant_cc_defaults {
218    name: "optee_client_tee_supplicant_prof_defaults",
219    srcs: ["tee-supplicant/src/prof.c"],
220}
221
222optee_client_tee_supplicant_cc_defaults {
223    name: "optee_client_tee_supplicant_defaults",
224    soong_config_variables: {
225        cfg_ftrace_support: {
226            cflags: ["-DCFG_FTRACE_SUPPORT"],
227            defaults: ["optee_client_tee_supplicant_prof_defaults"],
228        },
229        cfg_gp_sockets: {
230            cflags: ["-DCFG_GP_SOCKETS=1"],
231            srcs: ["tee-supplicant/src/tee_socket.c"],
232        },
233        cfg_ta_gprof_support: {
234            cflags: ["-DCFG_TA_GPROF_SUPPORT"],
235            defaults: ["optee_client_tee_supplicant_prof_defaults"],
236        },
237        cfg_tee_client_load_path: {
238            cflags: ["-DTEEC_LOAD_PATH=\"%s\""],
239            conditions_default: {
240                cflags: ["-DTEEC_LOAD_PATH=\"/vendor/lib\""],
241            },
242        },
243        cfg_tee_fs_parent_path: {
244            cflags: ["-DTEE_FS_PARENT_PATH=\"%s\""],
245            conditions_default: {
246                cflags: ["-DTEE_FS_PARENT_PATH=\"/data/vendor/tee\""],
247            },
248        },
249        cfg_tee_supp_log_level: {
250            cflags: ["-DDEBUGLEVEL_%s"],
251            conditions_default: {
252                cflags: ["-DDEBUGLEVEL_2"],
253            },
254        },
255        cfg_tee_supp_plugins: {
256            srcs: ["tee-supplicant/src/plugin.c"],
257            cflags: ["-DTEE_SUPP_PLUGINS"],
258            defaults: ["optee_client_tee_supplicant_plugin_defaults"],
259        },
260        rpmb_emu: {
261            cflags: ["-DRPMB_EMU=1"],
262            srcs: [
263                "tee-supplicant/src/hmac_sha2.c",
264                "tee-supplicant/src/sha2.c",
265            ],
266        },
267    },
268}
269
270cc_binary {
271    name: "tee-supplicant",
272    vendor: true,
273    defaults: [
274        "optee_client_cflags_defaults",
275        "optee_client_tee_supplicant_defaults",
276    ],
277    cflags: [
278        "-DBINARY_PREFIX=\"TEES\"",
279        "-pthread",
280    ],
281    srcs: [
282        "tee-supplicant/src/handle.c",
283        "tee-supplicant/src/rpmb.c",
284        "tee-supplicant/src/sd_notify.c",
285        "tee-supplicant/src/tee_supp_fs.c",
286        "tee-supplicant/src/tee_supplicant.c",
287        "tee-supplicant/src/teec_ta_load.c",
288    ],
289    shared_libs: ["libteec"],
290    local_include_dirs: [
291        "libteec/include",
292        "libteec/src",
293        "tee-supplicant/src",
294    ],
295}
296