diff --git a/circle.yml b/circle.yml new file mode 100644 index 000000000000..047b21690653 --- /dev/null +++ b/circle.yml @@ -0,0 +1,21 @@ +machine: + environment: + DMD_VERSION: 2.071.1 + PATH: "${HOME}/dmd2/linux/bin64:${PATH}" + LD_LIBRARY_PATH: "${HOME}/dmd2/linux/lib64:${LD_LIBRARY_PATH}" + SELF_COMPILE: 2 + SELF_DMD_TEST_COVERAGE: 1 + DC: dmd + DMD: dmd +dependencies: + pre: + - sudo apt-get update; sudo apt-get install g++-multilib + override: + - curl -fsSL --retry 3 "http://downloads.dlang.org/releases/2.x/${DMD_VERSION}/dmd.${DMD_VERSION}.linux.tar.xz" | tar -C ~ -Jxf - + - dmd --version +test: + override: + - case $CIRCLE_NODE_INDEX in 0) MODEL=32 ./travis.sh ;; 1) MODEL=64 ./travis.sh ;; esac: + parallel: true + post: + - bash <(curl -s https://codecov.io/bash) diff --git a/src/mars.d b/src/mars.d index 5343dd0bc41f..f720005a5788 100644 --- a/src/mars.d +++ b/src/mars.d @@ -1582,6 +1582,26 @@ int main() { GC.disable(); } + version(D_Coverage) + { + // for now we need to manually set the source path + string dirName(string path, char separator) + { + for (size_t i = path.length - 1; i > 0; i--) + { + if (path[i] == separator) + return path[0..i]; + } + return path; + } + version (Windows) + enum sourcePath = dirName(__FILE_FULL_PATH__, `\`); + else + enum sourcePath = dirName(__FILE_FULL_PATH__, '/'); + + dmd_coverSourcePath(sourcePath); + dmd_coverSetMerge(true); + } auto args = Runtime.cArgs(); return tryMain(args.argc, cast(const(char)**)args.argv); diff --git a/src/posix.mak b/src/posix.mak index 79243967af7d..b39ba4acbadd 100644 --- a/src/posix.mak +++ b/src/posix.mak @@ -148,6 +148,8 @@ endif DFLAGS= # Enable D warnings DFLAGS += -wi +# Enable coverage statistics if requested +DFLAGS += $(if $(DMD_TEST_COVERAGE),-cov,) ifneq (,$(DEBUG)) ENABLE_DEBUG := 1 diff --git a/travis.sh b/travis.sh index 592035f9f7b2..477f20ccf6c7 100755 --- a/travis.sh +++ b/travis.sh @@ -17,6 +17,11 @@ make -j$N -C ../druntime -f posix.mak MODEL=$MODEL make -j$N -C ../phobos -f posix.mak MODEL=$MODEL while [ $SELF_COMPILE -gt 0 ]; do + if [ $SELF_COMPILE -eq 1 ] && [ $DMD = "dmd" ] && ! [ -z "$SELF_DMD_TEST_COVERAGE" ] ; then + echo "Building with coverage statistics" + export DMD_TEST_COVERAGE=1 + fi + # rebuild dmd using the just build dmd as host compiler mv src/dmd src/host_dmd make -j$N -C src -f posix.mak MODEL=$MODEL HOST_DMD=./host_dmd clean @@ -30,8 +35,12 @@ while [ $SELF_COMPILE -gt 0 ]; do SELF_COMPILE=$(($SELF_COMPILE - 1)) done -make -j$N -C ../druntime -f posix.mak MODEL=$MODEL unittest -make -j$N -C ../phobos -f posix.mak MODEL=$MODEL unittest +# Only run runtime + phobos tests on Travis +if [ "${CIRCLECI}" != "true" ] ; then + make -j$N -C ../druntime -f posix.mak MODEL=$MODEL unittest + make -j$N -C ../phobos -f posix.mak MODEL=$MODEL unittest +fi + # test fewer compiler argument permutations for PRs to reduce CI load if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then make -j$N -C test MODEL=$MODEL