configure change
[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 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
31 # Process each option
32 for option; do
33   case $option in
34   *=*)  optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
35   *)    optarg=yes ;;
36   esac
37
38   case $option in
39   -h | --help)
40     help=yes ;;
41   --target=*)
42     target=$optarg ;;
43   -v | --verbose)
44     verbose=yes ;;
45   --vidpid=*)
46     vidpid=$optarg ;;
47   --with-dfu)
48     with_dfu=yes ;;
49   --without-dfu)
50     with_dfu=no ;;
51   *)
52     echo "Unrecognized option \`$option'" >&2
53     echo "Try \`$0 --help' for more information." >&2
54     exit 1
55     ;;
56   esac
57 done
58
59 if test "$help" = "yes"; then
60   cat <<EOF
61 Usage: $0 [OPTION]...
62
63 Defaults for the options are specified in brackets.
64
65 Configuration:
66   -h, --help            display this help and exit      [no]
67   --vidpid=VID:PID      specify vendor/product ID       [<NONE>]
68   --target=TARGET       specify target                  [FST_01]
69                         supported targes are:
70                            FST_01
71                            FST_01_00
72                            STM8S_DISCOVERY
73                            OLIMEX_STM32_H103
74   --with-dfu            build image for DFU             [<target specific>]
75 EOF
76   exit 0
77 fi
78
79 if test "$vidpid" = "none"; then
80   echo "Please specify Vendor ID and Product ID by --vidpid option." 
81   exit 1
82 fi
83
84 TARGET_DEFINE="#define BOARD_$target 1"
85 BOARD_HEADER_FILE=board-`echo $target | tr '_[:upper:]' '-[:lower:]'`.h
86 echo Header file is: $BOARD_HEADER_FILE
87 ln -sf ../chopstx/board/$BOARD_HEADER_FILE board.h
88
89 # Flash page size in byte
90 FLASH_PAGE_SIZE=1024
91 # Flash memory size in KiB
92 FLASH_SIZE=128
93 # Memory size in KiB
94 MEMORY_SIZE=20
95
96 # Settings for TARGET
97 case $target in
98 CQ_STARM|STBEE_MINI)
99   if test "$with_dfu" = "default"; then
100     with_dfu=yes;
101   fi  ;;
102 STM32_PRIMER2)
103   FLASH_PAGE_SIZE=2048
104   FLASH_SIZE=512
105   MEMORY_SIZE=64
106   ;;
107 STBEE)
108   FLASH_PAGE_SIZE=2048
109   FLASH_SIZE=512
110   MEMORY_SIZE=64
111   if test "$with_dfu" = "default"; then
112     with_dfu=yes;
113   fi  ;;
114 STM8S_DISCOVERY)
115   FLASH_SIZE=64
116   ;;
117 *)
118   ;;
119 esac
120
121 # --with-dfu option
122 if test "$with_dfu" = "yes"; then
123   echo "Configured for DFU"
124   ORIGIN=0x08003000
125   FLASH_SIZE=`expr $FLASH_SIZE - 12`
126   DFU_DEFINE="#define DFU_SUPPORT 1"
127 else
128   echo "Configured for bare system (no-DFU)"
129   ORIGIN=0x08000000
130   DFU_DEFINE="#undef DFU_SUPPORT"
131 fi
132
133 REVISION=`git describe --dirty="-modified"` 
134 CONFIG="$target:dfu=$with_dfu"
135
136 if !(IFS="      "
137   while read VIDPID VERSION PRODUCT VENDOR; do
138     if test "$vidpid" = "$VIDPID"; then
139       (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"
140        echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$%  0x\2, 0x\1, /* bcdDevice  */%p"
141       ) > usb-vid-pid-ver.c.inc
142       (echo 'static const uint8_t neug_string_vendor[] = {'
143        echo "  ${#VENDOR}*2+2,                  /* bLength */"
144        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
145        echo "  /* Manufacturer: \"$VENDOR\" */"
146        echo $VENDOR | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
147        echo '};'
148        echo
149        echo 'static const uint8_t neug_string_product[] = {'
150        echo "  ${#PRODUCT}*2+2,                 /* bLength */"
151        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
152        echo "  /* Product name: \"$PRODUCT\" */"
153        echo $PRODUCT | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
154        echo '};'
155        echo
156        echo '#ifdef USB_STRINGS_FOR_NEUG'
157        echo 'static const uint8_t neug_revision_detail[] = {'
158        echo "  ${#REVISION}*2+2,                        /* bLength */"
159        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
160        echo "  /* revision detail: \"$REVISION\" */"
161        echo $REVISION | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
162        echo '};'
163        echo
164        echo 'static const uint8_t neug_config_options[] = {'
165        echo "  ${#CONFIG}*2+2,                  /* bLength */"
166        echo "  USB_STRING_DESCRIPTOR_TYPE,      /* bDescriptorType */"
167        echo "  /* configure options: \"$CONFIG\" */"
168        echo $CONFIG | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "s/ $//p"
169        echo '};'
170        echo '#endif'
171        ) >usb-strings.c.inc
172       exit 0
173     fi
174   done; exit 1) < ../NEUG_USB_DEVICE_ID
175 then
176   echo "Please specify valid Vendor ID and Product ID." 
177   echo "Check ../NEUG_USB_DEVICE_ID."
178   exit 1
179 fi
180
181 # Enable when you are sure that it's sys version 2.0.
182 # Note that Gnuk 1.0 and Neug (until 0.06) uses sys version 1.0.
183 # have_sys_h="-DHAVE_SYS_H"
184 have_sys_h="" 
185
186 sed -e "s%@HAVE_SYS_H@%$have_sys_h%" \
187         < Makefile.in > Makefile
188 sed -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
189     -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
190     -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
191         < neug.ld.in > neug.ld
192 sed -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
193     -e "s/@TARGET_DEFINE@/$TARGET_DEFINE/" \
194         < config.h.in > config.h
195 exit 0