always enable keygen
[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, 2013, 2014, 2015
7 #               Free Software Initiative of Japan
8 #
9 # This file is a part of Gnuk, a GnuPG USB Token implementation.
10 # Gnuk is free software: you can redistribute it and/or modify it
11 # under the terms of the GNU General Public License as published by
12 # the Free Software Foundation, either version 3 of the License, or
13 # (at your option) any later version.
14 #
15 # Gnuk is distributed in the hope that it will be useful, but WITHOUT
16 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
18 # License for more details.
19 #
20 # You should have received a copy of the GNU General Public License
21 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
23 # Default settings
24 help=no
25 vidpid=none
26 target=FST_01
27 verbose=no
28 with_dfu=default
29 debug=no
30 sys1_compat=yes
31 pinpad=no
32 certdo=no
33 hid_card_change=no
34
35 # Revision number
36 if test -d ../.git; then
37   REVISION=`git describe --dirty="-modified"` 
38 else
39   REVISION=`cat ../VERSION`
40 fi
41
42 # Process each option
43 for option; do
44   case $option in
45   *=*)  optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
46   *)    optarg=yes ;;
47   esac
48
49   case $option in
50   -h | --help)
51     help=yes ;;
52   -v | --verbose)
53     verbose=yes ;;
54   --vidpid=*)
55     vidpid=$optarg ;;
56   --target=*)
57     target=$optarg ;;
58   --enable-debug)
59     debug=yes ;;
60   --disable-debug)
61     debug=no ;;
62   --enable-pinpad=*)
63     pinpad=$optarg ;;
64   --disable-pinpad)
65     pinpad=no ;;
66   --enable-certdo)
67     certdo=yes ;;
68   --disable-certdo)
69     certdo=no ;;
70   --enable-hid-card-change)
71     hid_card_change=yes ;;
72   --disable-hid-card-change)
73     hid_card_change=no ;;
74   --enable-sys1-compat)
75     sys1_compat=yes ;;
76   --disable-sys1-compat)
77     sys1_compat=no ;;
78   --with-dfu)
79     with_dfu=yes ;;
80   --without-dfu)
81     with_dfu=no ;;
82   *)
83     echo "Unrecognized option \`$option'" >&2
84     echo "Try \`$0 --help' for more information." >&2
85     exit 1
86     ;;
87   esac
88 done
89
90 if test "$help" = "yes"; then
91   cat <<EOF
92 Usage: $0 [OPTION]...
93
94 Defaults for the options are specified in brackets.
95
96 Configuration:
97   -h, --help            display this help and exit      [no]
98   --vidpid=VID:PID      specify vendor/product ID       [<NONE>]
99   --target=TARGET       specify target                  [FST_01]
100                         supported targets are:
101                            FST_01
102                            OLIMEX_STM32_H103
103                            STM32_PRIMER2
104                            STBEE
105                            STBEE_MINI
106                            MAPLE_MINI
107                            CQ_STARM
108                            FST_01_00 (unreleased version with 8MHz XTAL)
109   --enable-debug        debug with virtual COM port     [no]
110   --enable-pinpad=cir
111                         PIN entry support               [no]
112   --enable-certdo       support CERT.3 data object      [no]
113   --enable-sys1-compat  enable SYS 1.0 compatibility    [yes]
114                            executable is target dependent
115   --disable-sys1-compat disable SYS 1.0 compatibility   [no]
116                            executable is target independent
117                            but requires SYS 2.0 or newer
118   --with-dfu            build image for DFU             [<target specific>]
119 EOF
120   exit 0
121 fi
122
123 if test "$vidpid" = "none"; then
124   echo "Please specify Vendor ID and Product ID by --vidpid option." 
125   exit 1
126 fi
127
128 BOARD_HEADER_FILE=board-`echo $target | tr '_[:upper:]' '-[:lower:]'`.h
129 echo Header file is: $BOARD_HEADER_FILE
130 ln -sf ../chopstx/board/$BOARD_HEADER_FILE board.h
131
132 # Flash page size in byte
133 FLASH_PAGE_SIZE=1024
134 # Flash memory size in KiB
135 FLASH_SIZE=128
136 # Memory size in KiB
137 MEMORY_SIZE=20
138
139 # Settings for TARGET
140 case $target in
141 CQ_STARM|STBEE_MINI)
142   if test "$with_dfu" = "default"; then
143     with_dfu=yes;
144   fi  ;;
145 STM32_PRIMER2)
146   FLASH_PAGE_SIZE=2048
147   FLASH_SIZE=512
148   MEMORY_SIZE=64
149   ;;
150 STBEE)
151   FLASH_PAGE_SIZE=2048
152   FLASH_SIZE=512
153   MEMORY_SIZE=64
154   if test "$with_dfu" = "default"; then
155     with_dfu=yes;
156   fi  ;;
157 STM8S_DISCOVERY)
158   FLASH_SIZE=64
159   ;;
160 *)
161   ;;
162 esac
163
164 # --enable-debug option
165 if test "$debug" = "yes"; then
166   DEBUG_MAKE_OPTION="ENABLE_DEBUG=1"
167   DEBUG_DEFINE="#define DEBUG 1"
168   echo "Debug option enabled"
169 else
170   DEBUG_MAKE_OPTION="# ENABLE_DEBUG=1"
171   DEBUG_DEFINE="#undef DEBUG"
172   echo "Debug option disabled"
173 fi
174
175 # --with-dfu option
176 if test "$with_dfu" = "yes"; then
177   if test "$target" = "FST_01" -o "$target" = "FST_01_00"; then
178       echo "FST-01 doesn't have DFU loader, you should not use --with-dfu."
179       exit 1
180   fi
181   echo "Configured for DFU"
182   ORIGIN=0x08003000
183   FLASH_SIZE=`expr $FLASH_SIZE - 12`
184   DFU_DEFINE="#define DFU_SUPPORT 1"
185   HEXOUTPUT_MAKE_OPTION="ENABLE_OUTPUT_HEX=yes"
186 else
187   with_dfu=no
188   echo "Configured for bare system (no-DFU)"
189   ORIGIN=0x08000000
190   DFU_DEFINE="#undef DFU_SUPPORT"
191   HEXOUTPUT_MAKE_OPTION=""
192 fi
193
194 # --enable-pinpad option
195 MSC_SIZE="0"
196 TIM_SIZE="0"
197 EXT_SIZE="0"
198 if test "$pinpad" = "no"; then
199   PINPAD_MAKE_OPTION="# ENABLE_PINPAD="
200   PINPAD_DEFINE="#undef PINPAD_SUPPORT"
201   PINPAD_MORE_DEFINE=""
202   echo "PIN pad option disabled"
203 else
204   PINPAD_MAKE_OPTION="ENABLE_PINPAD=$pinpad"
205   PINPAD_DEFINE="#define PINPAD_SUPPORT 1"
206   PINPAD_MORE_DEFINE="#define PINPAD_${pinpad^^[a-z]}_SUPPORT 1"
207   echo "PIN pad option enabled ($pinpad)"
208   if test "$pinpad" = "dnd"; then
209      MSC_SIZE="0x0200"
210   elif test "$pinpad" = "cir"; then
211      TIM_SIZE="0x00c0"
212      EXT_SIZE="0x00c0"
213   fi
214 fi
215
216 # --enable-certdo option
217 if test "$certdo" = "yes"; then
218   CERTDO_DEFINE="#define CERTDO_SUPPORT 1"
219   echo "CERT.3 Data Object is supported"
220 else
221   CERTDO_DEFINE="#undef CERTDO_SUPPORT"
222   echo "CERT.3 Data Object is NOT supported"
223 fi
224
225 # --enable-hid-card-change option
226 if test "$hid_card_change" = "yes"; then
227   HID_CARD_CHANGE_DEFINE="#define HID_CARD_CHANGE_SUPPORT 1"
228   echo "Card insert/removal by HID device is supported"
229 else
230   HID_CARD_CHANGE_DEFINE="#undef HID_CARD_CHANGE_SUPPORT"
231   echo "Card insert/removal by HID device is NOT supported"
232 fi
233
234 ### !!! Replace following string of "FSIJ" to yours !!! ####
235 SERIALNO="FSIJ-`cat ../VERSION | sed -e 's%^[^/]*/%%'`-"
236
237 SERIALNO_STR_LEN_DEFINE="#define SERIALNO_STR_LEN ${#SERIALNO}"
238
239
240 if test "$sys1_compat" = "yes"; then
241   CONFIG="$target:dfu=$with_dfu:debug=$debug:pinpad=$pinpad:certdo=$certdo"
242 else
243   if test "$with_dfu" = "yes"; then
244     echo "Common binary can't support DFU loader, don't use --with-dfu."
245     exit 1
246   fi
247   # Override settings for common binary.  Safer side.
248   FLASH_PAGE_SIZE=2048
249   FLASH_SIZE=128
250   MEMORY_SIZE=20
251   CONFIG="common:debug=$debug:pinpad=$pinpad:certdo=$certdo"
252 fi
253
254 output_vid_pid_version () {
255   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"
256   echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* bcdDevice  */%p"
257 }
258
259 output_vendor_product_serial_strings () {
260   prefix=$1
261
262   echo "static const uint8_t ${prefix}string_vendor[] = {"
263   echo "  ${#VENDOR}*2+2,                       /* bLength */"
264   echo "  USB_STRING_DESCRIPTOR_TYPE,   /* bDescriptorType */"
265   echo "  /* Manufacturer: \"$VENDOR\" */"
266   echo $VENDOR | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
267   echo '};'
268   echo
269   echo "static const uint8_t ${prefix}string_product[] = {"
270   echo "  ${#PRODUCT}*2+2,                      /* bLength */"
271   echo "  USB_STRING_DESCRIPTOR_TYPE,   /* bDescriptorType */"
272   echo "  /* Product name: \"$PRODUCT\" */"
273   echo $PRODUCT | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
274   echo '};'
275
276   if test -n "$prefix"; then
277   echo
278   echo "uint8_t ${prefix}string_serial[] = {"
279   echo "  ${#SERIALNO}*2+2+16,                  /* bLength */"
280   echo "  USB_STRING_DESCRIPTOR_TYPE,   /* bDescriptorType */"
281   echo "  /* Serial number: \"$SERIALNO\" */"
282   echo $SERIALNO | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
283   echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
284   echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
285   echo '};'
286   echo
287   echo '#ifdef USB_STRINGS_FOR_GNUK'
288   echo "static const uint8_t ${prefix}revision_detail[] = {"
289   echo "  ${#REVISION}*2+2,                     /* bLength */"
290   echo "  USB_STRING_DESCRIPTOR_TYPE,   /* bDescriptorType */"
291   echo "  /* revision detail: \"$REVISION\" */"
292   echo $REVISION | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
293   echo '};'
294   echo
295   echo "static const uint8_t ${prefix}config_options[] = {"
296   echo "  ${#CONFIG}*2+2,                       /* bLength */"
297   echo "  USB_STRING_DESCRIPTOR_TYPE,   /* bDescriptorType */"
298   echo "  /* configure options: \"$CONFIG\" */"
299   echo $CONFIG | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
300   echo '};'
301   echo '#endif'
302   fi
303 }
304
305 if !(IFS="      "
306   while read VIDPID VERSION PRODUCT VENDOR; do
307     if test "$vidpid" = "$VIDPID"; then
308       output_vid_pid_version > usb-vid-pid-ver.c.inc
309       output_vendor_product_serial_strings gnuk_ >usb-strings.c.inc
310       exit 0
311     fi
312   done; exit 1) < ../GNUK_USB_DEVICE_ID
313 then
314   echo "Please specify valid Vendor ID and Product ID." 
315   echo "Check ../GNUK_USB_DEVICE_ID."
316   exit 1
317 fi
318
319 if test "$sys1_compat" = "no"; then
320    # Disable when you are sure that it's sys version 2.1.
321    # Note that Gnuk 1.0 and NeuG (until 0.06) uses sys version 1.0.
322    # Disabling the compatibility, executable will be target independent,
323    # assuming the clock initialization will be done by SYS (before entry).
324    have_sys_h="-DHAVE_SYS_H"
325 else
326    have_sys_h=""
327 fi
328
329
330 sed -e "s%@HAVE_SYS_H@%$have_sys_h%" \
331     -e "s%@DEBUG_MAKE_OPTION@%$DEBUG_MAKE_OPTION%" \
332     -e "s%@PINPAD_MAKE_OPTION@%$PINPAD_MAKE_OPTION%" \
333     -e "s%@HEXOUTPUT_MAKE_OPTION@%$HEXOUTPUT_MAKE_OPTION%" \
334         < Makefile.in > Makefile
335 if test "$certdo" = "yes"; then
336   sed -e "/^@CERTDO_SUPPORT_START@$/ d" -e "/^@CERTDO_SUPPORT_END@$/ d" \
337       -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
338       -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
339       -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
340       -e "s/@MSC_SIZE@/$MSC_SIZE/" \
341       -e "s/@TIM_SIZE@/$TIM_SIZE/" \
342       -e "s/@EXT_SIZE@/$EXT_SIZE/" \
343         < gnuk.ld.in > gnuk.ld
344 else
345   sed -e "/^@CERTDO_SUPPORT_START@$/,/^@CERTDO_SUPPORT_END@$/ d" \
346       -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
347       -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
348       -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
349       -e "s/@MSC_SIZE@/$MSC_SIZE/" \
350       -e "s/@TIM_SIZE@/$TIM_SIZE/" \
351       -e "s/@EXT_SIZE@/$EXT_SIZE/" \
352         < gnuk.ld.in > gnuk.ld
353 fi
354 sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \
355     -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
356     -e "s/@PINPAD_DEFINE@/$PINPAD_DEFINE/" \
357     -e "s/@PINPAD_MORE_DEFINE@/$PINPAD_MORE_DEFINE/" \
358     -e "s/@CERTDO_DEFINE@/$CERTDO_DEFINE/" \
359     -e "s/@HID_CARD_CHANGE_DEFINE@/$HID_CARD_CHANGE_DEFINE/" \
360     -e "s/@SERIALNO_STR_LEN_DEFINE@/$SERIALNO_STR_LEN_DEFINE/" \
361         < config.h.in > config.h
362 exit 0