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