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