14 include="$top/include"
18 # and work around bug in GNU sort
33 echo "=== `date` === starting"
35 echo "=== `date` === building inttypes"
36 for target in int8 int16 int32 int64 uint8 uint16 uint32 uint64; do
38 echo "#ifndef crypto_${target}_h"
39 echo "#define crypto_${target}_h"
41 echo "#include <stdint.h>"
43 echo "typedef ${target}_t crypto_${target};"
46 ) > "$include/crypto_$target.h"
49 echo "=== `date` === building randombytes"
52 cp -pr randombytes/* "$work"
56 cp devurandom.c randombytes-impl.c
57 cp devurandom.h randombytes-impl.h
58 $CC $CFLAGS -c randombytes-impl.c
60 mv randombytes-impl.o lib/randombytes.o
62 mv randombytes-impl.h include/randombytes.h
64 cp -pr "$work"/lib/* "$lib"
65 cp -pr "$work"/include/* "$include"
69 echo 'void crypto_'"$project"'_base(void) { ; }' > "$work/${project}_base.c"
70 ( cd "$work" && $CC $CFLAGS -c ${project}_base.c )
71 $AR cr "$lib/lib${project}.a" "$work/${project}_base.o"
72 ( $RANLIB "$lib/lib${project}.a" || exit 0 )
74 # loop over operations
78 [ -d "$o" ] || continue
80 # for each operation, loop over primitives
85 [ -d "$o/$p" ] || continue
88 startdate=`date +%Y%m%d`
90 echo "=== `date` === $o/$p"
95 if [ -d "$o/$p/ref" ]; then
96 implementationdir="$o/$p/ref"
98 implementationdir="$o/$p/portable"
101 opi=`echo "$implementationdir" | tr ./- ___`
103 echo "=== `date` === $implementationdir"
105 cfiles=`ls "$implementationdir" | grep '\.c$' || :`
106 sfiles=`ls "$implementationdir" | grep '\.[sS]$' || :`
108 cp -p "$o"/*.c "$work"
110 cp -pr "$implementationdir"/* "$work"
112 cp -p MACROS "$work/MACROS"
113 cp -p PROTOTYPES.c "$work/PROTOTYPES.c"
118 echo "#ifndef ${o}_H"
119 echo "#define ${o}_H"
121 echo "#include \"${op}.h\""
123 egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
124 | sed "s/$o/$op/" | while read mop
126 echo "#define ${mop} ${mop}" | sed "s/$op/$o/"
128 echo "#define ${o}_PRIMITIVE \"${p}\""
129 echo "#define ${o}_IMPLEMENTATION ${op}_IMPLEMENTATION"
130 echo "#define ${o}_VERSION ${op}_VERSION"
135 echo "#ifndef ${op}_H"
136 echo "#define ${op}_H"
138 sed 's/[ ]CRYPTO_/ '"${opi}"'_/g' < api.h
139 echo '#ifdef __cplusplus'
140 #echo '#include <string>'
141 #egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.cpp \
145 egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.c \
147 echo '#ifdef __cplusplus'
151 egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
152 | sed "s/$o/$opi/" | while read mopi
154 echo "#define ${mopi} ${mopi}" | sed "s/$opi/$op/"
156 echo "#define ${op}_IMPLEMENTATION \"${implementationdir}\""
157 echo "#ifndef ${opi}_VERSION"
158 echo "#define ${opi}_VERSION \"-\""
160 echo "#define ${op}_VERSION ${opi}_VERSION"
165 echo "=== `date` === $implementationdir $CC $CFLAGS"
166 for f in $cfiles $sfiles
171 -c "$f" >errors 2>&1 || ok=0
172 ( if [ `wc -l < errors` -lt 25 ]
183 echo "$version $startdate $o $p fromcompiler $implementationdir $f $err" >&5
195 echo "=== `date` === $implementationdir $CC $CFLAGS finishing"
197 $AR cr "$lib/lib${project}.a" "$work"/*.o \
198 && ( $RANLIB "$lib/lib${project}.a" || exit 0 ) \
199 && cp -p "$work/$op.h" "$include/$op.h" \
200 && [ -f "$o/$p/selected" ] \
201 && cp -p "$work/$o.h" "$include/$o.h" \
206 echo "=== `date` === finishing"