1//
2// Copyright (C) 2011 The Android Open Source Project
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//
16
17art_cc_defaults {
18    name: "libart-dex2oat-defaults",
19    defaults: ["art_defaults"],
20    host_supported: true,
21    srcs: [
22        "dex/dex_to_dex_compiler.cc",
23        "dex/quick_compiler_callbacks.cc",
24        "driver/compiler_driver.cc",
25        "linker/elf_writer.cc",
26        "linker/elf_writer_quick.cc",
27        "linker/image_writer.cc",
28        "linker/multi_oat_relative_patcher.cc",
29        "linker/oat_writer.cc",
30        "linker/relative_patcher.cc",
31    ],
32
33    codegen: {
34        arm: {
35            srcs: [
36                "linker/arm/relative_patcher_arm_base.cc",
37                "linker/arm/relative_patcher_thumb2.cc",
38            ],
39        },
40        arm64: {
41            srcs: [
42                "linker/arm64/relative_patcher_arm64.cc",
43            ],
44        },
45        x86: {
46            srcs: [
47                "linker/x86/relative_patcher_x86.cc",
48                "linker/x86/relative_patcher_x86_base.cc",
49            ],
50        },
51        x86_64: {
52            srcs: [
53                "linker/x86_64/relative_patcher_x86_64.cc",
54            ],
55        },
56    },
57
58    generated_sources: ["art_dex2oat_operator_srcs"],
59    shared_libs: [
60        "libbase",
61
62        // For SHA-1 checksumming of build ID
63        "libcrypto",
64
65        "libz",
66    ],
67    export_include_dirs: ["."],
68}
69
70cc_defaults {
71    name: "libart-dex2oat_static_base_defaults",
72    static_libs: [
73        "libbase",
74        "libcrypto",
75        "libz",
76    ],
77}
78
79gensrcs {
80    name: "art_dex2oat_operator_srcs",
81    cmd: "$(location generate_operator_out) art/dex2oat $(in) > $(out)",
82    tools: ["generate_operator_out"],
83    srcs: [
84        "dex/dex_to_dex_compiler.h",
85        "linker/image_writer.h",
86    ],
87    output_extension: "operator_out.cc",
88}
89
90art_cc_library_static {
91    name: "libart-dex2oat",
92    defaults: ["libart-dex2oat-defaults"],
93    shared_libs: [
94        "libart-compiler",
95        "libart-dexlayout",
96        "libart",
97        "libartpalette",
98        "libprofile",
99    ],
100    apex_available: [
101        "com.android.art.release",
102        "com.android.art.debug",
103    ],
104}
105
106cc_defaults {
107    name: "libart-dex2oat_static_defaults",
108    defaults: [
109        "libart-dex2oat_static_base_defaults",
110        "libart_static_defaults",
111        "libprofile_static_defaults",
112    ],
113    static_libs: [
114        "libart-compiler",
115        "libart-dexlayout",
116        "libart-dex2oat",
117    ],
118}
119
120art_cc_library_static {
121    name: "libartd-dex2oat",
122    defaults: [
123        "art_debug_defaults",
124        "libart-dex2oat-defaults",
125    ],
126    shared_libs: [
127        "libartd-compiler",
128        "libartd-dexlayout",
129        "libartd",
130        "libartpalette",
131        "libprofiled",
132    ],
133    apex_available: [
134        "com.android.art.debug",
135    ],
136}
137
138cc_defaults {
139    name: "libartd-dex2oat_static_defaults",
140    defaults: [
141        "libart-dex2oat_static_base_defaults",
142        "libartd_static_defaults",
143        "libprofiled_static_defaults",
144    ],
145    static_libs: [
146        "libartd-compiler",
147        "libartd-dexlayout",
148        "libartd-dex2oat",
149    ],
150}
151
152cc_library_headers {
153    name: "dex2oat_headers",
154    visibility: [
155        // TODO(b/133140750): Clean this up.
156        "//frameworks/native/cmds/installd",
157    ],
158    host_supported: true,
159    export_include_dirs: ["include"],
160
161    apex_available: [
162        "//apex_available:platform",
163        "com.android.art.release",
164        "com.android.art.debug",
165    ],
166}
167
168cc_defaults {
169    name: "dex2oat-defaults",
170    host_supported: true,
171    defaults: ["art_defaults"],
172    srcs: [
173        "dex2oat_options.cc",
174        "dex2oat.cc",
175    ],
176
177    target: {
178        android: {
179            compile_multilib: "both",
180        },
181    },
182    header_libs: [
183        "dex2oat_headers",
184        "art_cmdlineparser_headers",
185    ],
186}
187
188cc_defaults {
189    name: "dex2oat-pgo-defaults",
190    defaults_visibility: [
191        "//art:__subpackages__",
192        "//external/vixl",
193    ],
194    pgo: {
195        instrumentation: true,
196        benchmarks: ["dex2oat"],
197    },
198    target: {
199        android_arm64: {
200            pgo: {
201                profile_file: "art/dex2oat_arm_arm64.profdata",
202            },
203        },
204        android_arm: {
205            pgo: {
206                profile_file: "art/dex2oat_arm_arm64.profdata",
207            },
208        },
209        android_x86_64: {
210            pgo: {
211                profile_file: "art/dex2oat_x86_x86_64.profdata",
212            },
213        },
214        android_x86: {
215            pgo: {
216                profile_file: "art/dex2oat_x86_x86_64.profdata",
217            },
218        },
219    },
220}
221
222art_cc_binary {
223    name: "dex2oat",
224    defaults: [
225        "dex2oat-defaults",
226        "dex2oat-pgo-defaults",
227    ],
228    // Modules that do dexpreopting, e.g. android_app, depend implicitly on
229    // either dex2oat or dex2oatd in ART source builds.
230    visibility: ["//visibility:public"],
231    shared_libs: [
232        "libprofile",
233        "libart-compiler",
234        "libart-dexlayout",
235        "libart",
236        "libcrypto",
237        "libdexfile",
238        "libartbase",
239        "libartpalette",
240        "libbase",
241        "libsigchain",
242        "libz",
243    ],
244    static_libs: [
245        "libart-dex2oat",
246    ],
247
248    multilib: {
249        lib32: {
250            suffix: "32",
251        },
252        lib64: {
253            suffix: "64",
254        },
255    },
256
257    pgo: {
258        // Additional cflags just for dex2oat during PGO instrumentation
259        cflags: [
260            // Ignore frame-size increase resulting from instrumentation.
261            "-Wno-frame-larger-than=",
262            "-DART_PGO_INSTRUMENTATION",
263        ],
264    },
265    target: {
266        android: {
267            lto: {
268                thin: true,
269            },
270        },
271        host: {
272            // Override the prefer32 added by art_cc_binary when
273            // HOST_PREFER_32_BIT is in use. Necessary because the logic in
274            // Soong for setting ctx.Config().BuildOSTarget (used in
275            // dexpreopt.RegisterToolDeps) doesn't take host prefer32 into
276            // account. Note that this override cannot be in cc_defaults because
277            // it'd get overridden by the load hook even when it uses
278            // PrependProperties.
279            compile_multilib: "64",
280            symlink_preferred_arch: true,
281        },
282    },
283    apex_available: [
284        "com.android.art.release",
285        "com.android.art.debug",
286    ],
287}
288
289art_cc_binary {
290    name: "dex2oatd",
291    defaults: [
292        "art_debug_defaults",
293        "dex2oat-defaults",
294    ],
295    // Modules that do dexpreopting, e.g. android_app, depend implicitly on
296    // either dex2oat or dex2oatd in ART source builds.
297    visibility: ["//visibility:public"],
298    shared_libs: [
299        "libprofiled",
300        "libartd-compiler",
301        "libartd-dexlayout",
302        "libartd",
303        "libcrypto",
304        "libdexfiled",
305        "libartbased",
306        "libartpalette",
307        "libbase",
308        "libsigchain",
309        "libz",
310    ],
311    static_libs: [
312        "libartd-dex2oat",
313    ],
314    target: {
315        host: {
316            // Override the prefer32 added by art_cc_binary when
317            // HOST_PREFER_32_BIT is in use. Necessary because the logic in
318            // Soong for setting ctx.Config().BuildOSTarget (used in
319            // dexpreopt.RegisterToolDeps) doesn't take host prefer32 into
320            // account. Note that this override cannot be in cc_defaults because
321            // it'd get overridden by the load hook even when it uses
322            // PrependProperties.
323            compile_multilib: "64",
324            symlink_preferred_arch: true,
325        },
326    },
327    apex_available: [
328        "com.android.art.debug",
329    ],
330
331    multilib: {
332        lib32: {
333            suffix: "32",
334        },
335        lib64: {
336            suffix: "64",
337        },
338    },
339}
340
341cc_defaults {
342    name: "dex2oats-defaults",
343    device_supported: false,
344    static_executable: true,
345    defaults: [
346        "dex2oat-defaults",
347    ],
348    target: {
349        darwin: {
350            enabled: false,
351        },
352    },
353    ldflags: [
354        // We need this because GC stress mode makes use of
355        // _Unwind_GetIP and _Unwind_Backtrace and the symbols are also
356        // defined in libgcc_eh.a(unwind-dw2.o)
357        // TODO: Having this is not ideal as it might obscure errors.
358        // Try to get rid of it.
359        "-z muldefs",
360    ],
361    static_libs: [
362        "libbase",
363        "libsigchain_fake",
364        "libz",
365    ],
366}
367
368art_cc_binary {
369    name: "dex2oats",
370    defaults: [
371        "dex2oats-defaults",
372        "libart_static_defaults",
373        "libart-compiler_static_defaults",
374        "libart-dexlayout_static_defaults",
375        "libartbase_static_defaults",
376        "libdexfile_static_defaults",
377        "libprofile_static_defaults",
378        "libart-dex2oat_static_defaults",
379    ],
380}
381
382art_cc_binary {
383    name: "dex2oatds",
384    defaults: [
385        "art_debug_defaults",
386        "dex2oats-defaults",
387        "libartd_static_defaults",
388        "libartd-compiler_static_defaults",
389        "libartd-dexlayout_static_defaults",
390        "libartbased_static_defaults",
391        "libdexfiled_static_defaults",
392        "libprofiled_static_defaults",
393        "libartd-dex2oat_static_defaults",
394    ],
395    target: {
396        linux_glibc_x86_64: {
397            use_clang_lld: true,
398        },
399    },
400}
401
402art_cc_library_static {
403    name: "libart-dex2oat-gtest",
404    defaults: ["libart-gtest-defaults"],
405    srcs: [
406        "common_compiler_driver_test.cc",
407    ],
408    shared_libs: [
409        "libartd-compiler",
410        "libartd-disassembler",
411        "libart-compiler-gtest",
412        "libart-runtime-gtest",
413        "libbase",
414    ],
415    static_libs: [
416        "libartd-dex2oat",
417    ],
418}
419
420art_cc_test {
421    name: "art_dex2oat_tests",
422    defaults: [
423        "art_gtest_defaults",
424    ],
425    data: [
426        ":art-gtest-jars-AbstractMethod",
427        ":art-gtest-jars-DefaultMethods",
428        ":art-gtest-jars-DexToDexDecompiler",
429        ":art-gtest-jars-ImageLayoutA",
430        ":art-gtest-jars-ImageLayoutB",
431        ":art-gtest-jars-LinkageTest",
432        ":art-gtest-jars-Main",
433        ":art-gtest-jars-MainEmptyUncompressed",
434        ":art-gtest-jars-MainEmptyUncompressedAligned",
435        ":art-gtest-jars-MainStripped",
436        ":art-gtest-jars-MainUncompressedAligned",
437        ":art-gtest-jars-ManyMethods",
438        ":art-gtest-jars-MultiDex",
439        ":art-gtest-jars-MultiDexModifiedSecondary",
440        ":art-gtest-jars-MyClassNatives",
441        ":art-gtest-jars-Nested",
442        ":art-gtest-jars-ProfileTestMultiDex",
443        ":art-gtest-jars-StaticLeafMethods",
444        ":art-gtest-jars-Statics",
445        ":art-gtest-jars-StringLiterals",
446        ":art-gtest-jars-VerifierDeps",
447        ":art-gtest-jars-VerifierDepsMulti",
448        ":art-gtest-jars-VerifySoftFailDuringClinit",
449    ],
450    srcs: [
451        "dex2oat_test.cc",
452        "dex2oat_image_test.cc",
453        "dex/dex_to_dex_decompiler_test.cc",
454        "driver/compiler_driver_test.cc",
455        "linker/elf_writer_test.cc",
456        "linker/image_test.cc",
457        "linker/image_write_read_test.cc",
458        "linker/index_bss_mapping_encoder_test.cc",
459        "linker/multi_oat_relative_patcher_test.cc",
460        "linker/oat_writer_test.cc",
461        "verifier_deps_test.cc",
462    ],
463    required: ["dex2oatd"],
464
465    codegen: {
466        arm: {
467            srcs: [
468                "linker/arm/relative_patcher_thumb2_test.cc",
469            ],
470        },
471        arm64: {
472            srcs: [
473                "linker/arm64/relative_patcher_arm64_test.cc",
474            ],
475        },
476        x86: {
477            srcs: [
478                "linker/x86/relative_patcher_x86_test.cc",
479            ],
480        },
481        x86_64: {
482            srcs: [
483                "linker/x86_64/relative_patcher_x86_64_test.cc",
484            ],
485        },
486    },
487
488    header_libs: ["dex2oat_headers"],
489    shared_libs: [
490        "libartbased",
491        "libartd-compiler",
492        "libartd-dexlayout",
493        "libartpalette",
494        "libbase",
495        "libcrypto",
496        "libprofiled",
497        "libsigchain",
498        "libziparchive",
499    ],
500    static_libs: [
501        "libart-dex2oat-gtest",
502        "libartd-dex2oat",
503    ],
504}
505