]> granicus.if.org Git - esp-idf/commitdiff
Merge branch 'master' into bugfix/build_dir_base
authorAngus Gratton <angus@espressif.com>
Tue, 18 Oct 2016 04:30:57 +0000 (15:30 +1100)
committerAngus Gratton <angus@espressif.com>
Tue, 18 Oct 2016 04:30:57 +0000 (15:30 +1100)
1  2 
components/esp32/component.mk
make/common.mk
make/project.mk
make/test_build_system.sh

Simple merge
diff --cc make/common.mk
Simple merge
diff --cc make/project.mk
Simple merge
index c6e54d9222bae9a02c4edb232ba1f90b9970f4f1,86be1f82ec2262fa868054d824852aefec3e244a..a6de14987be034396eb8801ffdab91652f0a4309
@@@ -32,116 -21,96 +32,123 @@@ export V=
  
  function run_tests()
  {
 -      FAILURES=
 -      STATUS="Starting"
 -      print_status "Checking prerequisites"
 -      [ -z ${IDF_PATH} ] && echo "IDF_PATH is not set. Need path to esp-idf installation." && exit 2
 -
 -      print_status "Cloning template from ${ESP_IDF_TEMPLATE_GIT}..."
 -      git clone ${ESP_IDF_TEMPLATE_GIT} template
 -      cd template
 -      git checkout ${CI_BUILD_REF_NAME} || echo "Using esp-idf-template default branch..."
 -
 -      print_status "Updating template config..."
 -      make defconfig || exit $?
 -
 -      BOOTLOADER_BINS="bootloader/bootloader.elf bootloader/bootloader.bin"
 -      APP_BINS="app-template.elf app-template.bin"
 -
 -      print_status "Initial clean build"
 -      # if make fails here, everything fails
 -      make || exit $?
 -      # check all the expected build artifacts from the clean build
 -      assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin
 -      [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built"
 -
 -      print_status "Updating component source file rebuilds component"
 -      # touch a file & do a build
 -      take_build_snapshot
 -      touch ${IDF_PATH}/components/esp32/syscalls.c
 -      make || failure "Failed to partial build"
 -      assert_rebuilt ${APP_BINS} esp32/libesp32.a esp32/syscalls.o
 -      assert_not_rebuilt lwip/liblwip.a freertos/libfreertos.a ${BOOTLOADER_BINS} partitions_singleapp.bin
 -
 -      print_status "Bootloader source file rebuilds bootloader"
 -      take_build_snapshot
 -      touch ${IDF_PATH}/components/bootloader/src/main/bootloader_start.c
 -      make bootloader || failure "Failed to partial build bootloader"
 -      assert_rebuilt ${BOOTLOADER_BINS} bootloader/main/bootloader_start.o
 -      assert_not_rebuilt ${APP_BINS} partitions_singleapp.bin
 -
 -      print_status "Partition CSV file rebuilds partitions"
 -      take_build_snapshot
 -      touch ${IDF_PATH}/components/partition_table/partitions_singleapp.csv
 -      make partition_table
 -      assert_rebuilt partitions_singleapp.bin
 -      assert_not_rebuilt app-template.bin app-template.elf ${BOOTLOADER_BINS}
 -
 -      print_status "Partial build doesn't compile anything by default"
 -      take_build_snapshot
 -      # verify no build files are refreshed by a partial make
 -      ALL_BUILD_FILES=$(find ${BUILD} -type f | sed "s@${BUILD}/@@")
 -      make
 -      assert_not_rebuilt ${ALL_BUILD_FILES}
 -
 -      print_status "Cleaning should remove all files from build"
 -      make clean
 -      ALL_BUILD_FILES=$(find ${BUILD} -type f)
 -      if [ -n "${ALL_BUILD_FILES}" ]; then
 -               failure "Files weren't cleaned: ${ALL_BUILD_FILES}"
 -      fi
 +    FAILURES=
 +    STATUS="Starting"
 +    print_status "Checking prerequisites"
 +    [ -z ${IDF_PATH} ] && echo "IDF_PATH is not set. Need path to esp-idf installation." && exit 2
 +
 +    print_status "Cloning template from ${ESP_IDF_TEMPLATE_GIT}..."
 +    git clone ${ESP_IDF_TEMPLATE_GIT} template
 +    cd template
 +    git checkout ${CI_BUILD_REF_NAME} || echo "Using esp-idf-template default branch..."
 +
 +    print_status "Updating template config..."
 +    make defconfig || exit $?
 +
 +    BOOTLOADER_BINS="bootloader/bootloader.elf bootloader/bootloader.bin"
 +    APP_BINS="app-template.elf app-template.bin"
 +
 +    print_status "Initial clean build"
 +    # if make fails here, everything fails
 +    make || exit $?
 +    # check all the expected build artifacts from the clean build
 +    assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin
 +    [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built"
 +
 +    print_status "Updating component source file rebuilds component"
 +    # touch a file & do a build
 +    take_build_snapshot
 +    touch ${IDF_PATH}/components/esp32/syscalls.c
 +    make || failure "Failed to partial build"
 +    assert_rebuilt ${APP_BINS} esp32/libesp32.a esp32/syscalls.o
 +    assert_not_rebuilt lwip/liblwip.a freertos/libfreertos.a ${BOOTLOADER_BINS} partitions_singleapp.bin
 +
 +    print_status "Bootloader source file rebuilds bootloader"
 +    take_build_snapshot
 +    touch ${IDF_PATH}/components/bootloader/src/main/bootloader_start.c
 +    make bootloader || failure "Failed to partial build bootloader"
 +    assert_rebuilt ${BOOTLOADER_BINS} bootloader/main/bootloader_start.o
 +    assert_not_rebuilt ${APP_BINS} partitions_singleapp.bin
 +
 +    print_status "Partition CSV file rebuilds partitions"
 +    take_build_snapshot
 +    touch ${IDF_PATH}/components/partition_table/partitions_singleapp.csv
 +    make partition_table || failure "Failed to build partition table"
 +    assert_rebuilt partitions_singleapp.bin
 +    assert_not_rebuilt app-template.bin app-template.elf ${BOOTLOADER_BINS}
 +
 +    print_status "Partial build doesn't compile anything by default"
 +    take_build_snapshot
 +    # verify no build files are refreshed by a partial make
 +    ALL_BUILD_FILES=$(find ${BUILD} -type f | sed "s@${BUILD}/@@")
 +    make || failure "Partial build failed"
 +    assert_not_rebuilt ${ALL_BUILD_FILES}
 +
 +    print_status "Cleaning should remove all files from build"
 +    make clean || failure "Failed to make clean"
 +    ALL_BUILD_FILES=$(find ${BUILD} -type f)
 +    if [ -n "${ALL_BUILD_FILES}" ]; then
 +         failure "Files weren't cleaned: ${ALL_BUILD_FILES}"
 +    fi
  
 -      print_status "Can still clean build if all text files are CRLFs"
 -      make clean
 -      find . -exec unix2dos {} \; # CRLFify template dir
 -      # make a copy of esp-idf and CRLFify it
 -      CRLF_ESPIDF=${TESTDIR}/esp-idf-crlf
 -      mkdir -p ${CRLF_ESPIDF}
 -      cp -rv ${IDF_PATH}/* ${CRLF_ESPIDF}
 -      # don't CRLFify executable files, as Linux will fail to execute them
 -      find ${CRLF_ESPIDF} -type f ! -perm 755 -exec unix2dos {} \;
 -      make IDF_PATH=${CRLF_ESPIDF}
 -      # do the same checks we do for the clean build
 -      assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin
 -      [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built in CRLF mode"
 -
 -      # NOTE: If adding new tests, add them above this CRLF test...
 -
 -      print_status "All tests completed"
 -      if [ -n "${FAILURES}" ]; then
 -              echo "Some failures were detected:"
 -              echo -e "${FAILURES}"
 -              exit 1
 -      else
 -              echo "Build tests passed."
 -      fi
+     print_status "Bootloader build shouldn't leave build output anywhere else"
+     rm -rf --preserve-root ${BUILD}
+     make bootloader
+     # find wizardry: find any file not named sdkconfig.h that
+     # isn't in the "bootloader" or "config" directories
+     find ${BUILD} -type d \( -name bootloader -o -name config \) -prune , -type f ! -name sdkconfig.h || failure "Bootloader built files outside the bootloader or config directories"
 +    print_status "Moving BUILD_DIR_BASE out of tree"
 +    clean_build_dir
 +    OUTOFTREE_BUILD=${TESTDIR}/alt_build
 +    make BUILD_DIR_BASE=${OUTOFTREE_BUILD} || failure "Failed to build with BUILD_DIR_BASE overriden"
 +    NEW_BUILD_FILES=$(find ${OUTOFREE_BUILD} -type f)
 +    if [ -z "${NEW_BUILD_FILES}" ]; then
 +        failure "No files found in new build directory!"
 +    fi
 +    DEFAULT_BUILD_FILES=$(find ${BUILD} -mindepth 1)
 +    if [ -n "${DEFAULT_BUILD_FILES}" ]; then
 +        failure "Some files were incorrectly put into the default build directory: ${DEFAULT_BUILD_FILES}"
 +    fi
 +
 +    print_status "BUILD_DIR_BASE inside default build directory"
 +    clean_build_dir
 +    make BUILD_DIR_BASE=build/subdirectory || failure "Failed to build with BUILD_DIR_BASE as subdir"
 +    NEW_BUILD_FILES=$(find ${BUILD}/subdirectory -type f)
 +    if [ -z "${NEW_BUILD_FILES}" ]; then
 +        failure "No files found in new build directory!"
 +    fi
 +
 +    print_status "Parallel builds should work OK"
 +    clean_build_dir
 +    (make -j5 2>&1 | tee ${TESTDIR}/parallel_build.log) || failure "Failed to build in parallel"
 +    if grep -q "warning: jobserver unavailable" ${TESTDIR}/parallel_build.log; then
 +        failure "Parallel build prints 'warning: jobserver unavailable' errors"
 +    fi
 +
 +    print_status "Can still clean build if all text files are CRLFs"
 +    make clean || failure "Unexpected failure to make clean"
 +    find . -exec unix2dos {} \; # CRLFify template dir
 +    # make a copy of esp-idf and CRLFify it
 +    CRLF_ESPIDF=${TESTDIR}/esp-idf-crlf
 +    mkdir -p ${CRLF_ESPIDF}
 +    cp -rv ${IDF_PATH}/* ${CRLF_ESPIDF}
 +    # don't CRLFify executable files, as Linux will fail to execute them
 +    find ${CRLF_ESPIDF} -type f ! -perm 755 -exec unix2dos {} \;
 +    make IDF_PATH=${CRLF_ESPIDF} || failure "Failed to build with CRLFs in source"
 +    # do the same checks we do for the clean build
 +    assert_built ${APP_BINS} ${BOOTLOADER_BINS} partitions_singleapp.bin
 +    [ -f ${BUILD}/partition*.bin ] || failure "A partition table should have been built in CRLF mode"
 +
 +
 +    print_status "All tests completed"
 +    if [ -n "${FAILURES}" ]; then
 +        echo "Some failures were detected:"
 +        echo -e "${FAILURES}"
 +        exit 1
 +    else
 +        echo "Build tests passed."
 +    fi
  }
  
  function print_status()