1*4882a593Smuzhiyuninherit siteinfo 2*4882a593Smuzhiyun 3*4882a593Smuzhiyundef meson_array(var, d): 4*4882a593Smuzhiyun items = d.getVar(var).split() 5*4882a593Smuzhiyun return repr(items[0] if len(items) == 1 else items) 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun# Map our ARCH values to what Meson expects: 8*4882a593Smuzhiyun# http://mesonbuild.com/Reference-tables.html#cpu-families 9*4882a593Smuzhiyundef meson_cpu_family(var, d): 10*4882a593Smuzhiyun import re 11*4882a593Smuzhiyun arch = d.getVar(var) 12*4882a593Smuzhiyun if arch == 'powerpc': 13*4882a593Smuzhiyun return 'ppc' 14*4882a593Smuzhiyun elif arch == 'powerpc64' or arch == 'powerpc64le': 15*4882a593Smuzhiyun return 'ppc64' 16*4882a593Smuzhiyun elif arch == 'armeb': 17*4882a593Smuzhiyun return 'arm' 18*4882a593Smuzhiyun elif arch == 'aarch64_be': 19*4882a593Smuzhiyun return 'aarch64' 20*4882a593Smuzhiyun elif arch == 'mipsel': 21*4882a593Smuzhiyun return 'mips' 22*4882a593Smuzhiyun elif arch == 'mips64el': 23*4882a593Smuzhiyun return 'mips64' 24*4882a593Smuzhiyun elif re.match(r"i[3-6]86", arch): 25*4882a593Smuzhiyun return "x86" 26*4882a593Smuzhiyun elif arch == "microblazeel": 27*4882a593Smuzhiyun return "microblaze" 28*4882a593Smuzhiyun else: 29*4882a593Smuzhiyun return arch 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun# Map our OS values to what Meson expects: 32*4882a593Smuzhiyun# https://mesonbuild.com/Reference-tables.html#operating-system-names 33*4882a593Smuzhiyundef meson_operating_system(var, d): 34*4882a593Smuzhiyun os = d.getVar(var) 35*4882a593Smuzhiyun if "mingw" in os: 36*4882a593Smuzhiyun return "windows" 37*4882a593Smuzhiyun # avoid e.g 'linux-gnueabi' 38*4882a593Smuzhiyun elif "linux" in os: 39*4882a593Smuzhiyun return "linux" 40*4882a593Smuzhiyun else: 41*4882a593Smuzhiyun return os 42*4882a593Smuzhiyun 43*4882a593Smuzhiyundef meson_endian(prefix, d): 44*4882a593Smuzhiyun arch, os = d.getVar(prefix + "_ARCH"), d.getVar(prefix + "_OS") 45*4882a593Smuzhiyun sitedata = siteinfo_data_for_machine(arch, os, d) 46*4882a593Smuzhiyun if "endian-little" in sitedata: 47*4882a593Smuzhiyun return "little" 48*4882a593Smuzhiyun elif "endian-big" in sitedata: 49*4882a593Smuzhiyun return "big" 50*4882a593Smuzhiyun else: 51*4882a593Smuzhiyun bb.fatal("Cannot determine endianism for %s-%s" % (arch, os)) 52