llvm-project-source.inc 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. deltask do_configure
  2. deltask do_compile
  3. deltask do_install
  4. deltask do_populate_sysroot
  5. deltask do_populate_lic
  6. RM_WORK_EXCLUDE += "${PN}"
  7. inherit nopackages
  8. PN = "llvm-project-source-${PV}"
  9. WORKDIR = "${TMPDIR}/work-shared/llvm-project-source-${PV}-${PR}"
  10. SSTATE_SWSPEC = "sstate:llvm-project-source::${PV}:${PR}::${SSTATE_VERSION}:"
  11. STAMP = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-${PR}"
  12. STAMPCLEAN = "${STAMPS_DIR}/work-shared/llvm-project-source-${PV}-*"
  13. INHIBIT_DEFAULT_DEPS = "1"
  14. DEPENDS = ""
  15. PACKAGES = ""
  16. TARGET_ARCH = "allarch"
  17. TARGET_AS_ARCH = "none"
  18. TARGET_CC_ARCH = "none"
  19. TARGET_LD_ARCH = "none"
  20. TARGET_OS = "linux"
  21. baselib = "lib"
  22. PACKAGE_ARCH = "all"
  23. B = "${WORKDIR}/build"
  24. # space separated list of additional distro vendor values we want to support e.g.
  25. # "yoe webos" or "-yoe -webos" '-' is optional
  26. CLANG_EXTRA_OE_VENDORS ?= "${TARGET_VENDOR} ${SDK_VENDOR}"
  27. # Extra OE DISTRO that want to support as build host. space separated list of additional distro.
  28. # ":" separated the ID in "/etc/os-release" and the triple for finding gcc on this OE DISTRO.
  29. # eg: "poky:poky wrlinux:wrs"
  30. CLANG_EXTRA_OE_DISTRO ?= "poky:poky"
  31. # Match with MULTILIB_GLOBAL_VARIANTS
  32. ML_VARIANTS = "lib32 lib64 libx32"
  33. python do_preconfigure() {
  34. import subprocess
  35. case = ""
  36. triple = ""
  37. vendors = d.getVar('CLANG_EXTRA_OE_VENDORS')
  38. multilib_variants = (d.getVar("ML_VARIANTS") or "").split()
  39. vendors_to_add = []
  40. for vendor in vendors.split():
  41. # convert -yoe into yoe
  42. vendor = vendor.lstrip('-')
  43. # generate possible multilib vendor names for yoe
  44. # such as yoemllib32
  45. vendors_to_add.extend([vendor + 'ml' + variant for variant in multilib_variants])
  46. # skip oe since already part of the cpp file
  47. if vendor != "oe":
  48. vendors_to_add.append(vendor)
  49. for vendor_to_add in vendors_to_add:
  50. case += '\\n .Case("' + vendor_to_add + '", Triple::OpenEmbedded)'
  51. triple += ' "x86_64-' + vendor_to_add + '-linux",'
  52. bb.note("Adding support following TARGET_VENDOR values")
  53. bb.note(str(vendors_to_add))
  54. bb.note("in llvm/lib/TargetParser/Triple.cpp and ${S}/clang/lib/Driver/ToolChains/Gnu.cpp")
  55. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Gnu.cpp" % (triple))
  56. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  57. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_VENDORS_CASES#%s#g' -i ${S}/llvm/lib/TargetParser/Triple.cpp" % (case))
  58. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  59. case = ""
  60. triple = ""
  61. name = ""
  62. check = ""
  63. oe_names = ""
  64. distros = d.getVar('CLANG_EXTRA_OE_DISTRO')
  65. for distro in distros.split():
  66. distro_id = distro.split(":")[0].replace('-','_')
  67. distro_triple = distro.split(":")[1]
  68. case += '\\n .Case("' + distro_id + '", Distro::' + distro_id.upper() + ')'
  69. triple += '\\n if (Distro.Is' + distro_id.upper() + '())\\n return "x86_64-' + distro_triple + '-linux",'
  70. name += '\\n '+ distro_id.upper() + ','
  71. check += '\\nbool Is' + distro_id.upper() + '() const { return DistroVal == ' + distro_id.upper() + '; }'
  72. oe_names += distro_id.upper() + ' ||'
  73. check += '\\nbool IsOpenEmbedded() const { return DistroVal == ' + oe_names[0:-3] + '; }'
  74. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_NAME#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (name))
  75. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  76. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CHECK#%s#g' ${S}/clang/include/clang/Driver/Distro.h" % (check))
  77. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  78. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_TRIPLES#%s#g' ${S}/clang/lib/Driver/ToolChains/Linux.cpp" % (triple))
  79. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  80. cmd = d.expand("sed -i 's#//CLANG_EXTRA_OE_DISTRO_CASES#%s#g' -i ${S}/clang/lib/Driver/Distro.cpp" % (case))
  81. subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
  82. }
  83. do_patch[vardepsexclude] += "MULTILIBS MULTILIB_VARIANTS"
  84. addtask do_preconfigure after do_patch
  85. do_create_spdx[depends] += "${PN}:do_preconfigure"