xref: /aosp_15_r20/external/cpuinfo/configure.py (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li#!/usr/bin/env python
2*2b54f0dbSXin Li
3*2b54f0dbSXin Li
4*2b54f0dbSXin Liimport confu
5*2b54f0dbSXin Liparser = confu.standard_parser("cpuinfo configuration script")
6*2b54f0dbSXin Liparser.add_argument("--log", dest="log_level",
7*2b54f0dbSXin Li    choices=("none", "fatal", "error", "warning", "info", "debug"), default="error")
8*2b54f0dbSXin Liparser.add_argument("--mock", dest="mock", action="store_true")
9*2b54f0dbSXin Li
10*2b54f0dbSXin Li
11*2b54f0dbSXin Lidef main(args):
12*2b54f0dbSXin Li    options = parser.parse_args(args)
13*2b54f0dbSXin Li    build = confu.Build.from_options(options)
14*2b54f0dbSXin Li
15*2b54f0dbSXin Li    macros = {
16*2b54f0dbSXin Li        "CPUINFO_LOG_LEVEL": {"none": 0, "fatal": 1, "error": 2, "warning": 3, "info": 4, "debug": 5}[options.log_level],
17*2b54f0dbSXin Li        "CLOG_LOG_TO_STDIO": int(not options.mock),
18*2b54f0dbSXin Li        "CPUINFO_MOCK": int(options.mock),
19*2b54f0dbSXin Li    }
20*2b54f0dbSXin Li    if build.target.is_linux or build.target.is_android:
21*2b54f0dbSXin Li        macros["_GNU_SOURCE"] = 1
22*2b54f0dbSXin Li
23*2b54f0dbSXin Li    build.export_cpath("include", ["cpuinfo.h"])
24*2b54f0dbSXin Li
25*2b54f0dbSXin Li    with build.options(source_dir="src", macros=macros, extra_include_dirs="src", deps=build.deps.clog):
26*2b54f0dbSXin Li        sources = ["api.c", "init.c", "cache.c"]
27*2b54f0dbSXin Li        if build.target.is_x86 or build.target.is_x86_64:
28*2b54f0dbSXin Li            sources += [
29*2b54f0dbSXin Li                "x86/init.c", "x86/info.c", "x86/isa.c", "x86/vendor.c",
30*2b54f0dbSXin Li                "x86/uarch.c", "x86/name.c", "x86/topology.c",
31*2b54f0dbSXin Li                "x86/cache/init.c", "x86/cache/descriptor.c", "x86/cache/deterministic.c",
32*2b54f0dbSXin Li            ]
33*2b54f0dbSXin Li            if build.target.is_macos:
34*2b54f0dbSXin Li                sources += ["x86/mach/init.c"]
35*2b54f0dbSXin Li            elif build.target.is_linux or build.target.is_android:
36*2b54f0dbSXin Li                sources += [
37*2b54f0dbSXin Li                    "x86/linux/init.c",
38*2b54f0dbSXin Li                    "x86/linux/cpuinfo.c",
39*2b54f0dbSXin Li                ]
40*2b54f0dbSXin Li        if build.target.is_arm or build.target.is_arm64:
41*2b54f0dbSXin Li            sources += ["arm/uarch.c", "arm/cache.c"]
42*2b54f0dbSXin Li            if build.target.is_linux or build.target.is_android:
43*2b54f0dbSXin Li                sources += [
44*2b54f0dbSXin Li                    "arm/linux/init.c",
45*2b54f0dbSXin Li                    "arm/linux/cpuinfo.c",
46*2b54f0dbSXin Li                    "arm/linux/clusters.c",
47*2b54f0dbSXin Li                    "arm/linux/midr.c",
48*2b54f0dbSXin Li                    "arm/linux/chipset.c",
49*2b54f0dbSXin Li                    "arm/linux/hwcap.c",
50*2b54f0dbSXin Li                ]
51*2b54f0dbSXin Li                if build.target.is_arm:
52*2b54f0dbSXin Li                    sources.append("arm/linux/aarch32-isa.c")
53*2b54f0dbSXin Li                elif build.target.is_arm64:
54*2b54f0dbSXin Li                    sources.append("arm/linux/aarch64-isa.c")
55*2b54f0dbSXin Li                if build.target.is_android:
56*2b54f0dbSXin Li                    sources += [
57*2b54f0dbSXin Li                        "arm/android/properties.c",
58*2b54f0dbSXin Li                    ]
59*2b54f0dbSXin Li
60*2b54f0dbSXin Li        if build.target.is_macos:
61*2b54f0dbSXin Li            sources += ["mach/topology.c"]
62*2b54f0dbSXin Li        if build.target.is_linux or build.target.is_android:
63*2b54f0dbSXin Li            sources += [
64*2b54f0dbSXin Li                "linux/cpulist.c",
65*2b54f0dbSXin Li                "linux/smallfile.c",
66*2b54f0dbSXin Li                "linux/multiline.c",
67*2b54f0dbSXin Li                "linux/processors.c",
68*2b54f0dbSXin Li            ]
69*2b54f0dbSXin Li            if options.mock:
70*2b54f0dbSXin Li                sources += ["linux/mockfile.c"]
71*2b54f0dbSXin Li        build.static_library("cpuinfo", map(build.cc, sources))
72*2b54f0dbSXin Li
73*2b54f0dbSXin Li    with build.options(source_dir="tools", deps=[build, build.deps.clog]):
74*2b54f0dbSXin Li        build.executable("cpu-info", build.cc("cpu-info.c"))
75*2b54f0dbSXin Li        build.executable("isa-info", build.cc("isa-info.c"))
76*2b54f0dbSXin Li        build.executable("cache-info", build.cc("cache-info.c"))
77*2b54f0dbSXin Li
78*2b54f0dbSXin Li    if build.target.is_x86_64:
79*2b54f0dbSXin Li        with build.options(source_dir="tools", include_dirs=["src", "include"]):
80*2b54f0dbSXin Li            build.executable("cpuid-dump", build.cc("cpuid-dump.c"))
81*2b54f0dbSXin Li
82*2b54f0dbSXin Li    with build.options(source_dir="test", deps=[build, build.deps.clog, build.deps.googletest]):
83*2b54f0dbSXin Li        build.smoketest("init-test", build.cxx("init.cc"))
84*2b54f0dbSXin Li        if build.target.is_linux:
85*2b54f0dbSXin Li            build.smoketest("get-current-test", build.cxx("get-current.cc"))
86*2b54f0dbSXin Li        if build.target.is_x86_64:
87*2b54f0dbSXin Li            build.smoketest("brand-string-test", build.cxx("name/brand-string.cc"))
88*2b54f0dbSXin Li    if options.mock:
89*2b54f0dbSXin Li        with build.options(source_dir="test", include_dirs="test", macros="CPUINFO_MOCK", deps=[build, build.deps.googletest]):
90*2b54f0dbSXin Li            if build.target.is_arm64 and build.target.is_linux:
91*2b54f0dbSXin Li                build.unittest("scaleway-test", build.cxx("scaleway.cc"))
92*2b54f0dbSXin Li
93*2b54f0dbSXin Li    if not options.mock:
94*2b54f0dbSXin Li        with build.options(source_dir="bench", deps=[build, build.deps.clog, build.deps.googlebenchmark]):
95*2b54f0dbSXin Li            build.benchmark("init-bench", build.cxx("init.cc"))
96*2b54f0dbSXin Li            if not build.target.is_macos:
97*2b54f0dbSXin Li                build.benchmark("get-current-bench", build.cxx("get-current.cc"))
98*2b54f0dbSXin Li
99*2b54f0dbSXin Li    return build
100*2b54f0dbSXin Li
101*2b54f0dbSXin Li
102*2b54f0dbSXin Liif __name__ == "__main__":
103*2b54f0dbSXin Li    import sys
104*2b54f0dbSXin Li    main(sys.argv[1:]).generate()
105