tcmode-external-oe-sdk.inc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. require conf/distro/include/tcmode-external.inc
  2. TCMODEOVERRIDES .= ":tcmode-external-oe-sdk"
  3. EXTERNAL_TARGET_SYS ?= "${TARGET_SYS}"
  4. EXTERNAL_SDK_SYS ?= "${SDK_SYS}"
  5. EXTERNAL_TOOLCHAIN_BIN = "${EXTERNAL_TOOLCHAIN}/sysroots/${EXTERNAL_SDK_SYS}/usr/bin/${EXTERNAL_TARGET_SYS}"
  6. EXTERNAL_MULTIMACH_TARGET_SYS ?= "${MULTIMACH_TARGET_SYS}"
  7. EXTERNAL_TOOLCHAIN_SYSROOT = "${EXTERNAL_TOOLCHAIN}/sysroots/${EXTERNAL_MULTIMACH_TARGET_SYS}"
  8. EXTERNAL_CC = "${EXTERNAL_TARGET_SYS}-gcc --sysroot=${EXTERNAL_TOOLCHAIN_SYSROOT}"
  9. EXTERNAL_TOOLCHAIN_FEATURES_append = " locale-utf8-is-default"
  10. # Our headers are already multilib
  11. oe_multilib_header_pn-glibc-external = ":"
  12. python extract_env_setup_metadata() {
  13. import pathlib
  14. import subprocess
  15. external_toolchain = pathlib.Path(d.getVar('EXTERNAL_TOOLCHAIN'))
  16. if external_toolchain.is_absolute() and external_toolchain.is_dir():
  17. setup = d.getVar('EXTERNAL_TOOLCHAIN_SETUP_SCRIPT')
  18. if setup:
  19. setup = pathlib.Path(setup)
  20. else:
  21. arch = d.getVar('TUNE_PKGARCH')
  22. setups = external_toolchain.glob('environment-setup-' + arch + '-*')
  23. if not setups:
  24. bb.fatal('tcmode-external-oe-sdk: failed to determine setup script path for sdk at {}, please set EXTERNAL_TOOLCHAIN_SETUP_SCRIPT to the full path to the environment setup script.'.format(external_toolchain))
  25. else:
  26. setups = list(setups)
  27. if len(setups) > 1:
  28. bb.fatal('tcmode-external-oe-sdk: multiple setup scripts available at {}, please specify the path in EXTERNAL_TOOLCHAIN_SETUP_SCRIPT'.format(external_toolchain))
  29. else:
  30. setup = setups[0]
  31. env = parse_setup_script(setup)
  32. target_sys = env.get('TARGET_PREFIX')[:-1]
  33. native_sysroot = pathlib.Path(env.get('OECORE_NATIVE_SYSROOT'))
  34. d.setVar('EXTERNAL_TARGET_SYS', str(target_sys))
  35. d.setVar('EXTERNAL_TOOLCHAIN_BIN', str(native_sysroot / 'usr' / 'bin' / target_sys))
  36. d.setVar('EXTERNAL_TOOLCHAIN_SYSROOT', env.get('SDKTARGETSYSROOT'))
  37. }
  38. extract_env_setup_metadata[eventmask] = "bb.event.ConfigParsed"
  39. addhandler extract_env_setup_metadata
  40. def parse_setup_script(setup):
  41. import shlex
  42. import subprocess
  43. with open(setup, 'r') as f:
  44. value = f.read()
  45. values = {}
  46. for line in value.splitlines():
  47. if line.split():
  48. split = shlex.split(line)
  49. if split and split[0] == 'export':
  50. k, v = split[1].split('=', 1)
  51. values[k] = v
  52. return values