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