mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Added cross-compile targets for testing
Using gcc cross compilers and qemu: - make test CC="arm-linux-gnueabi-gcc --static -mthumb" EXEC="qemu-arm" - make test CC="powerpc-linux-gnu-gcc --static" EXEC="qemu-ppc" - make test CC="mips-linux-gnu-gcc --static" EXEC="qemu-mips" Also separated out Travis jobs and added some size reporting
This commit is contained in:
		
							
								
								
									
										271
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										271
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,107 +1,210 @@ | ||||
| # 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 size CFLAGS+=" | ||||
|   # 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 | ||||
|   - make test QUIET=1 | ||||
|  | ||||
|     # run tests with a few different configurations | ||||
|     - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=1      -DLFS_PROG_SIZE=1" | ||||
|     - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=512    -DLFS_PROG_SIZE=512" | ||||
|     - make test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" | ||||
|   # run tests with a few different configurations | ||||
|   - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=1      -DLFS_PROG_SIZE=1" | ||||
|   - make test QUIET=1 CFLAGS+="-DLFS_READ_SIZE=512    -DLFS_PROG_SIZE=512" | ||||
|   - make test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD=2048" | ||||
|  | ||||
|   - make clean test QUIET=1 CFLAGS+="-DLFS_NO_INTRINSICS" | ||||
|  | ||||
|   # compile and find the code size with the smalles configuration | ||||
|   - make clean size | ||||
|         OBJ="$(ls lfs*.o | tr '\n' ' ')" | ||||
|         CFLAGS+="-DLFS_NO{ASSERT,DEBUG,WARN,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}') | ||||
|         STATUS="Passed, code size is ${CURR}B" | ||||
|  | ||||
|         PREV=$(curl https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \ | ||||
|             | jq -r ".statuses[] | select(.context == \"ci/$NAME\").description" \ | ||||
|             | sed 's/.*code size is \([0-9]*\).*/\1/' \ | ||||
|             || echo 0) | ||||
|         if [ "$PREV" -ne 0 ] | ||||
|         then | ||||
|             STATUS="$STATUS ($(python -c "print '%+.2f' % (100*($CURR-$PREV)/$PREV.0)")%)" | ||||
|         fi | ||||
|     fi | ||||
|  | ||||
| # CI matrix | ||||
| matrix: | ||||
|   include: | ||||
|     # native testing | ||||
|     - env: | ||||
|         - NAME=littlefs-x86 | ||||
|  | ||||
|     # cross-compile with ARM (thumb mode) | ||||
|     - env: | ||||
|         - 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 | ||||
|     - env: | ||||
|         - 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 | ||||
|     - env: | ||||
|         - 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 | ||||
|     - make -C littlefs-fuse | ||||
|     - env: | ||||
|         - NAME=littlefs-fuse | ||||
|       install: | ||||
|         - sudo apt-get install libfuse-dev | ||||
|         - git clone --depth 1 https://github.com/geky/littlefs-fuse | ||||
|         - 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 | ||||
|  | ||||
|     - littlefs-fuse/lfs --format /dev/loop0 | ||||
|     - littlefs-fuse/lfs /dev/loop0 mount | ||||
|         - 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 | ||||
|  | ||||
|     - 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 | ||||
|         - 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 | ||||
|  | ||||
| # Manage statuses | ||||
| before_install: | ||||
|     - fusermount -V | ||||
|     - gcc --version | ||||
|   - | | ||||
|     curl -u $GEKY_BOT_STATUSES -X POST \ | ||||
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \ | ||||
|         -d "{ | ||||
|             \"context\": \"ci/$NAME\", | ||||
|             \"state\": \"pending\", | ||||
|             \"description\": \"${STATUS:-In progress}\", | ||||
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\" | ||||
|         }" | ||||
|  | ||||
| install: | ||||
|     - sudo apt-get install libfuse-dev | ||||
|     - git clone --depth 1 https://github.com/geky/littlefs-fuse | ||||
| 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\": \"ci/$NAME\", | ||||
|             \"state\": \"failure\", | ||||
|             \"description\": \"${STATUS:-Failed}\", | ||||
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\" | ||||
|         }" | ||||
|  | ||||
| before_script: | ||||
|     - 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 | ||||
| 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\": \"ci/$NAME\", | ||||
|             \"state\": \"success\", | ||||
|             \"description\": \"${STATUS:-Passed}\", | ||||
|             \"target_url\": \"https://travis-ci.org/$TRAVIS_REPO_SLUG/jobs/$TRAVIS_JOB_ID\" | ||||
|         }" | ||||
|  | ||||
| # Automatically update releases | ||||
| deploy: | ||||
|     # Let before_deploy take over | ||||
|     provider: script | ||||
|     script: 'true' | ||||
|     on: | ||||
|         branch: master | ||||
|   # Let before_deploy take over | ||||
|   provider: script | ||||
|   script: 'true' | ||||
|   on: | ||||
|     branch: master | ||||
|  | ||||
| before_deploy: | ||||
|     - cd $TRAVIS_BUILD_DIR | ||||
|     # Update tag for 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))) | ||||
|     - LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR" | ||||
|     - echo "littlefs version $LFS_VERSION" | ||||
|     - | | ||||
|       curl -u $GEKY_BOT -X POST \ | ||||
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs \ | ||||
|         -d "{ | ||||
|           \"ref\": \"refs/tags/$LFS_VERSION\", | ||||
|           \"sha\": \"$TRAVIS_COMMIT\" | ||||
|         }" | ||||
|     - | | ||||
|       curl -f -u $GEKY_BOT -X PATCH \ | ||||
|         https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs/tags/$LFS_VERSION \ | ||||
|         -d "{ | ||||
|           \"sha\": \"$TRAVIS_COMMIT\" | ||||
|         }" | ||||
|     # Create release notes from commits | ||||
|     - LFS_PREV_VERSION="v$LFS_VERSION_MAJOR.$(($LFS_VERSION_MINOR-1))" | ||||
|     - | | ||||
|       if [ $(git tag -l "$LFS_PREV_VERSION") ] | ||||
|       then | ||||
|         curl -u $GEKY_BOT -X POST \ | ||||
|             https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases \ | ||||
|             -d "{ | ||||
|                 \"tag_name\": \"$LFS_VERSION\", | ||||
|                 \"name\": \"$LFS_VERSION\" | ||||
|             }" | ||||
|         RELEASE=$( | ||||
|             curl -f https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases/tags/$LFS_VERSION | ||||
|         ) | ||||
|         CHANGES=$( | ||||
|             git log --oneline $LFS_PREV_VERSION.. --grep='^Merge' --invert-grep | ||||
|         ) | ||||
|         curl -f -u $GEKY_BOT -X PATCH \ | ||||
|             https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases/$( | ||||
|                 jq -r '.id' <<< "$RELEASE" | ||||
|             ) \ | ||||
|             -d "$( | ||||
|                 jq -s '{ | ||||
|                     "body": ((.[0] // "" | sub("(?<=\n)#+ Changes.*"; ""; "mi")) | ||||
|                         + "### Changes\n\n" + .[1]) | ||||
|                 }' <(jq '.body' <<< "$RELEASE") <(jq -sR '.' <<< "$CHANGES") | ||||
|             )" | ||||
|       fi | ||||
|   - cd $TRAVIS_BUILD_DIR | ||||
|   # Update tag for 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))) | ||||
|   - LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR" | ||||
|   - echo "littlefs version $LFS_VERSION" | ||||
|   - | | ||||
|     curl -u $GEKY_BOT_RELEASES -X POST \ | ||||
|       https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs \ | ||||
|       -d "{ | ||||
|         \"ref\": \"refs/tags/$LFS_VERSION\", | ||||
|         \"sha\": \"$TRAVIS_COMMIT\" | ||||
|       }" | ||||
|   - | | ||||
|     curl -f -u $GEKY_BOT_RELEASES -X PATCH \ | ||||
|       https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs/tags/$LFS_VERSION \ | ||||
|       -d "{ | ||||
|         \"sha\": \"$TRAVIS_COMMIT\" | ||||
|       }" | ||||
|   # Create release notes from commits | ||||
|   - LFS_PREV_VERSION="v$LFS_VERSION_MAJOR.$(($LFS_VERSION_MINOR-1))" | ||||
|   - | | ||||
|     if [ $(git tag -l "$LFS_PREV_VERSION") ] | ||||
|     then | ||||
|       curl -u $GEKY_BOT_RELEASES -X POST \ | ||||
|           https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases \ | ||||
|           -d "{ | ||||
|               \"tag_name\": \"$LFS_VERSION\", | ||||
|               \"name\": \"$LFS_VERSION\" | ||||
|           }" | ||||
|       RELEASE=$( | ||||
|           curl -f https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases/tags/$LFS_VERSION | ||||
|       ) | ||||
|       CHANGES=$( | ||||
|           git log --oneline $LFS_PREV_VERSION.. --grep='^Merge' --invert-grep | ||||
|       ) | ||||
|       curl -f -u $GEKY_BOT_RELEASES -X PATCH \ | ||||
|           https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases/$( | ||||
|               jq -r '.id' <<< "$RELEASE" | ||||
|           ) \ | ||||
|           -d "$( | ||||
|               jq -s '{ | ||||
|                   "body": ((.[0] // "" | sub("(?<=\n)#+ Changes.*"; ""; "mi")) | ||||
|                       + "### Changes\n\n" + .[1]) | ||||
|               }' <(jq '.body' <<< "$RELEASE") <(jq -sR '.' <<< "$CHANGES") | ||||
|           )" | ||||
|     fi | ||||
|   | ||||
		Reference in New Issue
	
	Block a user