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