keygen is configure option
[gnuk/gnuk.git] / src / configure
1 #! /bin/bash
2
3 #
4 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
5 #
6 # Copyright (C) 2010, 2011, 2012 Free Software Initiative of Japan
7 #
8 # This file is a part of Gnuk, a GnuPG USB Token implementation.
9 # Gnuk is free software: you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # Gnuk is distributed in the hope that it will be useful, but WITHOUT
15 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17 # License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22 # Default settings
23 help=no
24 vidpid=none
25 target=OLIMEX_STM32_H103
26 verbose=no
27 with_dfu=default
28 debug=no
29 pinpad=no
30 certdo=no
31 keygen=no
32
33 # Process each option
34 for option; do
35   case $option in
36   *=*)  optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
37   *)    optarg=yes ;;
38   esac
39
40   case $option in
41   -h | --help)
42     help=yes ;;
43   -v | --verbose)
44     verbose=yes ;;
45   --vidpid=*)
46     vidpid=$optarg ;;
47   --target=*)
48     target=$optarg ;;
49   --enable-debug)
50     debug=yes ;;
51   --disable-debug)
52     debug=no ;;
53   --enable-pinpad)
54     pinpad=yes ;;
55   --enable-pinpad=*)
56     pinpad=$optarg ;;
57   --disable-pinpad)
58     pinpad=no ;;
59   --enable-certdo)
60     certdo=yes ;;
61   --disable-certdo)
62     certdo=no ;;
63   --enable-keygen)
64     keygen=yes ;;
65   --disable-keygen)
66     keygen=no ;;
67   --with-dfu)
68     with_dfu=yes ;;
69   --without-dfu)
70     with_dfu=no ;;
71   *)
72     echo "Unrecognized option \`$option'" >&2
73     echo "Try \`$0 --help' for more information." >&2
74     exit 1
75     ;;
76   esac
77 done
78
79 if test "$help" = "yes"; then
80   cat <<EOF
81 Usage: $0 [OPTION]...
82
83 Defaults for the options are specified in brackets.
84
85 Configuration:
86   -h, --help            display this help and exit      [no]
87   --vidpid=VID:PID      specify vendor/product ID       [<NONE>]
88   --target=TARGET       specify target                  [OLIMEX_STM32_H103]
89                         supported targes are:
90                            OLIMEX_STM32_H103
91                            STM32_PRIMER2
92                            CQ_STARM
93                            STBEE_MINI
94                            STM8S_DISCOVERY
95                            STBEE
96                            FST_01
97   --enable-debug        debug with virtual COM port     [no]
98   --enable-pinpad={dnd,cir,dial}
99                         PIN entry support               [no]
100   --enable-certdo       support CERT.3 data object      [no]
101   --enable-keygen       support key generation          [no]
102   --with-dfu            build image for DFU             [<target specific>]
103 EOF
104   exit 0
105 fi
106
107 if test "$vidpid" = "none"; then
108   echo "Please specify Vendor ID and Product ID by --vidpid option." 
109   exit 1
110 fi
111
112 BOARD_DIR=../boards/$target
113 if test -d $BOARD_DIR; then
114   echo "Configured for target: $target"
115 else
116   echo "Unsupported target \`$target'" >&2
117   exit 1
118 fi
119
120 # Flash page size in byte
121 FLASH_PAGE_SIZE=1024
122 # Flash memory size in KB
123 FLASH_SIZE=128
124
125 # Settings for TARGET
126 case $target in
127 CQ_STARM|STBEE_MINI)
128   if test "$with_dfu" = "default"; then
129     with_dfu=yes;
130   fi  ;;
131 STM32_PRIMER2)
132   FLASH_PAGE_SIZE=2048
133   FLASH_SIZE=512
134   ;;
135 STBEE)
136   FLASH_PAGE_SIZE=2048
137   FLASH_SIZE=512
138   if test "$with_dfu" = "default"; then
139     with_dfu=yes;
140   fi  ;;
141 STM8S_DISCOVERY)
142   FLASH_SIZE=64
143   ;;
144 *)
145   ;;
146 esac
147
148 # --enable-debug option
149 if test "$debug" = "yes"; then
150   DEBUG_MAKE_OPTION="ENABLE_DEBUG=1"
151   DEBUG_DEFINE="#define DEBUG 1"
152   echo "Debug option enabled"
153 else
154   DEBUG_MAKE_OPTION="# ENABLE_DEBUG=1"
155   DEBUG_DEFINE="#undef DEBUG"
156   echo "Debug option disabled"
157 fi
158
159 # --with-dfu option
160 if test "$with_dfu" = "yes"; then
161   echo "Configured for DFU"
162   ORIGIN=0x08003000
163   FLASH_SIZE=`expr $FLASH_SIZE - 12`
164   DFU_DEFINE="#define DFU_SUPPORT 1"
165 else
166   with_dfu=no
167   echo "Configured for bare system (no-DFU)"
168   ORIGIN=0x08000000
169   DFU_DEFINE="#undef DFU_SUPPORT"
170 fi
171
172 # --enable-pinpad option
173 if test "$pinpad" = "no"; then
174   PINPAD_MAKE_OPTION="# ENABLE_PINPAD="
175   PINPAD_DEFINE="#undef PINPAD_SUPPORT"
176   PINPAD_MORE_DEFINE=""
177   echo "PIN pad option disabled"
178 elif test "$pinpad" = "yes"; then
179   pinpad=dnd
180   PINPAD_MAKE_OPTION="ENABLE_PINPAD=dnd"
181   PINPAD_DEFINE="#define PINPAD_SUPPORT 1"
182   PINPAD_MORE_DEFINE="#define PINPAD_DND_SUPPORT 1"
183   echo "PIN pad option enabled (dnd)"
184 else
185   PINPAD_MAKE_OPTION="ENABLE_PINPAD=$pinpad"
186   PINPAD_DEFINE="#define PINPAD_SUPPORT 1"
187   PINPAD_MORE_DEFINE="#define PINPAD_${pinpad^^[a-z]}_SUPPORT 1"
188   echo "PIN pad option enabled ($pinpad)"
189 fi
190
191 # --enable-certdo option
192 if test "$certdo" = "yes"; then
193   CERTDO_DEFINE="#define CERTDO_SUPPORT 1"
194   echo "CERT.3 Data Object is supported"
195 else
196   CERTDO_DEFINE="#undef CERTDO_SUPPORT"
197   echo "CERT.3 Data Object is NOT supported"
198 fi
199
200 # --enable-keygen option
201 if test "$keygen" = "yes"; then
202   KEYGEN_SUPPORT="-DKEYGEN_SUPPORT"
203   echo "Key generation on device is supported"
204 else
205   KEYGEN_SUPPORT=""
206   echo "Key generation on device is NOT supported"
207 fi
208
209 REVISION=`git describe --dirty="-modified"` 
210 CONFIG="$target:dfu=$with_dfu:debug=$debug:pinpad=$pinpad:certdo=$certdo:keygen=$keygen"
211
212 if !(IFS="      "
213   while read VIDPID VERSION PRODUCT VENDOR; do
214     if test "$vidpid" = "$VIDPID"; then
215       (echo $VIDPID | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\):\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* idVendor  */\n  0x\4, 0x\3, /* idProduct */%p"
216        echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* bcdDevice  */%p"
217       ) > usb-vid-pid-ver.c.inc
218       (echo 'static const uint8_t gnukStringVendor[] = {'
219        echo "  ${#VENDOR}*2+2,                  /* bLength */"
220        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
221        echo "  /* Manufacturer: \"$VENDOR\" */"
222        echo $VENDOR | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
223        echo '};'
224        echo
225        echo 'static const uint8_t gnukStringProduct[] = {'
226        echo "  ${#PRODUCT}*2+2,                 /* bLength */"
227        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
228        echo "  /* Product name: \"$PRODUCT\" */"
229        echo $PRODUCT | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
230        echo '};'
231        echo
232        echo '#ifdef USB_STRINGS_FOR_GNUK'
233        echo 'static const uint8_t gnuk_revision_detail[] = {'
234        echo "  ${#REVISION}*2+2,                        /* bLength */"
235        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
236        echo "  /* revision detail: \"$REVISION\" */"
237        echo $REVISION | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
238        echo '};'
239        echo
240        echo 'static const uint8_t gnuk_config_options[] = {'
241        echo "  ${#CONFIG}*2+2,                  /* bLength */"
242        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
243        echo "  /* configure options: \"$CONFIG\" */"
244        echo $CONFIG | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
245        echo '};'
246        echo '#endif'
247        ) >usb-strings.c.inc
248       exit 0
249     fi
250   done; exit 1) < ../GNUK_USB_DEVICE_ID
251 then
252   echo "Please specify valid Vendor ID and Product ID." 
253   echo "Check ../GNUK_USB_DEVICE_ID."
254   exit 1
255 fi
256
257 sed -e "s%@BOARD_DIR@%$BOARD_DIR%" \
258     -e "s%@DEBUG_MAKE_OPTION@%$DEBUG_MAKE_OPTION%" \
259     -e "s%@PINPAD_MAKE_OPTION@%$PINPAD_MAKE_OPTION%" \
260     -e "s%@KEYGEN_SUPPORT@%$KEYGEN_SUPPORT%" \
261         < Makefile.in > Makefile
262 if test "$certdo" = "yes"; then
263   sed -e "/^@CERTDO_SUPPORT_START@$/ d" -e "/^@CERTDO_SUPPORT_END@$/ d" \
264       -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
265       -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
266         < gnuk.ld.in > gnuk.ld
267 else
268   sed -e "/^@CERTDO_SUPPORT_START@$/,/^@CERTDO_SUPPORT_END@$/ d" \
269       -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
270       -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
271         < gnuk.ld.in > gnuk.ld
272 fi
273 sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \
274     -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
275     -e "s/@PINPAD_DEFINE@/$PINPAD_DEFINE/" \
276     -e "s/@PINPAD_MORE_DEFINE@/$PINPAD_MORE_DEFINE/" \
277     -e "s/@CERTDO_DEFINE@/$CERTDO_DEFINE/" \
278     -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
279         < config.h.in > config.h
280 exit 0