60e968187b0430c39c3bde325844ea8d944ac768
[gnuk/gnuk.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 Free Software Initiative of Japan
7 #
8 # This file is a part of Gnuk, a GnuPG USB Token implementation.
9 # Gnuk is free software: you can redistribute it and/or modify it
10 # under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # Gnuk is distributed in the hope that it will be useful, but WITHOUT
15 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
17 # License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22 # Default settings
23 help=no
24 target=OLIMEX_STM32_H103
25 verbose=no
26 with_dfu=default
27 with_fixed_serial=no
28 debug=no
29 pinpad=no
30
31 # check /dev/random
32 if test ! -e /dev/random; then
33   echo "/dev/random is required." >&2
34   exit 1
35 fi
36
37 # Process each option
38 for option; do
39   case $option in
40   *=*)  optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
41   *)    optarg=yes ;;
42   esac
43
44   case $option in
45   -h | --help)
46     help=yes ;;
47   --target=*)
48     target=$optarg ;;
49   -v | --verbose)
50     verbose=yes ;;
51   --enable-debug)
52     debug=yes ;;
53   --disable-debug)
54     debug=no ;;
55   --enable-pinpad)
56     pinpad=yes ;;
57   --enable-pinpad=*)
58     pinpad=$optarg ;;
59   --disable-pinpad)
60     pinpad=no ;;
61   --with-dfu)
62     with_dfu=yes ;;
63   --without-dfu)
64     with_dfu=no ;;
65   --with-fixed-serial)
66     with_fixed_serial=yes ;;
67   --without-fixed-serial)
68     with_fixed_serial=no ;;
69   *)
70     echo "Unrecognized option \`$option'" >&2
71     echo "Try \`$0 --help' for more information." >&2
72     exit 1
73     ;;
74   esac
75 done
76
77 if test "$help" = "yes"; then
78   cat <<EOF
79 Usage: $0 [OPTION]...
80
81 Defaults for the options are specified in brackets.
82
83 Configuration:
84   -h, --help            display this help and exit      [no]
85   --target=TARGET       specify target                  [OLIMEX_STM32_H103]
86                         supported targes are:
87                            OLIMEX_STM32_H103
88                            STM32_PRIMER2
89                            CQ_STARM
90                            STBEE_MINI
91   --enable-debug        debug with virtual COM port     [no]
92   --enable-pinpad={cir,dial}
93                         PIN input device support        [no]
94   --with-dfu            build image for DFU             [<target specific>]
95   --with-fixed-serial   Use fixed serial number         [no: chip unique ID]
96 EOF
97   exit 0
98 fi
99
100 BOARD_MAKEFILE=../boards/$target/board.mk
101 if test -f $BOARD_MAKEFILE; then
102   echo "Configured for target: $target"
103 else
104   echo "Unsupported target \`$target'" >&2
105   exit 1
106 fi
107
108 # Flash page size in byte
109 FLASH_PAGE_SIZE=1024
110 # Flash memory size in KB
111 FLASH_SIZE=128
112
113 # Settings for TARGET
114 case $target in
115 CQ_STARM|STBEE_MINI)
116   if test "$with_dfu" = "default"; then
117     with_dfu=yes;
118   fi  ;;
119 STM32_PRIMER2)
120   FLASH_PAGE_SIZE=2048
121   ;;
122 STM8S_DISCOVERY)
123   FLASH_SIZE=64
124   ;;
125 *)
126   ;;
127 esac
128
129 # --with-fixed-serial option
130 if test "$with_fixed_serial" = "no"; then
131   echo "Using chip unique ID for card AID"
132   SERIAL_DEFINE="#undef SERIAL_NUMBER_IN_AID"
133 else
134   echo "Using fixed serial number (at compile time) for card AID"
135   if test "x$MAIL" = "x"; then
136     echo "ERROR: Please set MAIL shell variable to select FSIJ serial number" >&2
137     exit 1
138   fi
139   SERIAL=`sed -n -e "/^$MAIL/s/^.* \(..\):\(..\):\(..\):\(..\)/0x\1, 0x\2, 0x\3, 0x\4/p" ../FSIJ_SERIAL_NUMBER`
140   SERIAL_DEFINE="#define SERIAL_NUMBER_IN_AID $SERIAL"
141 fi
142
143 # --enable-debug option
144 if test "$debug" = "yes"; then
145   DEBUG_MAKE_OPTION="ENABLE_DEBUG=1"
146   DEBUG_DEFINE="#define DEBUG 1"
147   echo "Debug option enabled"
148 else
149   DEBUG_MAKE_OPTION="# ENABLE_DEBUG=1"
150   DEBUG_DEFINE="#undef DEBUG"
151   echo "Debug option disabled"
152 fi
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 # --enable-pinpad option
167 if test "$pinpad" = "no"; then
168   PINPAD_MAKE_OPTION="# ENABLE_PINPAD="
169   PINPAD_DEFINE="#undef PINPAD_SUPPORT"
170   PINPAD_MORE_DEFINE=""
171   echo "PIN pad option disabled"
172 elif test "$pinpad" = "yes"; then
173   PINPAD_MAKE_OPTION="ENABLE_PINPAD=cir"
174   PINPAD_DEFINE="#define PINPAD_SUPPORT 1"
175   PINPAD_MORE_DEFINE="#define PINPAD_CIR_SUPPORT 1"
176   echo "PIN pad option enabled (cir)"
177 else
178   PINPAD_MAKE_OPTION="ENABLE_PINPAD=$pinpad"
179   PINPAD_DEFINE="#define PINPAD_SUPPORT 1"
180   PINPAD_MORE_DEFINE="#define PINPAD_${pinpad^^[a-z]}_SUPPORT 1"
181   echo "PIN pad option enabled ($pinpad)"
182 fi
183
184 sed -e "s%@BOARD_MAKEFILE@%$BOARD_MAKEFILE%" \
185     -e "s%@DEBUG_MAKE_OPTION@%$DEBUG_MAKE_OPTION%" \
186     -e "s%@PINPAD_MAKE_OPTION@%$PINPAD_MAKE_OPTION%" \
187         < Makefile.in > Makefile
188 sed -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
189     -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
190         < gnuk.ld.in > gnuk.ld
191 sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \
192     -e "s/@PINPAD_DEFINE@/$PINPAD_DEFINE/" \
193     -e "s/@PINPAD_MORE_DEFINE@/$PINPAD_MORE_DEFINE/" \
194     -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
195     -e "s/@SERIAL_DEFINE@/$SERIAL_DEFINE/" \
196         < config.h.in > config.h
197 exit 0