#! /bin/bash # # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka # # Copyright (C) 2010, 2011, 2012 Free Software Initiative of Japan # # This file is a part of Gnuk, a GnuPG USB Token implementation. # Gnuk is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gnuk is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public # License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Default settings help=no vidpid=none target=OLIMEX_STM32_H103 verbose=no with_dfu=default debug=no pinpad=no certdo=no keygen=no # Process each option for option; do case $option in *=*) optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;; *) optarg=yes ;; esac case $option in -h | --help) help=yes ;; -v | --verbose) verbose=yes ;; --vidpid=*) vidpid=$optarg ;; --target=*) target=$optarg ;; --enable-debug) debug=yes ;; --disable-debug) debug=no ;; --enable-pinpad=*) pinpad=$optarg ;; --disable-pinpad) pinpad=no ;; --enable-certdo) certdo=yes ;; --disable-certdo) certdo=no ;; --enable-keygen) keygen=yes ;; --disable-keygen) keygen=no ;; --with-dfu) with_dfu=yes ;; --without-dfu) with_dfu=no ;; *) echo "Unrecognized option \`$option'" >&2 echo "Try \`$0 --help' for more information." >&2 exit 1 ;; esac done if test "$help" = "yes"; then cat <] --target=TARGET specify target [OLIMEX_STM32_H103] supported targes are: OLIMEX_STM32_H103 STM32_PRIMER2 CQ_STARM STBEE_MINI STM8S_DISCOVERY STBEE FST_01 --enable-debug debug with virtual COM port [no] --enable-pinpad={cir,dial} PIN entry support [no] --enable-certdo support CERT.3 data object [no] --enable-keygen support key generation [no] --with-dfu build image for DFU [] EOF exit 0 fi if test "$vidpid" = "none"; then echo "Please specify Vendor ID and Product ID by --vidpid option." exit 1 fi BOARD_DIR=../boards/$target if test -d $BOARD_DIR; then echo "Configured for target: $target" else echo "Unsupported target \`$target'" >&2 exit 1 fi # Flash page size in byte FLASH_PAGE_SIZE=1024 # Flash memory size in KB FLASH_SIZE=128 # Memory size in KiB MEMORY_SIZE=20 # Settings for TARGET case $target in CQ_STARM|STBEE_MINI) if test "$with_dfu" = "default"; then with_dfu=yes; fi ;; STM32_PRIMER2) FLASH_PAGE_SIZE=2048 FLASH_SIZE=512 MEMORY_SIZE=64 ;; STBEE) FLASH_PAGE_SIZE=2048 FLASH_SIZE=512 MEMORY_SIZE=64 if test "$with_dfu" = "default"; then with_dfu=yes; fi ;; STM8S_DISCOVERY) FLASH_SIZE=64 ;; *) ;; esac # --enable-debug option if test "$debug" = "yes"; then DEBUG_MAKE_OPTION="ENABLE_DEBUG=1" DEBUG_DEFINE="#define DEBUG 1" echo "Debug option enabled" else DEBUG_MAKE_OPTION="# ENABLE_DEBUG=1" DEBUG_DEFINE="#undef DEBUG" echo "Debug option disabled" fi # --with-dfu option if test "$with_dfu" = "yes"; then echo "Configured for DFU" ORIGIN=0x08003000 FLASH_SIZE=`expr $FLASH_SIZE - 12` DFU_DEFINE="#define DFU_SUPPORT 1" else with_dfu=no echo "Configured for bare system (no-DFU)" ORIGIN=0x08000000 DFU_DEFINE="#undef DFU_SUPPORT" fi # --enable-pinpad option if test "$pinpad" = "no"; then PINPAD_MAKE_OPTION="# ENABLE_PINPAD=" PINPAD_DEFINE="#undef PINPAD_SUPPORT" PINPAD_MORE_DEFINE="" echo "PIN pad option disabled" else PINPAD_MAKE_OPTION="ENABLE_PINPAD=$pinpad" PINPAD_DEFINE="#define PINPAD_SUPPORT 1" PINPAD_MORE_DEFINE="#define PINPAD_${pinpad^^[a-z]}_SUPPORT 1" echo "PIN pad option enabled ($pinpad)" fi # --enable-certdo option if test "$certdo" = "yes"; then CERTDO_DEFINE="#define CERTDO_SUPPORT 1" echo "CERT.3 Data Object is supported" else CERTDO_DEFINE="#undef CERTDO_SUPPORT" echo "CERT.3 Data Object is NOT supported" fi # --enable-keygen option if test "$keygen" = "yes"; then KEYGEN_SUPPORT="-DKEYGEN_SUPPORT" echo "Key generation on device is supported" else KEYGEN_SUPPORT="" echo "Key generation on device is NOT supported" fi REVISION=`git describe --dirty="-modified"` CONFIG="$target:dfu=$with_dfu:debug=$debug:pinpad=$pinpad:certdo=$certdo:keygen=$keygen" if !(IFS=" " while read VIDPID VERSION PRODUCT VENDOR; do if test "$vidpid" = "$VIDPID"; then (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" echo $VERSION | sed -n -e "s%^\([0-9a-f][0-9a-f]\)\([0-9a-f][0-9a-f]\)$% 0x\2, 0x\1, /* bcdDevice */%p" ) > usb-vid-pid-ver.c.inc (echo 'static const uint8_t gnukStringVendor[] = {' echo " ${#VENDOR}*2+2, /* bLength */" echo " USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */" echo " /* Manufacturer: \"$VENDOR\" */" echo $VENDOR | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/ /" -e "s/ $//p" echo '};' echo echo 'static const uint8_t gnukStringProduct[] = {' echo " ${#PRODUCT}*2+2, /* bLength */" echo " USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */" echo " /* Product name: \"$PRODUCT\" */" echo $PRODUCT | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/ /" -e "s/ $//p" echo '};' echo echo '#ifdef USB_STRINGS_FOR_GNUK' echo 'static const uint8_t gnuk_revision_detail[] = {' echo " ${#REVISION}*2+2, /* bLength */" echo " USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */" echo " /* revision detail: \"$REVISION\" */" echo $REVISION | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/ /" -e "s/ $//p" echo '};' echo echo 'static const uint8_t gnuk_config_options[] = {' echo " ${#CONFIG}*2+2, /* bLength */" echo " USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */" echo " /* configure options: \"$CONFIG\" */" echo $CONFIG | sed -n -e "s/\(........\)/\1\n/gp" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/ /" -e "s/ $//p" echo '};' echo '#endif' ) >usb-strings.c.inc exit 0 fi done; exit 1) < ../GNUK_USB_DEVICE_ID then echo "Please specify valid Vendor ID and Product ID." echo "Check ../GNUK_USB_DEVICE_ID." exit 1 fi sed -e "s%@BOARD_DIR@%$BOARD_DIR%" \ -e "s%@DEBUG_MAKE_OPTION@%$DEBUG_MAKE_OPTION%" \ -e "s%@PINPAD_MAKE_OPTION@%$PINPAD_MAKE_OPTION%" \ -e "s%@KEYGEN_SUPPORT@%$KEYGEN_SUPPORT%" \ < Makefile.in > Makefile if test "$certdo" = "yes"; then sed -e "/^@CERTDO_SUPPORT_START@$/ d" -e "/^@CERTDO_SUPPORT_END@$/ d" \ -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \ -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \ -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \ < gnuk.ld.in > gnuk.ld else sed -e "/^@CERTDO_SUPPORT_START@$/,/^@CERTDO_SUPPORT_END@$/ d" \ -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \ -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \ -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \ < gnuk.ld.in > gnuk.ld fi sed -e "s/@DEBUG_DEFINE@/$DEBUG_DEFINE/" \ -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \ -e "s/@PINPAD_DEFINE@/$PINPAD_DEFINE/" \ -e "s/@PINPAD_MORE_DEFINE@/$PINPAD_MORE_DEFINE/" \ -e "s/@CERTDO_DEFINE@/$CERTDO_DEFINE/" \ -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \ < config.h.in > config.h exit 0