1*ef3a692cSMatthias Maennichdef _translate_cpu(arch): 2*ef3a692cSMatthias Maennich if arch in ["i386", "i486", "i586", "i686", "i786", "x86"]: 3*ef3a692cSMatthias Maennich return "x86_32" 4*ef3a692cSMatthias Maennich if arch in ["amd64", "x86_64", "x64"]: 5*ef3a692cSMatthias Maennich return "x86_64" 6*ef3a692cSMatthias Maennich if arch in ["ppc", "ppc64", "ppc64le"]: 7*ef3a692cSMatthias Maennich return "ppc" 8*ef3a692cSMatthias Maennich if arch in ["arm", "armv7l"]: 9*ef3a692cSMatthias Maennich return "arm" 10*ef3a692cSMatthias Maennich if arch in ["aarch64"]: 11*ef3a692cSMatthias Maennich return "aarch64" 12*ef3a692cSMatthias Maennich if arch in ["s390x", "s390"]: 13*ef3a692cSMatthias Maennich return "s390x" 14*ef3a692cSMatthias Maennich if arch in ["mips64el", "mips64"]: 15*ef3a692cSMatthias Maennich return "mips64" 16*ef3a692cSMatthias Maennich if arch in ["riscv64"]: 17*ef3a692cSMatthias Maennich return "riscv64" 18*ef3a692cSMatthias Maennich return None 19*ef3a692cSMatthias Maennich 20*ef3a692cSMatthias Maennichdef _translate_os(os): 21*ef3a692cSMatthias Maennich if os.startswith("mac os"): 22*ef3a692cSMatthias Maennich return "osx" 23*ef3a692cSMatthias Maennich if os.startswith("freebsd"): 24*ef3a692cSMatthias Maennich return "freebsd" 25*ef3a692cSMatthias Maennich if os.startswith("openbsd"): 26*ef3a692cSMatthias Maennich return "openbsd" 27*ef3a692cSMatthias Maennich if os.startswith("linux"): 28*ef3a692cSMatthias Maennich return "linux" 29*ef3a692cSMatthias Maennich if os.startswith("windows"): 30*ef3a692cSMatthias Maennich return "windows" 31*ef3a692cSMatthias Maennich return None 32*ef3a692cSMatthias Maennich 33*ef3a692cSMatthias Maennichdef _host_platform_repo_impl(rctx): 34*ef3a692cSMatthias Maennich cpu = _translate_cpu(rctx.os.arch) 35*ef3a692cSMatthias Maennich os = _translate_os(rctx.os.name) 36*ef3a692cSMatthias Maennich 37*ef3a692cSMatthias Maennich cpu = "" if cpu == None else " '@platforms//cpu:%s',\n" % cpu 38*ef3a692cSMatthias Maennich os = "" if os == None else " '@platforms//os:%s',\n" % os 39*ef3a692cSMatthias Maennich 40*ef3a692cSMatthias Maennich rctx.file("BUILD.bazel", """ 41*ef3a692cSMatthias Maennich# DO NOT EDIT: automatically generated BUILD file 42*ef3a692cSMatthias Maennichexports_files(["constraints.bzl"]) 43*ef3a692cSMatthias Maennich""") 44*ef3a692cSMatthias Maennich 45*ef3a692cSMatthias Maennich rctx.file("constraints.bzl", """ 46*ef3a692cSMatthias Maennich# DO NOT EDIT: automatically generated constraints list 47*ef3a692cSMatthias MaennichHOST_CONSTRAINTS = [ 48*ef3a692cSMatthias Maennich%s%s] 49*ef3a692cSMatthias Maennich""" % (cpu, os)) 50*ef3a692cSMatthias Maennich 51*ef3a692cSMatthias Maennichhost_platform_repo = repository_rule( 52*ef3a692cSMatthias Maennich implementation = _host_platform_repo_impl, 53*ef3a692cSMatthias Maennich doc = """Generates constraints for the host platform. The constraints.bzl 54*ef3a692cSMatthias Maennichfile contains a single <code>HOST_CONSTRAINTS</code> variable, which is a 55*ef3a692cSMatthias Maennichlist of strings, each of which is a label to a <code>constraint_value</code> 56*ef3a692cSMatthias Maennichfor the host platform.""", 57*ef3a692cSMatthias Maennich) 58*ef3a692cSMatthias Maennich 59*ef3a692cSMatthias Maennichdef _host_platform_impl(_mctx): 60*ef3a692cSMatthias Maennich host_platform_repo(name = "host_platform") 61*ef3a692cSMatthias Maennich 62*ef3a692cSMatthias Maennichhost_platform = module_extension( 63*ef3a692cSMatthias Maennich implementation = _host_platform_impl, 64*ef3a692cSMatthias Maennich doc = """Generates a <code>host_platform_repo</code> repo named 65*ef3a692cSMatthias Maennich<code>host_platform</code>, containing constraints for the host platform.""", 66*ef3a692cSMatthias Maennich) 67*ef3a692cSMatthias Maennich 68