Articles/Battles with Cockpit
I had the task of creating a recipe for the Performance Co-Pilot, a system-level performance monitoring and management tool. What didn't help is that I knew nothing about the project itself. I've been working with Yocto for almost 3 years. I'm getting better, but am still learning, as this experience has shown me. Here is my story.
I started by using devtool's recipe generation feature.
$ devtool add devtool add pcp https://github.com/performancecopilot/pcp.git
It gave me a recipe, let's take a look
# Recipe created by recipetool # This is the basis of a recipe and may need further editing in order to be fully functional. # (Feel free to remove these comments when editing.) SUMMARY = "System-level performance monitoring and performance management" # WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is # your responsibility to verify that the values are complete and correct. # # NOTE: multiple licenses have been detected; they have been separated with & # in the LICENSE value for now since it is a reasonable assumption that all # of the licenses apply. If instead there is a choice between the multiple # licenses then you should change the value to separate the licenses with | # instead of &. If there is any doubt, check the accompanying documentation # to determine which situation is applicable. # # The following license files were not able to be identified and are # represented as "Unknown" below, you will need to check them yourself: # COPYING # man/html/qwtlicense.html # debian/copyright # build/mac/installer-resources/License.html # # NOTE: spec file indicates the license may be "GPLv2+ and LGPLv2.1+ and CC-BY" LICENSE = "Unknown" LIC_FILES_CHKSUM = "file://COPYING;md5=37ab75b580d5aad4ada04260efa3702f \ file://man/html/qwtlicense.html;md5=c5c69645704bbe5b502541dc8b8f25a0 \ file://debian/copyright;md5=7fecb9815c8887be096ca82876491a3b \ file://build/mac/installer-resources/License.html;md5=8b1eb407ff164d61266fda749147081a" SRC_URI = "git://github.com/performancecopilot/pcp.git;protocol=https" # Modify these as desired PV = "3.11.10+git${SRCPV}" SRCREV = "023872a815c9a914c53d755c0447e411440877be" S = "${WORKDIR}/git" # NOTE: the following prog dependencies are unknown, ignoring: which xz lzma hdiutil md5sum mkinstallp dpkg dblatex rpmbuild gzip publican qmake-qt4 qshape xmlto pod2man makepkg seinfo git dlltool gawk makedepend qmake-qt5 pkgmk true gmake dtrace rpm bzip2 gtar xconfirm echo qmake # NOTE: unable to map the following pkg-config dependencies: libmicrohttpd libsystemd-journal # (this is based on recipes that have previously been built and packaged) # NOTE: the following library dependencies are unknown, ignoring: nss pfm regex ibmad sasl2 papi gen ibumad nspr # (this is based on recipes that have previously been built and packaged) DEPENDS = "libx11 ncurses cairo openssl bison-native zlib readline systemd avahi flex-native" # NOTE: if this software is not capable of being built in a separate build directory # from the source, you should replace autotools with autotools-brokensep in the # inherit line inherit perlnative python3native pkgconfig pythonnative autotools # Specify any options you want to pass to the configure script using EXTRA_OECONF: EXTRA_OECONF = ""
It seemed to do a pretty good job. It figured out some licences, detected an autotools project that included python and perl components, added some package dependencies and highlighted some that it couldn't figure out. I was almost there. How hard could it be? Now let's try and build it.
$ devtool build pcp <snip> | FATAL ERROR: Cannot perform cross-compilation without a file to source | configuration information from (config.linux is missing) <snip>
I'm not much of an autotools guy but luckily had Joshua Lock to call on. It turns out that the project wasn't properly set up for cross-compiling. Luckily if already had a config file for mingw-w64 so I copied it, tweaked it slightly and renamed to config.linux. I added it to the recipe
SRC_URI += "file://config.linux"