More fixes for new Chopstx and Fraucheky
[gnuk/neug.git] / src / configure
1 #! /bin/bash
2
3 # This is bash which supports ANSI-C Quoting
4 nl=$'\n'
5
6 #
7 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
8 #
9 # Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016
10 #               Free Software Initiative of Japan
11 #
12 # This file is a part of NeuG, a Random Number Generator implementation.
13 #
14 # NeuG is free software: you can redistribute it and/or modify it
15 # under the terms of the GNU General Public License as published by
16 # the Free Software Foundation, either version 3 of the License, or
17 # (at your option) any later version.
18 #
19 # NeuG is distributed in the hope that it will be useful, but WITHOUT
20 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
22 # License for more details.
23 #
24 # You should have received a copy of the GNU General Public License
25 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
26
27 #
28 # Submodule check
29 #
30 if ! test -f ../chopstx/rules.mk; then
31   echo "Submodule 'chopstx' not found" >&2
32   echo "You might need: git submodule update --init" >&2
33   exit 1
34 fi
35
36 # Default settings
37 help=no
38 vidpid=none
39 target=FST_01
40 verbose=no
41 with_dfu=default
42 debug=no
43 sys1_compat=yes
44 with_fraucheky=no
45 with_index=none
46
47 # Revision numbers
48 if test -d ../.git; then
49   REVISION=`git describe --dirty="-modified"`
50   REVISION_CHOPSTX=`cd ../chopstx && git describe --dirty="-modified"`
51   REVISION_FRAUCHEKY=`cd ../fraucheky &&git describe --dirty="-modified"`
52 else
53   REVISION=`cat ../VERSION`
54   REVISION_CHOPSTX=`cat ../chopstx/VERSION`
55   REVISION_FRAUCHEKY=`cat ../fraucheky/VERSION`
56 fi
57
58 # Process each option
59 for option; do
60   case $option in
61   *=*)  optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
62   *)    optarg=yes ;;
63   esac
64
65   case $option in
66   -h | --help)
67     help=yes ;;
68   -v | --verbose)
69     verbose=yes ;;
70   --vidpid=*)
71     vidpid=$optarg ;;
72   --target=*)
73     target=$optarg ;;
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   --with-fraucheky=*)
83     with_fraucheky=$optarg ;;
84   --without-fraucheky)
85     with_fraucheky=no ;;
86   --with-index=*)
87     with_index=$optarg ;;
88   *)
89     echo "Unrecognized option \`$option'" >&2
90     echo "Try \`$0 --help' for more information." >&2
91     exit 1
92     ;;
93   esac
94 done
95
96 if test "$help" = "yes"; then
97   cat <<EOF
98 Usage: $0 [OPTION]...
99
100 Defaults for the options are specified in brackets.
101
102 Configuration:
103   -h, --help            display this help and exit      [no]
104   --vidpid=VID:PID      specify vendor/product ID       [<NONE>]
105   --target=TARGET       specify target                  [FST_01]
106                         supported targets are:
107                            FST_01
108                            STM8S_DISCOVERY
109                            OLIMEX_STM32_H103
110                            STM32_PRIMER2
111                            STBEE
112                            STBEE_MINI
113                            MAPLE_MINI
114                            ST_DONGLE
115                            ST_NUCLEO_F103
116                            NITROKEY_START
117                            CQ_STARM
118                            FST_01_00 (unreleased version with 8MHz XTAL)
119   --enable-sys1-compat  enable SYS 1.0 compatibility    [yes]
120                            executable is target dependent
121   --disable-sys1-compat disable SYS 1.0 compatibility   [no]
122                            executable is target independent
123                            but requires SYS 3.0 or newer
124   --with-dfu            build image for DFU             [<target specific>]
125
126   --with-fraucheky=VID:PID
127                         include fraucheky support       [no]
128   --with-index=INDEX    specify INDEX file              [none]
129 EOF
130   exit 0
131 fi
132
133 if test "$vidpid" = "none"; then
134   echo "Please specify Vendor ID and Product ID by --vidpid option." >&2
135   exit 1
136 fi
137
138 if ! test "$with_fraucheky" = "no"; then
139   ../fraucheky/configure $with_fraucheky $with_index $REVISION $REVISION_CHOPSTX $REVISION_FRAUCHEKY
140   ENABLE_FRAUCHEKY=""
141   FRAUCHEKY_DEFINE="#define FRAUCHEKY_SUPPORT 1"
142   FRAUCHEKY_MSC_DEFINE="#define MSC_INTERFACE_NO    2"
143 else
144   ENABLE_FRAUCHEKY="# "
145   FRAUCHEKY_DEFINE="#undef FRAUCHEKY_SUPPORT"
146   FRAUCHEKY_MSC_DEFINE="#undef MSC_INTERFACE_NO"
147   if ! test -f ../fraucheky/build.mk; then
148     echo "Submodule 'fraucheky' not found" >&2
149     echo "You might need: git submodule update --init" >&2
150     exit 1
151   fi
152 fi
153
154 BOARD_HEADER_FILE=board-`echo $target | tr '_[:upper:]' '-[:lower:]'`.h
155 echo Header file is: $BOARD_HEADER_FILE
156 ln -sf ../chopstx/board/$BOARD_HEADER_FILE board.h
157
158 # Flash page size in byte
159 FLASH_PAGE_SIZE=1024
160 # Flash memory size in KiB
161 FLASH_SIZE=128
162 # Memory size in KiB
163 MEMORY_SIZE=20
164
165 # Settings for TARGET
166 case $target in
167 CQ_STARM|STBEE_MINI)
168   if test "$with_dfu" = "default"; then
169     with_dfu=yes;
170   fi  ;;
171 STM32_PRIMER2)
172   FLASH_PAGE_SIZE=2048
173   FLASH_SIZE=512
174   MEMORY_SIZE=64
175   ;;
176 STBEE)
177   FLASH_PAGE_SIZE=2048
178   FLASH_SIZE=512
179   MEMORY_SIZE=64
180   if test "$with_dfu" = "default"; then
181     with_dfu=yes;
182   fi  ;;
183 STM8S_DISCOVERY)
184   FLASH_SIZE=64
185   ;;
186 *)
187   ;;
188 esac
189
190 # --with-dfu option
191 if test "$with_dfu" = "yes"; then
192   if test "$target" = "FST_01" -o "$target" = "FST_01_00"; then
193       echo "FST-01 doesn't have DFU loader, you should not use --with-dfu." >&2
194       exit 1
195   fi
196   echo "Configured for DFU"
197   ORIGIN=0x08003000
198   FLASH_SIZE=`expr $FLASH_SIZE - 12`
199   DFU_DEFINE="#define DFU_SUPPORT 1"
200   HEXOUTPUT_MAKE_OPTION="ENABLE_OUTPUT_HEX=yes"
201 else
202   with_dfu=no
203   echo "Configured for bare system (no-DFU)"
204   ORIGIN=0x08000000
205   DFU_DEFINE="#undef DFU_SUPPORT"
206   HEXOUTPUT_MAKE_OPTION=""
207 fi
208
209 ### !!! Replace following string of "FSIJ" to yours !!! ####
210 SERIALNO="FSIJ-`cat ../VERSION | sed -e 's%^[^/]*/%%'`-"
211
212 SERIALNO_STR_LEN_DEFINE="#define SERIALNO_STR_LEN ${#SERIALNO}"
213
214
215 if test "$sys1_compat" = "yes"; then
216   CONFIG="$target:dfu=$with_dfu"
217 else
218   if test "$with_dfu" = "yes"; then
219     echo "Common binary can't support DFU loader, don't use --with-dfu." >&2
220     exit 1
221   fi
222   # Override settings for common binary.  Safer side.
223   FLASH_PAGE_SIZE=2048
224   FLASH_SIZE=128
225   MEMORY_SIZE=20
226   CONFIG="common"
227 fi
228
229 output_vid_pid_version () {
230   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  */\\${nl}  0x\4, 0x\3, /* idProduct */%p"
231   echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* bcdDevice */%p"
232 }
233
234 output_vendor_product_serial_strings () {
235   prefix=$1
236
237   echo "static const uint8_t ${prefix}string_vendor[] = {"
238   echo "  ${#VENDOR}*2+2,                       /* bLength */"
239   echo "  STRING_DESCRIPTOR,            /* bDescriptorType */"
240   echo "  /* Manufacturer: \"$VENDOR\" */"
241   echo $VENDOR | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
242   echo '};'
243   echo
244   echo "static const uint8_t ${prefix}string_product[] = {"
245   echo "  ${#PRODUCT}*2+2,                      /* bLength */"
246   echo "  STRING_DESCRIPTOR,            /* bDescriptorType */"
247   echo "  /* Product name: \"$PRODUCT\" */"
248   echo $PRODUCT | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
249   echo '};'
250
251   if test -n "$prefix"; then
252   echo
253   echo "static uint8_t ${prefix}string_serial[] = {"
254   echo "  ${#SERIALNO}*2+2+16,                  /* bLength */"
255   echo "  STRING_DESCRIPTOR,            /* bDescriptorType */"
256   echo "  /* Serial number: \"$SERIALNO\" */"
257   echo $SERIALNO | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
258   echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
259   echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
260   echo '};'
261   echo
262   echo "static const uint8_t ${prefix}revision_detail[] = {"
263   echo "  ${#REVISION}*2+2,                     /* bLength */"
264   echo "  STRING_DESCRIPTOR,            /* bDescriptorType */"
265   echo "  /* revision detail: \"$REVISION\" */"
266   echo $REVISION | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
267   echo '};'
268   echo
269   echo "static const uint8_t ${prefix}config_options[] = {"
270   echo "  ${#CONFIG}*2+2,                       /* bLength */"
271   echo "  STRING_DESCRIPTOR,            /* bDescriptorType */"
272   echo "  /* configure options: \"$CONFIG\" */"
273   echo $CONFIG | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
274   echo '};'
275   fi
276 }
277
278 if !(IFS="      "
279   while read VIDPID VERSION PRODUCT VENDOR; do
280     if test "$vidpid" = "$VIDPID"; then
281       output_vid_pid_version > usb-vid-pid-ver.c.inc
282       output_vendor_product_serial_strings neug_ >usb-strings.c.inc
283       exit 0
284     elif test "$with_fraucheky" = "$VIDPID"; then
285       output_vid_pid_version > fraucheky-vid-pid-ver.c.inc
286       output_vendor_product_serial_strings >fraucheky-usb-strings.c.inc
287     fi
288   done; exit 1) < ../NEUG_USB_DEVICE_ID
289 then
290   echo "Please specify valid Vendor ID and Product ID." >&2
291   echo "Check ../NEUG_USB_DEVICE_ID." >&2
292   exit 1
293 fi
294
295 if test "$sys1_compat" = "no"; then
296     # Disable when you are sure that it's sys version 3.0 or later.
297     # Note that Gnuk 1.0 and NeuG (until 0.06) uses sys version 1.0.
298     # Disabling the compatibility, executable will be target independent,
299     # assuming the clock initialization will be done by clock_init in 
300     # SYS.
301     use_sys3="-DUSE_SYS3"
302 else
303     use_sys3=""
304 fi
305
306
307 sed -e "s%@USE_SYS3@%$use_sys3%" \
308     -e "s%@ENABLE_FRAUCHEKY@%$ENABLE_FRAUCHEKY%" \
309     -e "s%@HEXOUTPUT_MAKE_OPTION@%$HEXOUTPUT_MAKE_OPTION%" \
310         < Makefile.in > Makefile
311 sed -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
312     -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
313     -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
314         < neug.ld.in > neug.ld
315 sed -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
316     -e "s/@SERIALNO_STR_LEN_DEFINE@/$SERIALNO_STR_LEN_DEFINE/" \
317     -e "s/@FRAUCHEKY_DEFINE@/$FRAUCHEKY_DEFINE/" \
318     -e "s/@FRAUCHEKY_MSC_DEFINE@/$FRAUCHEKY_MSC_DEFINE/" \
319         < config.h.in > config.h
320 exit 0