Skip to content

Commit d1be6dd

Browse files
authored
Merge pull request #12 from haskell-works/enable-travis-build
Enable travis build
2 parents dc6f879 + c25265b commit d1be6dd

File tree

4 files changed

+150
-23
lines changed

4 files changed

+150
-23
lines changed

.circleci/config.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ jobs:
9191
- image: quay.io/haskell_works/ghc-8.2.2
9292
<<: *cabalbuild
9393

94+
ghc-8.0.2:
95+
environment:
96+
- GHC: "ghc8.0.2"
97+
docker:
98+
- image: quay.io/haskell_works/ghc-8.0.2
99+
<<: *cabalbuild
100+
94101
ghc-7.10.3:
95102
environment:
96103
- GHC: "ghc7.10.3"
@@ -167,12 +174,14 @@ workflows:
167174
- ghc-8.6.3
168175
- ghc-8.4.3
169176
- ghc-8.2.2
177+
- ghc-8.0.2
170178
- ghc-7.10.3
171179
- checked-builds:
172180
requires:
173181
- ghc-8.6.3
174182
- ghc-8.4.3
175183
- ghc-8.2.2
184+
- ghc-8.0.2
176185
- ghc-7.10.3
177186
filters:
178187
branches:

.travis.yml

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
language: c
2+
sudo: false
3+
4+
git:
5+
submodules: false # whether to recursively clone submodules
6+
7+
cache:
8+
directories:
9+
- $HOME/.cabal/packages
10+
- $HOME/.cabal/store
11+
12+
before_cache:
13+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
14+
# remove files that are regenerated by 'cabal update'
15+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*
16+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json
17+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache
18+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
19+
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
20+
21+
- rm -rfv $HOME/.cabal/packages/head.hackage
22+
23+
matrix:
24+
include:
25+
- compiler: "ghc-8.6.1"
26+
# env: TEST=--disable-tests BENCH=--disable-benchmarks
27+
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.6.1], sources: [hvr-ghc]}}
28+
- compiler: "ghc-8.4.3"
29+
# env: TEST=--disable-tests BENCH=--disable-benchmarks
30+
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.4.3], sources: [hvr-ghc]}}
31+
- compiler: "ghc-8.2.2"
32+
# env: TEST=--disable-tests BENCH=--disable-benchmarks
33+
addons: {apt: {packages: [ghc-ppa-tools,cabal-install-2.4,ghc-8.2.2], sources: [hvr-ghc]}}
34+
35+
before_install:
36+
- HC=${CC}
37+
- HCPKG=${HC/ghc/ghc-pkg}
38+
- unset CC
39+
- ROOTDIR=$(pwd)
40+
- mkdir -p $HOME/.local/bin
41+
- "PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$HOME/local/bin:$PATH"
42+
- HCNUMVER=$(( $(${HC} --numeric-version|sed -E 's/([0-9]+)\.([0-9]+)\.([0-9]+).*/\1 * 10000 + \2 * 100 + \3/') ))
43+
- echo $HCNUMVER
44+
45+
install:
46+
- cabal --version
47+
- echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]"
48+
- BENCH=${BENCH---enable-benchmarks}
49+
- TEST=${TEST---enable-tests}
50+
- HADDOCK=${HADDOCK-true}
51+
- UNCONSTRAINED=${UNCONSTRAINED-true}
52+
- NOINSTALLEDCONSTRAINTS=${NOINSTALLEDCONSTRAINTS-true}
53+
- GHCHEAD=${GHCHEAD-false}
54+
- travis_retry cabal update -v
55+
- "sed -i.bak 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config"
56+
- rm -fv cabal.project cabal.project.local
57+
- grep -Ev -- '^\s*--' ${HOME}/.cabal/config | grep -Ev '^\s*$'
58+
- "printf 'packages: \".\"\\n' > cabal.project"
59+
- touch cabal.project.local
60+
- "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- hw-json-simd | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
61+
- cat cabal.project || true
62+
- cat cabal.project.local || true
63+
- if [ -f "./configure.ac" ]; then
64+
(cd "." && autoreconf -i);
65+
fi
66+
- rm -f cabal.project.freeze
67+
- cabal new-build -w ${HC} ${TEST} ${BENCH} --project-file="cabal.project" --dep -j2 all
68+
- cabal new-build -w ${HC} --disable-tests --disable-benchmarks --project-file="cabal.project" --dep -j2 all
69+
- rm -rf .ghc.environment.* "."/dist
70+
- DISTDIR=$(mktemp -d /tmp/dist-test.XXXX)
71+
72+
# Here starts the actual work to be performed for the package under test;
73+
# any command which exits with a non-zero exit code causes the build to fail.
74+
script:
75+
# test that source-distributions can be generated
76+
- (cd "." && cabal sdist)
77+
- mv "."/dist/hw-json-simd-*.tar.gz ${DISTDIR}/
78+
- cd ${DISTDIR} || false
79+
- find . -maxdepth 1 -name '*.tar.gz' -exec tar -xvf '{}' \;
80+
- "printf 'packages: hw-json-simd-*/*.cabal\\n' > cabal.project"
81+
- touch cabal.project.local
82+
- "if ! $NOINSTALLEDCONSTRAINTS; then for pkg in $($HCPKG list --simple-output); do echo $pkg | grep -vw -- hw-json-simd | sed 's/^/constraints: /' | sed 's/-[^-]*$/ installed/' >> cabal.project.local; done; fi"
83+
- cat cabal.project || true
84+
- cat cabal.project.local || true
85+
# this builds all libraries and executables (without tests/benchmarks)
86+
- cabal new-build -w ${HC} --disable-tests --disable-benchmarks all
87+
88+
# build & run tests, build benchmarks
89+
- cabal new-build -w ${HC} ${TEST} ${BENCH} all
90+
- if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} ${BENCH} all; fi
91+
92+
# cabal check
93+
- (cd hw-json-simd-* && cabal check)
94+
95+
# haddock
96+
- rm -rf ./dist-newstyle
97+
- if $HADDOCK; then cabal new-haddock -w ${HC} ${TEST} ${BENCH} all; else echo "Skipping haddock generation";fi
98+
99+
# Build without installed constraints for packages in global-db
100+
- if $UNCONSTRAINED; then rm -f cabal.project.local; echo cabal new-build -w ${HC} --disable-tests --disable-benchmarks all; else echo "Not building without installed constraints"; fi

cbits/debug.h

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <stdint.h>
44
#include <stdio.h>
55

6+
#if defined __AVX2__
67
inline void hw_simd_json_fprint256_num(FILE *file, __m256i var) {
78
uint8_t *val = (uint8_t*)&var;
89
fprintf(file,
@@ -13,71 +14,90 @@ inline void hw_simd_json_fprint256_num(FILE *file, __m256i var) {
1314
, val[16], val[17], val[18], val[19], val[20], val[21], val[22], val[23]
1415
, val[24], val[25], val[26], val[27], val[28], val[29], val[30], val[31]);
1516
}
17+
#endif//__AVX2__
1618

19+
#if defined __AVX2__
1720
inline void hw_simd_json_fprint128_num(FILE *file, __m128i var) {
1821
uint8_t *val = (uint8_t*)&var;
1922
fprintf(file,
2023
"%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x"
2124
, val[ 0], val[ 1], val[ 2], val[ 3], val[ 4], val[ 5], val[ 6], val[ 7]
2225
, val[ 8], val[ 9], val[10], val[11], val[12], val[13], val[14], val[15]);
2326
}
27+
#endif//__AVX2__
2428

29+
#if defined __AVX2__
2530
inline void hw_simd_json_print256_num(__m256i var) {
2631
hw_simd_json_fprint256_num(stdout, var);
2732
}
33+
#endif//__AVX2__
2834

35+
#if defined __AVX2__
2936
inline void hw_simd_json_print128_num(__m128i var) {
3037
hw_simd_json_fprint128_num(stdout, var);
3138
}
39+
#endif//__AVX2__
3240

3341
inline void hw_simd_json_print_bits_8(uint8_t v) {
3442
char *digits = "01";
43+
int i = 0;
3544

36-
for (int i = 0; i < 8; ++i) {
45+
for (i = 0; i < 8; ++i) {
3746
printf("%c", digits[(v >> i) & 1]);
3847
}
3948
}
4049

4150
inline void hw_simd_json_print_bits_16(uint16_t v) {
4251
char *digits = "01";
52+
int i = 0;
4353

44-
for (int i = 0; i < 16; ++i) {
54+
for (i = 0; i < 16; ++i) {
4555
printf("%c", digits[(v >> i) & 1]);
4656
}
4757
}
4858

4959
inline void hw_simd_json_print_bits_32(uint32_t v) {
5060
char *digits = "01";
61+
int i = 0;
5162

52-
for (int i = 0; i < 32; ++i) {
63+
for (i = 0; i < 32; ++i) {
5364
printf("%c", digits[(v >> i) & 1]);
5465
}
5566
}
5667

5768
inline void hw_simd_json_print_bits_64(uint64_t v) {
5869
char *digits = "01";
70+
int i = 0;
5971

60-
for (int i = 0; i < 64; ++i) {
72+
for (i = 0; i < 64; ++i) {
6173
printf("%c", digits[(v >> i) & 1]);
6274
}
6375
}
6476

77+
#if defined __AVX2__
6578
inline void hw_simd_json_print_bits_128(__m128i v) {
66-
for (int i = 0; i < 2; ++i) {
79+
int i = 0;
80+
81+
for (i = 0; i < 2; ++i) {
6782
if (i > 0) {
6883
printf("-");
6984
}
7085

7186
hw_simd_json_print_bits_64(_mm_extract_epi64(v, i));
7287
}
7388
}
89+
#endif//__AVX2__
7490

91+
#if defined __AVX2__
7592
inline void hw_simd_json_print_bits_256(__m256i v) {
76-
for (int i = 0; i < 4; ++i) {
93+
int i = 0;
94+
95+
for (i = 0; i < 4; ++i) {
7796
if (i > 0) {
7897
printf("-");
7998
}
8099

81100
hw_simd_json_print_bits_64(_mm256_extract_epi64(v, i));
82101
}
83102
}
103+
#endif//__AVX2__

hw-json-simd.cabal

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ copyright: 2018 - 2019 John Ky
1313
license: BSD-3-Clause
1414
license-file: LICENSE
1515
build-type: Simple
16+
tested-with: GHC == 8.6.1, GHC == 8.4.3, GHC == 8.2.2
1617
extra-source-files:
1718
cbits/debug.h
1819
cbits/simd.h
@@ -42,13 +43,12 @@ flag sse42
4243
manual: False
4344
default: True
4445

45-
common base { build-depends: base }
46-
common bytestring { build-depends: bytestring }
47-
common hw-json-simd { build-depends: hw-json-simd }
48-
common hw-prim { build-depends: hw-prim }
49-
common lens { build-depends: lens }
50-
common optparse-applicative { build-depends: optparse-applicative }
51-
common vector { build-depends: vector }
46+
common base { build-depends: base >= 4 && < 5 }
47+
common bytestring { build-depends: bytestring >= 0.10.6 && < 0.11 }
48+
common hw-prim { build-depends: hw-prim >= 0.6.2.21 && < 0.7 }
49+
common lens { build-depends: lens >= 4 && < 5 }
50+
common optparse-applicative { build-depends: optparse-applicative >= 0.14 && < 0.15 }
51+
common vector { build-depends: vector >= 0.12 && < 0.13 }
5252

5353
common semigroups { if (!impl(ghc >=8.0.1)) { build-depends: { semigroups >= 0.8.4 && < 0.19 } } }
5454
common transformers { if (!impl(ghc >=8.0.1)) { build-depends: { transformers >= 0.4 && < 0.6 } } }
@@ -66,12 +66,12 @@ library
6666
HaskellWorks.Data.Json.Simd.Internal.Index.Simple
6767
HaskellWorks.Data.Json.Simd.Internal.Index.Standard
6868
HaskellWorks.Data.Json.Simd.Internal.List
69-
other-modules:
70-
Paths_hw_json_simd
69+
autogen-modules: Paths_hw_json_simd
70+
other-modules: Paths_hw_json_simd
7171
hs-source-dirs:
7272
src
7373
ghc-options: -Wall
74-
cc-options: -mssse3 -O3 -mlzcnt -mbmi2 -mavx2
74+
cc-options: -mssse3 -mlzcnt -mbmi2 -mavx2
7575
include-dirs:
7676
cbits
7777
c-sources:
@@ -106,14 +106,14 @@ executable hw-json-simd
106106
, semigroups
107107
, vector
108108
main-is: Main.hs
109+
autogen-modules: Paths_hw_json_simd
109110
other-modules:
110111
App.Commands
111112
App.Commands.CreateIndex
112113
App.Commands.Types
113114
App.Lens
114115
Paths_hw_json_simd
115-
hs-source-dirs:
116-
app
116+
hs-source-dirs: app
117117
ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
118118
build-depends: hw-json-simd
119119
if flag(sse42)
@@ -134,16 +134,14 @@ executable hw-json-simd
134134
test-suite hw-json-simd-test
135135
import: base
136136
, bytestring
137-
, hw-json-simd
138137
, hw-prim
139138
, lens
140139
, vector
141140
type: exitcode-stdio-1.0
142141
main-is: Spec.hs
143-
other-modules:
144-
Paths_hw_json_simd
145-
hs-source-dirs:
146-
test
142+
autogen-modules: Paths_hw_json_simd
143+
other-modules: Paths_hw_json_simd
144+
hs-source-dirs: test
147145
ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
148146
build-depends: hw-json-simd
149147
if flag(sse42)

0 commit comments

Comments
 (0)