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