Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 1 | # waf is a build system which is used by samba related project. |
| 2 | # Obtain details from https://wiki.samba.org/index.php/Waf |
| 3 | # |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 4 | inherit qemu pythonnative waf |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 5 | |
| 6 | DEPENDS += "qemu-native libxslt-native docbook-xsl-stylesheets-native python" |
| 7 | |
| 8 | CONFIGUREOPTS = " --prefix=${prefix} \ |
| 9 | --bindir=${bindir} \ |
| 10 | --sbindir=${sbindir} \ |
| 11 | --libexecdir=${libexecdir} \ |
| 12 | --datadir=${datadir} \ |
| 13 | --sysconfdir=${sysconfdir} \ |
| 14 | --sharedstatedir=${sharedstatedir} \ |
| 15 | --localstatedir=${localstatedir} \ |
| 16 | --libdir=${libdir} \ |
| 17 | --includedir=${includedir} \ |
| 18 | --oldincludedir=${oldincludedir} \ |
| 19 | --infodir=${infodir} \ |
| 20 | --mandir=${mandir} \ |
Patrick Williams | ddad1a1 | 2017-02-23 20:36:32 -0600 | [diff] [blame] | 21 | ${PACKAGECONFIG_CONFARGS} \ |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 22 | " |
| 23 | |
| 24 | # Three methods for waf cross compile: |
| 25 | # 1. answers: |
| 26 | # Only --cross-answers - try the cross-answers file, and if |
| 27 | # there's no corresponding answer, add to the file and mark |
| 28 | # the configure process as unfinished. |
| 29 | # 2. exec: |
| 30 | # Only --cross-execute - get the answer from cross-execute, |
| 31 | # an emulator (qemu) is used to run cross-compiled binaries. |
| 32 | # 3. both: |
| 33 | # (notes: not supported in lower version of some packages, |
| 34 | # please check buildtools/wafsamba/samba_cross.py in the |
| 35 | # package source) |
| 36 | # Try the cross-answers file first, and if there is no |
| 37 | # corresponding answer, use cross-execute to get an answer, |
| 38 | # and add that answer to the file. |
| 39 | # |
| 40 | # The first one is preferred since it may fail with 2 or 3 if |
| 41 | # the target board is not suported by qemu, but we can use 2 or 3 |
| 42 | # to help generate the cross answer when adding new board support. |
| 43 | CROSS_METHOD ?= "answer" |
| 44 | |
| 45 | do_configure() { |
| 46 | |
| 47 | # Prepare the cross-answers file |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 48 | WAF_CROSS_ANSWERS_PATH="${THISDIR}/../../files/waf-cross-answers" |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 49 | CROSS_ANSWERS="${B}/cross-answers-${TARGET_ARCH}.txt" |
| 50 | if [ -e ${CROSS_ANSWERS} ]; then |
| 51 | rm -f ${CROSS_ANSWERS} |
| 52 | fi |
| 53 | echo 'Checking uname machine type: "${TARGET_ARCH}"' >> ${CROSS_ANSWERS} |
| 54 | echo 'Checking uname release type: "${OLDEST_KERNEL}"' >> ${CROSS_ANSWERS} |
| 55 | cat ${WAF_CROSS_ANSWERS_PATH}/cross-answers-${TARGET_ARCH}.txt >> ${CROSS_ANSWERS} |
| 56 | |
| 57 | qemu_binary="${@qemu_target_binary(d)}" |
| 58 | if [ "${qemu_binary}" = "qemu-allarch" ]; then |
| 59 | qemu_binary="qemuwrapper" |
| 60 | fi |
| 61 | |
| 62 | libdir_qemu="${STAGING_DIR_HOST}/${libdir}" |
| 63 | base_libdir_qemu="${STAGING_DIR_HOST}/${base_libdir}" |
| 64 | |
| 65 | CROSS_EXEC="${qemu_binary} \ |
| 66 | ${QEMU_OPTIONS} \ |
| 67 | -L ${STAGING_DIR_HOST} \ |
| 68 | -E LD_LIBRARY_PATH=${libdir_qemu}:${base_libdir_qemu}" |
| 69 | |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 70 | export BUILD_ARCH=${BUILD_ARCH} |
| 71 | export HOST_ARCH=${HOST_ARCH} |
| 72 | export STAGING_LIBDIR=${STAGING_LIBDIR} |
| 73 | export STAGING_INCDIR=${STAGING_INCDIR} |
| 74 | export PYTHONPATH=${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} |
| 75 | |
| 76 | CONFIG_CMD="./configure ${CONFIGUREOPTS} ${EXTRA_OECONF} --cross-compile" |
| 77 | if [ "${CROSS_METHOD}" = "answer" ]; then |
| 78 | ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}" |
| 79 | elif [ "${CROSS_METHOD}" = "exec" ]; then |
| 80 | ${CONFIG_CMD} --cross-exec="${CROSS_EXEC}" |
| 81 | elif [ "${CROSS_METHOD}" = "both" ]; then |
| 82 | ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}" --cross-exec="${CROSS_EXEC}" |
| 83 | else |
| 84 | echo "ERROR: ${CROSS_METHOD} is not valid for cross-compile!" |
| 85 | exit 1 |
| 86 | fi |
| 87 | } |
| 88 | |
| 89 | do_compile () { |
Brad Bishop | 6e60e8b | 2018-02-01 10:27:11 -0500 | [diff] [blame] | 90 | python ./buildtools/bin/waf ${@get_waf_parallel_make(d)} |
Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame] | 91 | } |
| 92 | |
| 93 | do_install() { |
| 94 | oe_runmake install DESTDIR=${D} |
| 95 | } |