From 6d832f1b1282ccc0e7e7a1ebde85cd39a888c427 Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Thu, 26 Jul 2018 13:15:30 +0200 Subject: [PATCH] fix --list-devices (still buggy, but works!) --- software/build-scripts/infnoise-gitian.yml | 181 +++++++++++++++++++++ software/infnoise.c | 13 +- software/libinfnoise.c | 39 ++--- software/libinfnoise.h | 6 +- 4 files changed, 205 insertions(+), 34 deletions(-) create mode 100644 software/build-scripts/infnoise-gitian.yml diff --git a/software/build-scripts/infnoise-gitian.yml b/software/build-scripts/infnoise-gitian.yml new file mode 100644 index 0000000..93ce084 --- /dev/null +++ b/software/build-scripts/infnoise-gitian.yml @@ -0,0 +1,181 @@ +xy--- +name: "infnoise-linux-dev" +enable_cache: true +suites: +- "bionic" +architectures: +- "amd64" +packages: +- "g++-aarch64-linux-gnu" +- "g++-7-aarch64-linux-gnu" +- "gcc-7-aarch64-linux-gnu" +- "binutils-aarch64-linux-gnu" +- "g++-arm-linux-gnueabihf" +- "g++-7-arm-linux-gnueabihf" +- "gcc-7-arm-linux-gnueabihf" +- "binutils-arm-linux-gnueabihf" +- "g++-7-multilib" +- "gcc-7-multilib" +- "binutils-gold" +- "git" +- "pkg-config" +- "faketime" +- "bsdmainutils" +- "ca-certificates" +- "python" +- "libftdi-dev" +remotes: +- "url": "https://github.com/13-37-org/infnoise" + "dir": "infnoise" +files: [] +script: | + WRAP_DIR=$HOME/wrapped + HOSTS="i686-pc-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu" + CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests" + FAKETIME_HOST_PROGS="" + FAKETIME_PROGS="date ar ranlib nm" + HOST_CFLAGS="-O2 -g" + HOST_CXXFLAGS="-O2 -g" + HOST_LDFLAGS=-static-libstdc++ + export QT_RCC_TEST=1 + export GZIP="-9n" + export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" + export TZ="UTC" + export BUILD_DIR=`pwd` + mkdir -p ${WRAP_DIR} + if test -n "$GBUILD_CACHE_ENABLED"; then + export SOURCES_PATH=${GBUILD_COMMON_CACHE} + export BASE_CACHE=${GBUILD_PACKAGE_CACHE} + mkdir -p ${BASE_CACHE} ${SOURCES_PATH} + fi + function create_global_faketime_wrappers { + for prog in ${FAKETIME_PROGS}; do + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} + echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} + echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} + echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} + echo "\$REAL \$@" >> $WRAP_DIR/${prog} + chmod +x ${WRAP_DIR}/${prog} + done + } + function create_per-host_faketime_wrappers { + for i in $HOSTS; do + for prog in ${FAKETIME_HOST_PROGS}; do + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} + echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} + echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} + echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} + echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} + chmod +x ${WRAP_DIR}/${i}-${prog} + done + done + } + # Faketime for depends so intermediate results are comparable + export PATH_orig=${PATH} + create_global_faketime_wrappers "2000-01-01 12:00:00" + create_per-host_faketime_wrappers "2000-01-01 12:00:00" + export PATH=${WRAP_DIR}:${PATH} + EXTRA_INCLUDES_BASE=$WRAP_DIR/extra_includes + mkdir -p $EXTRA_INCLUDES_BASE + # x86 needs /usr/include/i386-linux-gnu/asm pointed to /usr/include/x86_64-linux-gnu/asm, + # but we can't write there. Instead, create a link here and force it to be included in the + # search paths by wrapping gcc/g++. + mkdir -p $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu + rm -f $WRAP_DIR/extra_includes/i686-pc-linux-gnu/asm + ln -s /usr/include/x86_64-linux-gnu/asm $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu/asm + for prog in gcc g++; do + rm -f ${WRAP_DIR}/${prog} + + cat << EOF > ${WRAP_DIR}/${prog} + #!/usr/bin/env bash + REAL="`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1`" + for var in "\$@" + do + if [ "\$var" = "-m32" ]; then + export C_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu" + export CPLUS_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu" + break + fi + done + \$REAL \$@ + EOF + + chmod +x ${WRAP_DIR}/${prog} + done + cd infnoise/software + + BASEPREFIX=`pwd`/depends + + # Build dependencies for each host + for i in $HOSTS; do + EXTRA_INCLUDES="$EXTRA_INCLUDES_BASE/$i" + if [ -d "$EXTRA_INCLUDES" ]; then + export HOST_ID_SALT="$EXTRA_INCLUDES" + fi + make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" + unset HOST_ID_SALT + done + + # Faketime for binaries + export PATH=${PATH_orig} + create_global_faketime_wrappers "${REFERENCE_DATETIME}" + create_per-host_faketime_wrappers "${REFERENCE_DATETIME}" + export PATH=${WRAP_DIR}:${PATH} + + # Create the release tarball using (arbitrarily) the first host + ./autogen.sh + CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/ + make dist + SOURCEDIST=`echo bitcoin-*.tar.gz` + DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'` + # Correct tar file order + mkdir -p temp + pushd temp + tar xf ../$SOURCEDIST + find infnoise-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST + popd + # Workaround for tarball not building with the bare tag version (prep) + make -C src obj/build.h + ORIGPATH="$PATH" + + # Extract the release tarball into a dir for each host and build + for i in ${HOSTS}; do + export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH} + mkdir -p distsrc-${i} + cd distsrc-${i} + INSTALLPATH=`pwd`/installed/${DISTNAME} + mkdir -p ${INSTALLPATH} + tar --strip-components=1 -xf ../$SOURCEDIST + + # Workaround for tarball not building with the bare tag version + echo '#!/bin/true' >share/genbuild.sh + mkdir src/obj + cp ../src/obj/build.h src/obj/ + + CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" + make ${MAKEOPTS} + make ${MAKEOPTS} -C src check-security + + #TODO: This is a quick hack that disables symbol checking for arm. + # Instead, we should investigate why these are popping up. + # For aarch64, we'll need to bump up the min GLIBC version, as the abi + # support wasn't introduced until 2.17. + case $i in + aarch64-*) : ;; + arm-*) : ;; + *) make ${MAKEOPTS} -C src check-symbols ;; + esac + make install DESTDIR=${INSTALLPATH} + cd installed + find . -name "lib*.la" -delete + find . -name "lib*.a" -delete + rm -rf ${DISTNAME}/lib/pkgconfig + find ${DISTNAME}/bin -type f -executable -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \; + find ${DISTNAME}/lib -type f -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \; + find ${DISTNAME} -not -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz + find ${DISTNAME} -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}-debug.tar.gz + cd ../../ + rm -rf distsrc-${i} + done + mkdir -p $OUTDIR/src + mv $SOURCEDIST $OUTDIR/src diff --git a/software/infnoise.c b/software/infnoise.c index 0e323cc..4ff96f3 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -225,15 +225,18 @@ int main(int argc, char **argv) { char *message = "no data?"; bool errorFlag = false; if (opts.listDevices) { + devlist_node devlist = listUSBDevices(&message); - devlist_node curdev; + if (devlist == NULL) { + fprintf(stderr, "Error: %s\n", message); + return 1; + } + devlist_node curdev = NULL; uint8_t i=0; - for (curdev = devlist; curdev != NULL;i++) { - printf("Manufacturer: %s, Description: %s, Serial: %s\n", curdev->manufacturer, curdev->description, - curdev->serial); + for (curdev = devlist; curdev != NULL; i++) { + printf("ID: %i, Manufacturer: %s, Description: %s, Serial: %s\n", curdev->id, curdev->manufacturer, curdev->description, curdev->serial); curdev = curdev->next; } - //fputs(message, stdout); // TODO: iterate through infnoise_devlist and print stuff return 0; } diff --git a/software/libinfnoise.c b/software/libinfnoise.c index 8d9d034..43106c0 100644 --- a/software/libinfnoise.c +++ b/software/libinfnoise.c @@ -211,50 +211,37 @@ devlist_node listUSBDevices(char **message) { // search devices int rc = ftdi_usb_find_all(&ftdic, &devlist, INFNOISE_VENDOR_ID, INFNOISE_PRODUCT_ID); - if (rc < 0) { if (!isSuperUser()) { *message = "Can't find Infinite Noise Multiplier. Try running as super user?"; } else { - *message = "Can't find Infinite Noise Multiplier"; + *message = "Can't find Infinite Noise Multiplier."; } } - - devlist_node return_list =NULL; - devlist_node *current_entry =NULL; + devlist_node return_list = malloc(sizeof(struct infnoise_devlist_node)); + devlist_node current_entry = return_list; for (curdev = devlist; curdev != NULL; i++) { - if (return_list == NULL) { - return_list = (devlist_node) malloc(sizeof(struct infnoise_devlist_node)); - return_list->id = i; - return_list->serial = serial; - return_list->manufacturer = manufacturer; - return_list->description = description; - *current_entry = return_list; - } else { - (*current_entry)->next = (devlist_node) malloc(sizeof(struct infnoise_devlist_node)); - *current_entry = (*current_entry)->next; - (*current_entry)->id = i; - (*current_entry)->serial = serial; - (*current_entry)->manufacturer = manufacturer; - (*current_entry)->description = description; - } - rc = ftdi_usb_get_strings(&ftdic, curdev->dev, manufacturer, 128, description, 128, serial, 128); if (rc < 0) { if (!isSuperUser()) { *message = "Can't find Infinite Noise Multiplier. Try running as super user?"; - return return_list; + return NULL; } //*message = "ftdi_usb_get_strings failed: %d (%s)\n", rc, ftdi_get_error_string(ftdic)); - return return_list; + return NULL; } + current_entry->id = i; + strcpy(current_entry->serial, serial); + strcpy(current_entry->manufacturer, manufacturer); + strcpy(current_entry->description, description); + current_entry->next = malloc(sizeof(struct infnoise_devlist_node)); + current_entry = current_entry->next; - // print to stdout - printf("debug: Manufacturer: %s, Description: %s, Serial: %s\n", manufacturer, description, serial); + //printf("debug: Manufacturer: %s, Description: %s, Serial: %s\n", manufacturer, description, serial); curdev = curdev->next; - //current_node = current_node->next; // ??? } + current_entry = NULL; return return_list; } diff --git a/software/libinfnoise.h b/software/libinfnoise.h index 26d867d..19400a8 100644 --- a/software/libinfnoise.h +++ b/software/libinfnoise.h @@ -23,9 +23,9 @@ struct infnoise_context { struct infnoise_devlist_node { uint8_t id; - char *manufacturer; - char *description; - char *serial; + char manufacturer[128]; + char description[129]; + char serial[128]; struct infnoise_devlist_node *next; };