Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | |
| 3 | |
| 4 | import confu |
| 5 | parser = confu.standard_parser("cpuinfo configuration script") |
| 6 | parser.add_argument("--log", dest="log_level", |
Marat Dukhan | 52b2c08 | 2018-12-16 02:34:43 -0800 | [diff] [blame] | 7 | choices=("none", "fatal", "error", "warning", "info", "debug"), default="error") |
Marat Dukhan | 51a3427 | 2017-05-08 05:13:19 -0400 | [diff] [blame] | 8 | parser.add_argument("--mock", dest="mock", action="store_true") |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 9 | |
| 10 | |
| 11 | def main(args): |
| 12 | options = parser.parse_args(args) |
| 13 | build = confu.Build.from_options(options) |
Marat Dukhan | 3045d4f | 2017-03-04 01:51:42 -0500 | [diff] [blame] | 14 | |
| 15 | macros = { |
Marat Dukhan | 52b2c08 | 2018-12-16 02:34:43 -0800 | [diff] [blame] | 16 | "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 Dukhan | cf70aee | 2018-03-24 23:21:02 -0700 | [diff] [blame] | 18 | "CPUINFO_MOCK": int(options.mock), |
Marat Dukhan | 3045d4f | 2017-03-04 01:51:42 -0500 | [diff] [blame] | 19 | } |
Marat Dukhan | d3a6304 | 2018-06-15 01:26:04 -0700 | [diff] [blame] | 20 | if build.target.is_linux or build.target.is_android: |
| 21 | macros["_GNU_SOURCE"] = 1 |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 22 | |
| 23 | build.export_cpath("include", ["cpuinfo.h"]) |
| 24 | |
Marat Dukhan | ad935b5 | 2018-06-04 02:40:10 -0700 | [diff] [blame] | 25 | with build.options(source_dir="src", macros=macros, extra_include_dirs="src", deps=build.deps.clog): |
Ashkan Aliabadi | c209221 | 2020-05-08 20:40:33 -0700 | [diff] [blame] | 26 | sources = ["api.c", "init.c", "cache.c"] |
Marat Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 27 | if build.target.is_x86 or build.target.is_x86_64: |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 28 | sources += [ |
Ashkan Aliabadi | dcf8e18 | 2020-03-19 19:34:26 -0700 | [diff] [blame] | 29 | "x86/init.c", "x86/info.c", "x86/isa.c", "x86/vendor.c", |
| 30 | "x86/uarch.c", "x86/name.c", "x86/topology.c", |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 31 | "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 Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 35 | elif build.target.is_linux or build.target.is_android: |
Marat Dukhan | 4ba0d04 | 2017-10-13 17:16:30 -0400 | [diff] [blame] | 36 | sources += [ |
| 37 | "x86/linux/init.c", |
| 38 | "x86/linux/cpuinfo.c", |
| 39 | ] |
Marat Dukhan | ab42e7e | 2017-05-09 13:19:39 +0000 | [diff] [blame] | 40 | if build.target.is_arm or build.target.is_arm64: |
Marat Dukhan | 3c98276 | 2017-05-08 06:16:45 +0000 | [diff] [blame] | 41 | sources += ["arm/uarch.c", "arm/cache.c"] |
Marat Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 42 | if build.target.is_linux or build.target.is_android: |
Marat Dukhan | 3c98276 | 2017-05-08 06:16:45 +0000 | [diff] [blame] | 43 | sources += [ |
| 44 | "arm/linux/init.c", |
Marat Dukhan | 271d7c3 | 2017-08-18 08:00:47 +0000 | [diff] [blame] | 45 | "arm/linux/cpuinfo.c", |
Marat Dukhan | 7c775ab | 2017-10-15 21:50:11 +0000 | [diff] [blame] | 46 | "arm/linux/clusters.c", |
| 47 | "arm/linux/midr.c", |
| 48 | "arm/linux/chipset.c", |
Marat Dukhan | 63a7a6b | 2017-11-29 15:11:56 -0800 | [diff] [blame] | 49 | "arm/linux/hwcap.c", |
Marat Dukhan | 3c98276 | 2017-05-08 06:16:45 +0000 | [diff] [blame] | 50 | ] |
Marat Dukhan | ab42e7e | 2017-05-09 13:19:39 +0000 | [diff] [blame] | 51 | if build.target.is_arm: |
Marat Dukhan | deaa898 | 2017-11-28 11:07:11 -0800 | [diff] [blame] | 52 | sources.append("arm/linux/aarch32-isa.c") |
Marat Dukhan | ab42e7e | 2017-05-09 13:19:39 +0000 | [diff] [blame] | 53 | elif build.target.is_arm64: |
Marat Dukhan | deaa898 | 2017-11-28 11:07:11 -0800 | [diff] [blame] | 54 | sources.append("arm/linux/aarch64-isa.c") |
Marat Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 55 | if build.target.is_android: |
| 56 | sources += [ |
Marat Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 57 | "arm/android/properties.c", |
| 58 | ] |
Marat Dukhan | ab42e7e | 2017-05-09 13:19:39 +0000 | [diff] [blame] | 59 | |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 60 | if build.target.is_macos: |
| 61 | sources += ["mach/topology.c"] |
Marat Dukhan | c0a2f56 | 2017-12-23 19:55:25 -0800 | [diff] [blame] | 62 | if build.target.is_linux or build.target.is_android: |
Marat Dukhan | 271d7c3 | 2017-08-18 08:00:47 +0000 | [diff] [blame] | 63 | sources += [ |
| 64 | "linux/cpulist.c", |
Marat Dukhan | 4ba0d04 | 2017-10-13 17:16:30 -0400 | [diff] [blame] | 65 | "linux/smallfile.c", |
| 66 | "linux/multiline.c", |
Marat Dukhan | 271d7c3 | 2017-08-18 08:00:47 +0000 | [diff] [blame] | 67 | "linux/processors.c", |
| 68 | ] |
Marat Dukhan | 079ccbd | 2017-08-09 17:00:32 -0700 | [diff] [blame] | 69 | if options.mock: |
| 70 | sources += ["linux/mockfile.c"] |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 71 | build.static_library("cpuinfo", map(build.cc, sources)) |
| 72 | |
Marat Dukhan | ad935b5 | 2018-06-04 02:40:10 -0700 | [diff] [blame] | 73 | with build.options(source_dir="tools", deps=[build, build.deps.clog]): |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 74 | 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 Dukhan | 0de277f | 2017-09-22 14:25:10 -0700 | [diff] [blame] | 78 | 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 Dukhan | ad935b5 | 2018-06-04 02:40:10 -0700 | [diff] [blame] | 82 | with build.options(source_dir="test", deps=[build, build.deps.clog, build.deps.googletest]): |
Marat Dukhan | ee705c7 | 2017-05-08 10:18:03 +0000 | [diff] [blame] | 83 | build.smoketest("init-test", build.cxx("init.cc")) |
Marat Dukhan | cc70cfb | 2017-09-26 19:11:14 -0700 | [diff] [blame] | 84 | if build.target.is_linux: |
| 85 | build.smoketest("get-current-test", build.cxx("get-current.cc")) |
Marat Dukhan | 7e4b186 | 2017-08-21 02:53:35 -0700 | [diff] [blame] | 86 | if build.target.is_x86_64: |
| 87 | build.smoketest("brand-string-test", build.cxx("name/brand-string.cc")) |
Marat Dukhan | cc70cfb | 2017-09-26 19:11:14 -0700 | [diff] [blame] | 88 | 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 Dukhan | 419a819 | 2017-05-08 12:25:17 +0000 | [diff] [blame] | 92 | |
Marat Dukhan | 8127f77 | 2017-11-10 21:02:28 +0000 | [diff] [blame] | 93 | if not options.mock: |
Marat Dukhan | ad935b5 | 2018-06-04 02:40:10 -0700 | [diff] [blame] | 94 | with build.options(source_dir="bench", deps=[build, build.deps.clog, build.deps.googlebenchmark]): |
Marat Dukhan | 9f3404b | 2017-12-07 00:24:39 -0800 | [diff] [blame] | 95 | build.benchmark("init-bench", build.cxx("init.cc")) |
Marat Dukhan | 8127f77 | 2017-11-10 21:02:28 +0000 | [diff] [blame] | 96 | if not build.target.is_macos: |
| 97 | build.benchmark("get-current-bench", build.cxx("get-current.cc")) |
| 98 | |
Marat Dukhan | 547fa36 | 2017-03-03 02:47:26 -0500 | [diff] [blame] | 99 | return build |
| 100 | |
| 101 | |
| 102 | if __name__ == "__main__": |
| 103 | import sys |
| 104 | main(sys.argv[1:]).generate() |