mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 00:32:38 +01:00 
			
		
		
		
	The fact that the lookahead buffer uses bits instead of bytes is an internal detail. Poking this through to the user API has caused a decent amount of confusion. Most buffers are provided as bytes and the inconsistency here can be surprising. The use of bytes instead of bits also makes us forward compatible in the case that we want to change the lookahead internal representation (hint segment list). Additionally, we change the configuration name to lookahead_size. This matches other configurations, such as cache_size and read_size, while also notifying the user that something important changed at compile time (by breaking).
		
			
				
	
	
		
			217 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # Environment variables
 | |
| env:
 | |
|   global:
 | |
|     - CFLAGS=-Werror
 | |
| 
 | |
| # Common test script
 | |
| script:
 | |
|   # make sure example can at least compile
 | |
|   - sed -n '/``` c/,/```/{/```/d; p;}' README.md > test.c &&
 | |
|     make all CFLAGS+="
 | |
|         -Duser_provided_block_device_read=NULL
 | |
|         -Duser_provided_block_device_prog=NULL
 | |
|         -Duser_provided_block_device_erase=NULL
 | |
|         -Duser_provided_block_device_sync=NULL
 | |
|         -include stdio.h"
 | |
| 
 | |
|   # run tests
 | |
|   - make test QUIET=1
 | |
| 
 | |
|   # run tests with a few different configurations
 | |
|   - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=1      -DLFS_CACHE_SIZE=4"
 | |
|   - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=512    -DLFS_CACHE_SIZE=512 -DLFS_BLOCK_CYCLES=16"
 | |
|   - make test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD_SIZE=256"
 | |
| 
 | |
|   - make clean test QUIET=1 CFLAGS+="-DLFS_INLINE_MAX=0"
 | |
|   - make clean test QUIET=1 CFLAGS+="-DLFS_NO_INTRINSICS"
 | |
| 
 | |
|   # compile and find the code size with the smallest configuration
 | |
|   - make clean size
 | |
|         OBJ="$(ls lfs*.o | tr '\n' ' ')"
 | |
|         CFLAGS+="-DLFS_NO_ASSERT -DLFS_NO_DEBUG -DLFS_NO_WARN -DLFS_NO_ERROR"
 | |
|         | tee sizes
 | |
| 
 | |
|   # update status if we succeeded, compare with master if possible
 | |
|   - |
 | |
|     if [ "$TRAVIS_TEST_RESULT" -eq 0 ]
 | |
|     then
 | |
|         CURR=$(tail -n1 sizes | awk '{print $1}')
 | |
|         PREV=$(curl -u $GEKY_BOT_STATUSES https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \
 | |
|             | jq -re "select(.sha != \"$TRAVIS_COMMIT\")
 | |
|                 | .statuses[] | select(.context == \"$STAGE/$NAME\").description
 | |
|                 | capture(\"code size is (?<size>[0-9]+)\").size" \
 | |
|             || echo 0)
 | |
| 
 | |
|         STATUS="Passed, code size is ${CURR}B"
 | |
|         if [ "$PREV" -ne 0 ]
 | |
|         then
 | |
|             STATUS="$STATUS ($(python -c "print '%+.2f' % (100*($CURR-$PREV)/$PREV.0)")%)"
 | |
|         fi
 | |
|     fi
 | |
| 
 | |
| # CI matrix
 | |
| jobs:
 | |
|   include:
 | |
|     # native testing
 | |
|     - stage: test
 | |
|       env:
 | |
|         - STAGE=test
 | |
|         - NAME=littlefs-x86
 | |
| 
 | |
|     # cross-compile with ARM (thumb mode)
 | |
|     - stage: test
 | |
|       env:
 | |
|         - STAGE=test
 | |
|         - NAME=littlefs-arm
 | |
|         - CC="arm-linux-gnueabi-gcc --static -mthumb"
 | |
|         - EXEC="qemu-arm"
 | |
|       install:
 | |
|         - sudo apt-get install gcc-arm-linux-gnueabi qemu-user
 | |
|         - arm-linux-gnueabi-gcc --version
 | |
|         - qemu-arm -version
 | |
| 
 | |
|     # cross-compile with PowerPC
 | |
|     - stage: test
 | |
|       env:
 | |
|         - STAGE=test
 | |
|         - NAME=littlefs-powerpc
 | |
|         - CC="powerpc-linux-gnu-gcc --static"
 | |
|         - EXEC="qemu-ppc"
 | |
|       install:
 | |
|         - sudo apt-get install gcc-powerpc-linux-gnu qemu-user
 | |
|         - powerpc-linux-gnu-gcc --version
 | |
|         - qemu-ppc -version
 | |
| 
 | |
|     # cross-compile with MIPS
 | |
|     - stage: test
 | |
|       env:
 | |
|         - STAGE=test
 | |
|         - NAME=littlefs-mips
 | |
|         - CC="mips-linux-gnu-gcc --static"
 | |
|         - EXEC="qemu-mips"
 | |
|       install:
 | |
|         - sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu/ xenial main universe"
 | |
|         - sudo apt-get -qq update
 | |
|         - sudo apt-get install gcc-mips-linux-gnu qemu-user
 | |
|         - mips-linux-gnu-gcc --version
 | |
|         - qemu-mips -version
 | |
| 
 | |
|     # self-host with littlefs-fuse for fuzz test
 | |
|     - stage: test
 | |
|       env:
 | |
|         - STAGE=test
 | |
|         - NAME=littlefs-fuse
 | |
|       install:
 | |
|         - sudo apt-get install libfuse-dev
 | |
|         - git clone --depth 1 https://github.com/geky/littlefs-fuse -b v2-alpha
 | |
|         - fusermount -V
 | |
|         - gcc --version
 | |
|       before_script:
 | |
|         # setup disk for littlefs-fuse
 | |
|         - rm -rf littlefs-fuse/littlefs/*
 | |
|         - cp -r $(git ls-tree --name-only HEAD) littlefs-fuse/littlefs
 | |
| 
 | |
|         - mkdir mount
 | |
|         - sudo chmod a+rw /dev/loop0
 | |
|         - dd if=/dev/zero bs=512 count=2048 of=disk
 | |
|         - losetup /dev/loop0 disk
 | |
|       script:
 | |
|         # self-host test
 | |
|         - make -C littlefs-fuse
 | |
| 
 | |
|         - littlefs-fuse/lfs --format /dev/loop0
 | |
|         - littlefs-fuse/lfs /dev/loop0 mount
 | |
| 
 | |
|         - ls mount
 | |
|         - mkdir mount/littlefs
 | |
|         - cp -r $(git ls-tree --name-only HEAD) mount/littlefs
 | |
|         - cd mount/littlefs
 | |
|         - ls
 | |
|         - make -B test_dirs test_files QUIET=1
 | |
| 
 | |
|       # Automatically update releases
 | |
|     - stage: deploy
 | |
|       env:
 | |
|         - STAGE=deploy
 | |
|         - NAME=deploy
 | |
|       script:
 | |
|         # Find version defined in lfs.h
 | |
|         - LFS_VERSION=$(grep -ox '#define LFS_VERSION .*' lfs.h | cut -d ' ' -f3)
 | |
|         - LFS_VERSION_MAJOR=$((0xffff & ($LFS_VERSION >> 16)))
 | |
|         - LFS_VERSION_MINOR=$((0xffff & ($LFS_VERSION >>  0)))
 | |
|         # Grab latests patch from repo tags, default to 0
 | |
|         - LFS_VERSION_PATCH=$(curl -f -u "$GEKY_BOT_RELEASES"
 | |
|                 https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs
 | |
|                 | jq 'map(.ref | match(
 | |
|                     "refs/tags/v'"$LFS_VERSION_MAJOR"'\\.'"$LFS_VERSION_MINOR"'\\.(.*)$")
 | |
|                     .captures[].string | tonumber + 1) | max // 0')
 | |
|         # We have our new version
 | |
|         - LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR.$LFS_VERSION_PATCH"
 | |
|         - echo "VERSION $LFS_VERSION"
 | |
|         - |
 | |
|           # Check that we're the most recent commit
 | |
|           CURRENT_COMMIT=$(curl -f -u "$GEKY_BOT_RELEASES" \
 | |
|                 https://api.github.com/repos/$TRAVIS_REPO_SLUG/commits/master \
 | |
|                 | jq -re '.sha')
 | |
|           if [ "$TRAVIS_COMMIT" == "$CURRENT_COMMIT" ]
 | |
|           then
 | |
|             # Build release notes
 | |
|             PREV=$(git tag --sort=-v:refname -l "v*" | head -1)
 | |
|             if [ ! -z "$PREV" ]
 | |
|             then
 | |
|                 echo "PREV $PREV"
 | |
|                 CHANGES=$'### Changes\n\n'$( \
 | |
|                     git log --oneline $PREV.. --grep='^Merge' --invert-grep)
 | |
|                 printf "CHANGES\n%s\n\n" "$CHANGES"
 | |
|             fi
 | |
|             # Create the release
 | |
|             curl -f -u "$GEKY_BOT_RELEASES" -X POST \
 | |
|                 https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases \
 | |
|                 -d "{
 | |
|                     \"tag_name\": \"$LFS_VERSION\",
 | |
|                     \"target_commitish\": \"$TRAVIS_COMMIT\",
 | |
|                     \"name\": \"${LFS_VERSION%.0}\",
 | |
|                     \"body\": $(jq -sR '.' <<< "$CHANGES")
 | |
|                 }"
 | |
|           fi
 | |
| 
 | |
| # Manage statuses
 | |
| before_install:
 | |
|   - |
 | |
|     curl -u $GEKY_BOT_STATUSES -X POST \
 | |
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \
 | |
|         -d "{
 | |
|             \"context\": \"$STAGE/$NAME\",
 | |
|             \"state\": \"pending\",
 | |
|             \"description\": \"${STATUS:-In progress}\",
 | |
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\"
 | |
|         }"
 | |
| 
 | |
| after_failure:
 | |
|   - |
 | |
|     curl -u $GEKY_BOT_STATUSES -X POST \
 | |
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \
 | |
|         -d "{
 | |
|             \"context\": \"$STAGE/$NAME\",
 | |
|             \"state\": \"failure\",
 | |
|             \"description\": \"${STATUS:-Failed}\",
 | |
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\"
 | |
|         }"
 | |
| 
 | |
| after_success:
 | |
|   - |
 | |
|     curl -u $GEKY_BOT_STATUSES -X POST \
 | |
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \
 | |
|         -d "{
 | |
|             \"context\": \"$STAGE/$NAME\",
 | |
|             \"state\": \"success\",
 | |
|             \"description\": \"${STATUS:-Passed}\",
 | |
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\"
 | |
|         }"
 | |
| 
 | |
| # Job control
 | |
| stages:
 | |
|     - name: test
 | |
|     - name: deploy
 | |
|       if: branch = master AND type = push
 |