1*523fa7a6SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*523fa7a6SAndroid Build Coastguard Worker 3*523fa7a6SAndroid Build Coastguard Workerfrom __future__ import print_function 4*523fa7a6SAndroid Build Coastguard Workerimport os 5*523fa7a6SAndroid Build Coastguard Worker 6*523fa7a6SAndroid Build Coastguard Worker 7*523fa7a6SAndroid Build Coastguard WorkerCPUINFO_SOURCES = { 8*523fa7a6SAndroid Build Coastguard Worker None: [ 9*523fa7a6SAndroid Build Coastguard Worker "init.c", 10*523fa7a6SAndroid Build Coastguard Worker "api.c", 11*523fa7a6SAndroid Build Coastguard Worker "cache.c", 12*523fa7a6SAndroid Build Coastguard Worker "log.c", 13*523fa7a6SAndroid Build Coastguard Worker ], 14*523fa7a6SAndroid Build Coastguard Worker "defined(__linux__)": [ 15*523fa7a6SAndroid Build Coastguard Worker "linux/multiline.c", 16*523fa7a6SAndroid Build Coastguard Worker "linux/cpulist.c", 17*523fa7a6SAndroid Build Coastguard Worker "linux/mockfile.c", 18*523fa7a6SAndroid Build Coastguard Worker "linux/smallfile.c", 19*523fa7a6SAndroid Build Coastguard Worker "linux/processors.c", 20*523fa7a6SAndroid Build Coastguard Worker ], 21*523fa7a6SAndroid Build Coastguard Worker "defined(__MACH__) && defined(__APPLE__)": [ 22*523fa7a6SAndroid Build Coastguard Worker "mach/topology.c", 23*523fa7a6SAndroid Build Coastguard Worker ], 24*523fa7a6SAndroid Build Coastguard Worker "defined(__i386__) || defined(__i686__) || defined(__x86_64__) || defined(_WIN32)": [ 25*523fa7a6SAndroid Build Coastguard Worker "x86/cache/init.c", 26*523fa7a6SAndroid Build Coastguard Worker "x86/cache/deterministic.c", 27*523fa7a6SAndroid Build Coastguard Worker "x86/cache/descriptor.c", 28*523fa7a6SAndroid Build Coastguard Worker "x86/info.c", 29*523fa7a6SAndroid Build Coastguard Worker "x86/mockcpuid.c", 30*523fa7a6SAndroid Build Coastguard Worker "x86/isa.c", 31*523fa7a6SAndroid Build Coastguard Worker "x86/topology.c", 32*523fa7a6SAndroid Build Coastguard Worker "x86/name.c", 33*523fa7a6SAndroid Build Coastguard Worker "x86/init.c", 34*523fa7a6SAndroid Build Coastguard Worker "x86/uarch.c", 35*523fa7a6SAndroid Build Coastguard Worker "x86/vendor.c", 36*523fa7a6SAndroid Build Coastguard Worker ], 37*523fa7a6SAndroid Build Coastguard Worker "(defined(__i386__) || defined(__i686__) || defined(__x86_64__)) && defined(__linux__)": [ 38*523fa7a6SAndroid Build Coastguard Worker "x86/linux/init.c", 39*523fa7a6SAndroid Build Coastguard Worker "x86/linux/cpuinfo.c", 40*523fa7a6SAndroid Build Coastguard Worker ], 41*523fa7a6SAndroid Build Coastguard Worker "(defined(__i386__) || defined(__i686__) || defined(__x86_64__)) && defined(__MACH__) && defined(__APPLE__)": [ 42*523fa7a6SAndroid Build Coastguard Worker "x86/mach/init.c", 43*523fa7a6SAndroid Build Coastguard Worker ], 44*523fa7a6SAndroid Build Coastguard Worker "defined(_WIN32)": [ 45*523fa7a6SAndroid Build Coastguard Worker "x86/windows/init.c", 46*523fa7a6SAndroid Build Coastguard Worker ], 47*523fa7a6SAndroid Build Coastguard Worker "(defined(__arm__) || defined(__aarch64__)) && defined(__linux__)": [ 48*523fa7a6SAndroid Build Coastguard Worker "arm/linux/cpuinfo.c", 49*523fa7a6SAndroid Build Coastguard Worker "arm/linux/hwcap.c", 50*523fa7a6SAndroid Build Coastguard Worker "arm/linux/init.c", 51*523fa7a6SAndroid Build Coastguard Worker "arm/linux/clusters.c", 52*523fa7a6SAndroid Build Coastguard Worker "arm/linux/midr.c", 53*523fa7a6SAndroid Build Coastguard Worker "arm/linux/chipset.c", 54*523fa7a6SAndroid Build Coastguard Worker "arm/tlb.c", 55*523fa7a6SAndroid Build Coastguard Worker "arm/uarch.c", 56*523fa7a6SAndroid Build Coastguard Worker "arm/cache.c", 57*523fa7a6SAndroid Build Coastguard Worker ], 58*523fa7a6SAndroid Build Coastguard Worker "defined(__arm__) && defined(__linux__)": [ 59*523fa7a6SAndroid Build Coastguard Worker "arm/linux/aarch32-isa.c", 60*523fa7a6SAndroid Build Coastguard Worker ], 61*523fa7a6SAndroid Build Coastguard Worker "defined(__aarch64__) && defined(__linux__)": [ 62*523fa7a6SAndroid Build Coastguard Worker "arm/linux/aarch64-isa.c", 63*523fa7a6SAndroid Build Coastguard Worker ], 64*523fa7a6SAndroid Build Coastguard Worker "(defined(__arm__) || defined(__aarch64__)) && defined(__ANDROID__)": [ 65*523fa7a6SAndroid Build Coastguard Worker "arm/android/properties.c", 66*523fa7a6SAndroid Build Coastguard Worker ], 67*523fa7a6SAndroid Build Coastguard Worker "(defined(__arm__) || defined(__aarch64__)) && defined(TARGET_OS_MAC) && TARGET_OS_MAC": [ 68*523fa7a6SAndroid Build Coastguard Worker "arm/mach/init.c", 69*523fa7a6SAndroid Build Coastguard Worker ],} 70*523fa7a6SAndroid Build Coastguard Worker 71*523fa7a6SAndroid Build Coastguard Worker 72*523fa7a6SAndroid Build Coastguard Workerif __name__ == "__main__": 73*523fa7a6SAndroid Build Coastguard Worker for condition, filenames in CPUINFO_SOURCES.items(): 74*523fa7a6SAndroid Build Coastguard Worker for filename in filenames: 75*523fa7a6SAndroid Build Coastguard Worker filepath = os.path.join("cpuinfo-wrappers", filename) 76*523fa7a6SAndroid Build Coastguard Worker if not os.path.exists(os.path.dirname(filepath)): 77*523fa7a6SAndroid Build Coastguard Worker print(filepath) 78*523fa7a6SAndroid Build Coastguard Worker os.makedirs(os.path.dirname(filepath)) 79*523fa7a6SAndroid Build Coastguard Worker with open(filepath, "w") as wrapper: 80*523fa7a6SAndroid Build Coastguard Worker print("/* Auto-generated by generate-wrappers.py script. Do not modify */", file=wrapper) 81*523fa7a6SAndroid Build Coastguard Worker print(file=wrapper) 82*523fa7a6SAndroid Build Coastguard Worker print("#ifdef __APPLE__", file=wrapper) 83*523fa7a6SAndroid Build Coastguard Worker print("\t#include <TargetConditionals.h>", file=wrapper) 84*523fa7a6SAndroid Build Coastguard Worker print("#endif /* __APPLE__ */", file=wrapper) 85*523fa7a6SAndroid Build Coastguard Worker print(file=wrapper) 86*523fa7a6SAndroid Build Coastguard Worker 87*523fa7a6SAndroid Build Coastguard Worker if not condition: 88*523fa7a6SAndroid Build Coastguard Worker print("#include <%s>" % filename, file=wrapper) 89*523fa7a6SAndroid Build Coastguard Worker else: 90*523fa7a6SAndroid Build Coastguard Worker # Include source file only if condition is satisfied 91*523fa7a6SAndroid Build Coastguard Worker print("#if %s" % condition, file=wrapper) 92*523fa7a6SAndroid Build Coastguard Worker print("#include <%s>" % filename, file=wrapper) 93*523fa7a6SAndroid Build Coastguard Worker print("#endif /* %s */" % condition, file=wrapper) 94