tcmode-external-sourcery.inc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #
  2. # Configuration to use external Sourcery G++ toolchain
  3. #
  4. EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}"
  5. TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
  6. PATH =. "${TOOLCHAIN_PATH_ADD}"
  7. CSL_TARGET_SYS_powerpc ?= "powerpc-linux-gnu"
  8. CSL_TARGET_SYS_powerpc64 ?= "powerpc-linux-gnu"
  9. CSL_TARGET_SYS_arm ?= "arm-none-linux-gnueabi"
  10. CSL_TARGET_SYS_mips ?= "mips-linux-gnu"
  11. CSL_TARGET_SYS_mipsel ?= "mips-linux-gnu"
  12. CSL_TARGET_SYS_mips64 ?= "mips-linux-gnu"
  13. CSL_TARGET_SYS_i686 ?= "i686-pc-linux-gnu"
  14. CSL_TARGET_SYS_i586 ?= "i686-pc-linux-gnu"
  15. CSL_TARGET_SYS = "${TARGET_SYS}"
  16. TARGET_PREFIX = "${CSL_TARGET_SYS}-"
  17. PREFERRED_PROVIDER_linux-libc-headers = "external-sourcery-toolchain"
  18. PREFERRED_PROVIDER_linux-libc-headers-dev = "external-sourcery-toolchain"
  19. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-sourcery-toolchain"
  20. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-sourcery-toolchain"
  21. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-sourcery-toolchain"
  22. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-sourcery-toolchain"
  23. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-sourcery-toolchain"
  24. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "external-sourcery-toolchain"
  25. PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-sourcery-toolchain"
  26. PREFERRED_PROVIDER_libgcc = "external-sourcery-toolchain"
  27. PREFERRED_PROVIDER_virtual/libc = "external-sourcery-toolchain"
  28. PREFERRED_PROVIDER_virtual/libintl = "external-sourcery-toolchain"
  29. PREFERRED_PROVIDER_virtual/libiconv = "external-sourcery-toolchain"
  30. PREFERRED_PROVIDER_glibc-thread-db = "external-sourcery-toolchain"
  31. PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-sourcery-toolchain"
  32. PREFERRED_PROVIDER_gdbserver ??= "external-sourcery-toolchain"
  33. # No need to re-compile the locale files
  34. GLIBC_INTERNAL_USE_BINARY_LOCALE = "precompiled"
  35. ENABLE_BINARY_LOCALE_GENERATION = ""
  36. TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
  37. # Point to the appropriate multilib sysroot from the external toolchain, whose
  38. # files will be extracted into the OE sysroot
  39. def exttc_run(d, cmd):
  40. try:
  41. return bb.process.run(cmd, shell=True, env={'PATH': d.getVar('PATH', True)})[0].rstrip()
  42. except (OSError, bb.process.CmdError):
  43. return ''
  44. EXTERNAL_TOOLCHAIN_SYSROOT_CMD = "${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} -print-sysroot"
  45. EXTERNAL_TOOLCHAIN_SYSROOT ??= "${@exttc_run(d, EXTERNAL_TOOLCHAIN_SYSROOT_CMD)}"
  46. # These bits are here temporarily to sidestep the need to use a separate set
  47. # of tune files to pass the appropriate multilib selection arguments to the
  48. # sourcery toolchain, as is needed to extract the sysroot content.
  49. TUNE_CCARGS_append_x86 = " -msgxx-glibc"
  50. CSL_MULTILIB_ARGS[ppce500] ?= "-te500v1"
  51. CSL_MULTILIB_ARGS[ppce500mc] ?= "-te500mc"
  52. CSL_MULTILIB_ARGS[ppce500v2] ?= "-te500v2"
  53. CSL_MULTILIB_ARGS[ppce600] ?= "-te600"
  54. def csl_multilib_arg(d):
  55. argument = d.getVarFlag('CSL_MULTILIB_ARGS', d.getVar('DEFAULTTUNE', True) or '')
  56. if argument:
  57. return argument
  58. else:
  59. return ''
  60. EXTERNAL_TOOLCHAIN_SYSROOT_CMD += "${@csl_multilib_arg(d)}"
  61. # Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its
  62. # bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding
  63. # this bindir to our PATH, and instead add symlinks to the prefixed binaries
  64. # to our staging toolchain bindir.
  65. python toolchain_metadata_setup () {
  66. d = e.data
  67. l = d.createCopy()
  68. l.finalize()
  69. if os.path.exists(bb.data.expand('${EXTERNAL_TOOLCHAIN}/bin/gcc', l)):
  70. d.setVar('TOOLCHAIN_PATH_ADD', '')
  71. }
  72. addhandler toolchain_metadata_setup
  73. toolchain_metadata_setup[eventmask] = "bb.event.ConfigParsed"
  74. python toolchain_setup () {
  75. d = e.data
  76. if not d.getVar('TOOLCHAIN_PATH_ADD', True):
  77. populate_toolchain_links(d)
  78. }
  79. addhandler toolchain_setup
  80. toolchain_setup[eventmask] = "bb.event.BuildStarted"
  81. def populate_toolchain_links(d):
  82. import errno
  83. from glob import glob
  84. d = d.createCopy()
  85. d.finalize()
  86. pattern = d.expand('${EXTERNAL_TOOLCHAIN}/bin/${TARGET_PREFIX}*')
  87. files = glob(pattern)
  88. if not files:
  89. bb.fatal("Unable to populate toolchain binary symlinks in %s" % pattern)
  90. bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True)
  91. bb.mkdirhier(bindir)
  92. for f in files:
  93. base = os.path.basename(f)
  94. newpath = os.path.join(bindir, base)
  95. try:
  96. os.symlink(f, newpath)
  97. except OSError as exc:
  98. if exc.errno == errno.EEXIST:
  99. break
  100. bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc))
  101. require conf/distro/include/csl-versions.inc