# waf is a build system which is used by samba related project. # Obtain details from https://wiki.samba.org/index.php/Waf # inherit qemu pythonnative DEPENDS += "qemu-native libxslt-native docbook-xsl-stylesheets-native python" CONFIGUREOPTS = " --prefix=${prefix} \ --bindir=${bindir} \ --sbindir=${sbindir} \ --libexecdir=${libexecdir} \ --datadir=${datadir} \ --sysconfdir=${sysconfdir} \ --sharedstatedir=${sharedstatedir} \ --localstatedir=${localstatedir} \ --libdir=${libdir} \ --includedir=${includedir} \ --oldincludedir=${oldincludedir} \ --infodir=${infodir} \ --mandir=${mandir} \ ${PACKAGECONFIG_CONFARGS} \ " # avoids build breaks when using no-static-libs.inc DISABLE_STATIC = "" def get_waf_parallel_make(d): pm = d.getVar('PARALLEL_MAKE') if pm: # look for '-j' and throw other options (e.g. '-l') away # because they might have different meaning in bjam pm = pm.split() while pm: opt = pm.pop(0) if opt == '-j': v = pm.pop(0) elif opt.startswith('-j'): v = opt[2:].strip() else: continue v = min(64, int(v)) return '-j' + str(v) return "" # Three methods for waf cross compile: # 1. answers: # Only --cross-answers - try the cross-answers file, and if # there's no corresponding answer, add to the file and mark # the configure process as unfinished. # 2. exec: # Only --cross-execute - get the answer from cross-execute, # an emulator (qemu) is used to run cross-compiled binaries. # 3. both: # (notes: not supported in lower version of some packages, # please check buildtools/wafsamba/samba_cross.py in the # package source) # Try the cross-answers file first, and if there is no # corresponding answer, use cross-execute to get an answer, # and add that answer to the file. # # The first one is preferred since it may fail with 2 or 3 if # the target board is not suported by qemu, but we can use 2 or 3 # to help generate the cross answer when adding new board support. CROSS_METHOD ?= "answer" do_configure() { # Prepare the cross-answers file WAF_CROSS_ANSWERS_PATH="${THISDIR}/../../files/waf-cross-answers" CROSS_ANSWERS="${B}/cross-answers-${TARGET_ARCH}.txt" if [ -e ${CROSS_ANSWERS} ]; then rm -f ${CROSS_ANSWERS} fi echo 'Checking uname machine type: "${TARGET_ARCH}"' >> ${CROSS_ANSWERS} echo 'Checking uname release type: "${OLDEST_KERNEL}"' >> ${CROSS_ANSWERS} cat ${WAF_CROSS_ANSWERS_PATH}/cross-answers-${TARGET_ARCH}.txt >> ${CROSS_ANSWERS} qemu_binary="${@qemu_target_binary(d)}" if [ "${qemu_binary}" = "qemu-allarch" ]; then qemu_binary="qemuwrapper" fi libdir_qemu="${STAGING_DIR_HOST}/${libdir}" base_libdir_qemu="${STAGING_DIR_HOST}/${base_libdir}" CROSS_EXEC="${qemu_binary} \ ${QEMU_OPTIONS} \ -L ${STAGING_DIR_HOST} \ -E LD_LIBRARY_PATH=${libdir_qemu}:${base_libdir_qemu}" export BUILD_ARCH=${BUILD_ARCH} export HOST_ARCH=${HOST_ARCH} export STAGING_LIBDIR=${STAGING_LIBDIR} export STAGING_INCDIR=${STAGING_INCDIR} export PYTHONPATH=${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR} CONFIG_CMD="./configure ${CONFIGUREOPTS} ${EXTRA_OECONF} --cross-compile" if [ "${CROSS_METHOD}" = "answer" ]; then ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}" elif [ "${CROSS_METHOD}" = "exec" ]; then ${CONFIG_CMD} --cross-exec="${CROSS_EXEC}" elif [ "${CROSS_METHOD}" = "both" ]; then ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}" --cross-exec="${CROSS_EXEC}" else echo "ERROR: ${CROSS_METHOD} is not valid for cross-compile!" exit 1 fi } do_compile[progress] = "outof:^\[\s*(\d+)/\s*(\d+)\]\s+" do_compile () { python ./buildtools/bin/waf ${@oe.utils.parallel_make_argument(d, '-j%d', limit=64)} } do_install() { oe_runmake install DESTDIR=${D} }