blob: 66f2ec99f8500c0f930078d5a8035ad667bd5e45 [file] [log] [blame]
Marat Dukhan547fa362017-03-03 02:47:26 -05001#!/usr/bin/env python
2
3
4import confu
5parser = confu.standard_parser("cpuinfo configuration script")
6parser.add_argument("--log", dest="log_level",
Marat Dukhan52b2c082018-12-16 02:34:43 -08007 choices=("none", "fatal", "error", "warning", "info", "debug"), default="error")
Marat Dukhan51a34272017-05-08 05:13:19 -04008parser.add_argument("--mock", dest="mock", action="store_true")
Marat Dukhan547fa362017-03-03 02:47:26 -05009
10
11def main(args):
12 options = parser.parse_args(args)
13 build = confu.Build.from_options(options)
Marat Dukhan3045d4f2017-03-04 01:51:42 -050014
15 macros = {
Marat Dukhan52b2c082018-12-16 02:34:43 -080016 "CPUINFO_LOG_LEVEL": {"none": 0, "fatal": 1, "error": 2, "warning": 3, "info": 4, "debug": 5}[options.log_level],
17 "CLOG_LOG_TO_STDIO": int(not options.mock),
Marat Dukhancf70aee2018-03-24 23:21:02 -070018 "CPUINFO_MOCK": int(options.mock),
Marat Dukhan3045d4f2017-03-04 01:51:42 -050019 }
Marat Dukhand3a63042018-06-15 01:26:04 -070020 if build.target.is_linux or build.target.is_android:
21 macros["_GNU_SOURCE"] = 1
Marat Dukhan547fa362017-03-03 02:47:26 -050022
23 build.export_cpath("include", ["cpuinfo.h"])
24
Marat Dukhanad935b52018-06-04 02:40:10 -070025 with build.options(source_dir="src", macros=macros, extra_include_dirs="src", deps=build.deps.clog):
Ashkan Aliabadic2092212020-05-08 20:40:33 -070026 sources = ["api.c", "init.c", "cache.c"]
Marat Dukhanc0a2f562017-12-23 19:55:25 -080027 if build.target.is_x86 or build.target.is_x86_64:
Marat Dukhan547fa362017-03-03 02:47:26 -050028 sources += [
Ashkan Aliabadidcf8e182020-03-19 19:34:26 -070029 "x86/init.c", "x86/info.c", "x86/isa.c", "x86/vendor.c",
30 "x86/uarch.c", "x86/name.c", "x86/topology.c",
Marat Dukhan547fa362017-03-03 02:47:26 -050031 "x86/cache/init.c", "x86/cache/descriptor.c", "x86/cache/deterministic.c",
32 ]
33 if build.target.is_macos:
34 sources += ["x86/mach/init.c"]
Marat Dukhanc0a2f562017-12-23 19:55:25 -080035 elif build.target.is_linux or build.target.is_android:
Marat Dukhan4ba0d042017-10-13 17:16:30 -040036 sources += [
37 "x86/linux/init.c",
38 "x86/linux/cpuinfo.c",
39 ]
Marat Dukhanab42e7e2017-05-09 13:19:39 +000040 if build.target.is_arm or build.target.is_arm64:
Marat Dukhan3c982762017-05-08 06:16:45 +000041 sources += ["arm/uarch.c", "arm/cache.c"]
Marat Dukhanc0a2f562017-12-23 19:55:25 -080042 if build.target.is_linux or build.target.is_android:
Marat Dukhan3c982762017-05-08 06:16:45 +000043 sources += [
44 "arm/linux/init.c",
Marat Dukhan271d7c32017-08-18 08:00:47 +000045 "arm/linux/cpuinfo.c",
Marat Dukhan7c775ab2017-10-15 21:50:11 +000046 "arm/linux/clusters.c",
47 "arm/linux/midr.c",
48 "arm/linux/chipset.c",
Marat Dukhan63a7a6b2017-11-29 15:11:56 -080049 "arm/linux/hwcap.c",
Marat Dukhan3c982762017-05-08 06:16:45 +000050 ]
Marat Dukhanab42e7e2017-05-09 13:19:39 +000051 if build.target.is_arm:
Marat Dukhandeaa8982017-11-28 11:07:11 -080052 sources.append("arm/linux/aarch32-isa.c")
Marat Dukhanab42e7e2017-05-09 13:19:39 +000053 elif build.target.is_arm64:
Marat Dukhandeaa8982017-11-28 11:07:11 -080054 sources.append("arm/linux/aarch64-isa.c")
Marat Dukhanc0a2f562017-12-23 19:55:25 -080055 if build.target.is_android:
56 sources += [
Marat Dukhanc0a2f562017-12-23 19:55:25 -080057 "arm/android/properties.c",
58 ]
Marat Dukhanab42e7e2017-05-09 13:19:39 +000059
Marat Dukhan547fa362017-03-03 02:47:26 -050060 if build.target.is_macos:
61 sources += ["mach/topology.c"]
Marat Dukhanc0a2f562017-12-23 19:55:25 -080062 if build.target.is_linux or build.target.is_android:
Marat Dukhan271d7c32017-08-18 08:00:47 +000063 sources += [
64 "linux/cpulist.c",
Marat Dukhan4ba0d042017-10-13 17:16:30 -040065 "linux/smallfile.c",
66 "linux/multiline.c",
Marat Dukhan271d7c32017-08-18 08:00:47 +000067 "linux/processors.c",
68 ]
Marat Dukhan079ccbd2017-08-09 17:00:32 -070069 if options.mock:
70 sources += ["linux/mockfile.c"]
Marat Dukhan547fa362017-03-03 02:47:26 -050071 build.static_library("cpuinfo", map(build.cc, sources))
72
Marat Dukhanad935b52018-06-04 02:40:10 -070073 with build.options(source_dir="tools", deps=[build, build.deps.clog]):
Marat Dukhan547fa362017-03-03 02:47:26 -050074 build.executable("cpu-info", build.cc("cpu-info.c"))
75 build.executable("isa-info", build.cc("isa-info.c"))
76 build.executable("cache-info", build.cc("cache-info.c"))
77
Marat Dukhan0de277f2017-09-22 14:25:10 -070078 if build.target.is_x86_64:
79 with build.options(source_dir="tools", include_dirs=["src", "include"]):
80 build.executable("cpuid-dump", build.cc("cpuid-dump.c"))
81
Marat Dukhanad935b52018-06-04 02:40:10 -070082 with build.options(source_dir="test", deps=[build, build.deps.clog, build.deps.googletest]):
Marat Dukhanee705c72017-05-08 10:18:03 +000083 build.smoketest("init-test", build.cxx("init.cc"))
Marat Dukhancc70cfb2017-09-26 19:11:14 -070084 if build.target.is_linux:
85 build.smoketest("get-current-test", build.cxx("get-current.cc"))
Marat Dukhan7e4b1862017-08-21 02:53:35 -070086 if build.target.is_x86_64:
87 build.smoketest("brand-string-test", build.cxx("name/brand-string.cc"))
Marat Dukhancc70cfb2017-09-26 19:11:14 -070088 if options.mock:
89 with build.options(source_dir="test", include_dirs="test", macros="CPUINFO_MOCK", deps=[build, build.deps.googletest]):
90 if build.target.is_arm64 and build.target.is_linux:
91 build.unittest("scaleway-test", build.cxx("scaleway.cc"))
Marat Dukhan419a8192017-05-08 12:25:17 +000092
Marat Dukhan8127f772017-11-10 21:02:28 +000093 if not options.mock:
Marat Dukhanad935b52018-06-04 02:40:10 -070094 with build.options(source_dir="bench", deps=[build, build.deps.clog, build.deps.googlebenchmark]):
Marat Dukhan9f3404b2017-12-07 00:24:39 -080095 build.benchmark("init-bench", build.cxx("init.cc"))
Marat Dukhan8127f772017-11-10 21:02:28 +000096 if not build.target.is_macos:
97 build.benchmark("get-current-bench", build.cxx("get-current.cc"))
98
Marat Dukhan547fa362017-03-03 02:47:26 -050099 return build
100
101
102if __name__ == "__main__":
103 import sys
104 main(sys.argv[1:]).generate()