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