lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

do-openwrt (4400B)


      1 #!/bin/sh
      2 set -e
      3 
      4 # nacl/do
      5 # D. J. Bernstein
      6 # Public domain.
      7 
      8 version=`cat version`
      9 project=nacl
     10 
     11 top="`pwd`/build"
     12 bin="$top/bin"
     13 lib="$top/lib"
     14 include="$top/include"
     15 work="$top/work"
     16 
     17 
     18 # and work around bug in GNU sort
     19 LANG=C
     20 export LANG
     21 
     22 rm -rf "$top"
     23 mkdir -p "$top"
     24 mkdir -p "$bin"
     25 mkdir -p "$lib"
     26 mkdir -p "$include"
     27 
     28 exec >"$top/log"
     29 exec 2>&1
     30 exec 5>"$top/data"
     31 exec </dev/null
     32 
     33 echo "=== `date` === starting"
     34 
     35 echo "=== `date` === building inttypes"
     36 for target in int8 int16 int32 int64 uint8 uint16 uint32 uint64; do
     37   (
     38     echo "#ifndef crypto_${target}_h"
     39     echo "#define crypto_${target}_h"
     40     echo ""
     41     echo "#include <stdint.h>"
     42     echo ""
     43     echo "typedef ${target}_t crypto_${target};"
     44     echo ""
     45     echo "#endif"
     46   ) > "$include/crypto_$target.h"
     47 done
     48 
     49 echo "=== `date` === building randombytes"
     50 rm -rf "$work"
     51 mkdir -p "$work"
     52 cp -pr randombytes/* "$work"
     53 (
     54   cd "$work"
     55 
     56   cp devurandom.c randombytes-impl.c
     57   cp devurandom.h randombytes-impl.h
     58   $CC $CFLAGS -c randombytes-impl.c
     59   mkdir -p lib
     60   mv randombytes-impl.o lib/randombytes.o
     61   mkdir -p include
     62   mv randombytes-impl.h include/randombytes.h
     63 )
     64 cp -pr "$work"/lib/* "$lib"
     65 cp -pr "$work"/include/* "$include"
     66 
     67 rm -rf "$work"
     68 mkdir -p "$work"
     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 )
     73 
     74 # loop over operations
     75 cat OPERATIONS \
     76 | while read o
     77 do
     78   [ -d "$o" ] || continue
     79 
     80   # for each operation, loop over primitives
     81   ls "$o" \
     82   | sort \
     83   | while read p
     84   do
     85     [ -d "$o/$p" ] || continue
     86     op="${o}_${p}"
     87 
     88     startdate=`date +%Y%m%d`
     89 
     90     echo "=== `date` === $o/$p"
     91 
     92     rm -rf "$work"
     93     mkdir -p "$work"
     94 
     95     if [ -d "$o/$p/ref" ]; then
     96       implementationdir="$o/$p/ref"
     97     else
     98       implementationdir="$o/$p/portable"
     99     fi
    100 
    101     opi=`echo "$implementationdir" | tr ./- ___`
    102 
    103     echo "=== `date` === $implementationdir"
    104 
    105     cfiles=`ls "$implementationdir" | grep '\.c$' || :`
    106     sfiles=`ls "$implementationdir" | grep '\.[sS]$' || :`
    107 
    108     cp -p "$o"/*.c "$work"
    109 
    110     cp -pr "$implementationdir"/* "$work"
    111 
    112     cp -p MACROS "$work/MACROS"
    113     cp -p PROTOTYPES.c "$work/PROTOTYPES.c"
    114 
    115     (
    116       cd "$work"
    117       (
    118 	echo "#ifndef ${o}_H"
    119 	echo "#define ${o}_H"
    120 	echo ""
    121 	echo "#include \"${op}.h\""
    122 	echo ""
    123 	egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
    124 	  | sed "s/$o/$op/" | while read mop
    125 	do
    126 	  echo "#define ${mop} ${mop}" | sed "s/$op/$o/"
    127 	done
    128 	echo "#define ${o}_PRIMITIVE \"${p}\""
    129 	echo "#define ${o}_IMPLEMENTATION ${op}_IMPLEMENTATION"
    130 	echo "#define ${o}_VERSION ${op}_VERSION"
    131 	echo ""
    132 	echo "#endif"
    133       ) > "$o.h"
    134       (
    135 	echo "#ifndef ${op}_H"
    136 	echo "#define ${op}_H"
    137 	echo ""
    138 	sed 's/[ 	]CRYPTO_/ '"${opi}"'_/g' < api.h
    139 	echo '#ifdef __cplusplus'
    140 	  #echo '#include <string>'
    141 	  #egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.cpp \
    142 	  #    | sed "s/$o/$opi/"
    143 	echo 'extern "C" {'
    144 	echo '#endif'
    145 	egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < PROTOTYPES.c \
    146 	  | sed "s/$o/$opi/"
    147 	echo '#ifdef __cplusplus'
    148 	echo '}'
    149 	echo '#endif'
    150 	echo ""
    151 	egrep "${o}"'$|'"${o}"'\(|'"${o}"'_' < MACROS \
    152 	  | sed "s/$o/$opi/" | while read mopi
    153 	do
    154 	    echo "#define ${mopi} ${mopi}" | sed "s/$opi/$op/"
    155 	done
    156 	echo "#define ${op}_IMPLEMENTATION \"${implementationdir}\""
    157 	echo "#ifndef ${opi}_VERSION"
    158 	echo "#define ${opi}_VERSION \"-\""
    159 	echo "#endif"
    160 	echo "#define ${op}_VERSION ${opi}_VERSION"
    161 	echo ""
    162 	echo "#endif"
    163       ) > "$op.h"
    164 
    165       echo "=== `date` === $implementationdir $CC $CFLAGS"
    166       for f in $cfiles $sfiles
    167       do
    168 	ok=1
    169 	$CC $CFLAGS \
    170 	    -I. -I"$include" \
    171 	    -c "$f" >errors 2>&1 || ok=0
    172 	( if [ `wc -l < errors` -lt 25 ]
    173 	  then
    174 	    cat errors
    175 	  else
    176 	    head errors
    177 	    echo ...
    178 	    tail errors
    179 	  fi
    180 	) \
    181 	| while read err
    182 	do
    183 	  echo "$version $startdate $o $p fromcompiler $implementationdir $f $err" >&5
    184 	done
    185 
    186 	[ "$ok" = 1 ]
    187       done
    188 
    189       for f in *.o
    190       do
    191 	mv "$f" "${opi}-$f"
    192       done
    193     )
    194 
    195     echo "=== `date` === $implementationdir $CC $CFLAGS finishing"
    196 
    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" \
    202     || :
    203   done
    204 done
    205 
    206 echo "=== `date` === finishing"