Update chopstx and fraucheky
[gnuk/neug.git] / src / configure
index 75f5d2f..cac7291 100755 (executable)
@@ -1,9 +1,13 @@
 #! /bin/bash
 
+# This is bash which supports ANSI-C Quoting
+nl=$'\n'
+
 #
 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
 #
-# Copyright (C) 2010, 2011 Free Software Initiative of Japan
+# Copyright (C) 2010, 2011, 2012, 2013, 2015
+#               Free Software Initiative of Japan
 #
 # This file is a part of NeuG, a Random Number Generator implementation.
 #
 
 # Default settings
 help=no
-target=STBEE_MINI
+vidpid=none
+target=FST_01
 verbose=no
 with_dfu=default
 debug=no
+sys1_compat=yes
+with_fraucheky=no
+with_index=none
+
+# Revision numbers
+if test -d ../.git; then
+  REVISION=`git describe --dirty="-modified"`
+  REVISION_CHOPSTX=`cd ../chopstx && git describe --dirty="-modified"`
+  REVISION_FRAUCHEKY=`cd ../fraucheky &&git describe --dirty="-modified"`
+else
+  REVISION=`cat ../VERSION`
+  REVISION_CHOPSTX=`cat ../chopstx/VERSION`
+  REVISION_FRAUCHEKY=`cat ../fraucheky/VERSION`
+fi
 
 # Process each option
 for option; do
@@ -37,14 +56,26 @@ for option; do
   case $option in
   -h | --help)
     help=yes ;;
-  --target=*)
-    target=$optarg ;;
   -v | --verbose)
     verbose=yes ;;
+  --vidpid=*)
+    vidpid=$optarg ;;
+  --target=*)
+    target=$optarg ;;
+  --enable-sys1-compat)
+    sys1_compat=yes ;;
+  --disable-sys1-compat)
+    sys1_compat=no ;;
   --with-dfu)
     with_dfu=yes ;;
   --without-dfu)
     with_dfu=no ;;
+  --with-fraucheky=*)
+    with_fraucheky=$optarg ;;
+  --without-fraucheky)
+    with_fraucheky=no ;;
+  --with-index=*)
+    with_index=$optarg ;;
   *)
     echo "Unrecognized option \`$option'" >&2
     echo "Try \`$0 --help' for more information." >&2
@@ -61,28 +92,60 @@ Defaults for the options are specified in brackets.
 
 Configuration:
   -h, --help           display this help and exit      [no]
-  --target=TARGET      specify target                  [STBEE_MINI]
-                       supported targes are:
+  --vidpid=VID:PID     specify vendor/product ID       [<NONE>]
+  --target=TARGET      specify target                  [FST_01]
+                       supported targets are:
+                          FST_01
+                          STM8S_DISCOVERY
                           OLIMEX_STM32_H103
+                          STM32_PRIMER2
+                          STBEE
                           STBEE_MINI
+                          MAPLE_MINI
                           CQ_STARM
+                          ST_DONGLE
+                          ST_NUCLEO_F103
+                          FST_01_00 (unreleased version with 8MHz XTAL)
+  --enable-sys1-compat enable SYS 1.0 compatibility    [yes]
+                          executable is target dependent
+  --disable-sys1-compat        disable SYS 1.0 compatibility   [no]
+                          executable is target independent
+                          but requires SYS 2.0 or newer
   --with-dfu           build image for DFU             [<target specific>]
+
+  --with-fraucheky=VID:PID
+                       include fraucheky support       [no]
+  --with-index=INDEX   specify INDEX file              [none]
 EOF
   exit 0
 fi
 
-BOARD_DIR=../boards/$target
-if test -d $BOARD_DIR; then
-  echo "Configured for target: $target"
-else
-  echo "Unsupported target \`$target'" >&2
+if test "$vidpid" = "none"; then
+  echo "Please specify Vendor ID and Product ID by --vidpid option." 
   exit 1
 fi
 
+if ! test "$with_fraucheky" = "no"; then
+  ../fraucheky/configure $with_fraucheky $with_index $REVISION $REVISION_CHOPSTX $REVISION_FRAUCHEKY
+  ENABLE_FRAUCHEKY=""
+  FRAUCHEKY_DEFINE="#define FRAUCHEKY_SUPPORT 1"
+  FRAUCHEKY_MSC_DEFINE="#define MSC_INTERFACE_NO    2"
+else
+  ENABLE_FRAUCHEKY="# "
+  FRAUCHEKY_DEFINE="#undef FRAUCHEKY_SUPPORT"
+  FRAUCHEKY_MSC_DEFINE="#undef MSC_INTERFACE_NO"
+fi
+
+BOARD_HEADER_FILE=board-`echo $target | tr '_[:upper:]' '-[:lower:]'`.h
+echo Header file is: $BOARD_HEADER_FILE
+ln -sf ../chopstx/board/$BOARD_HEADER_FILE board.h
+
 # Flash page size in byte
 FLASH_PAGE_SIZE=1024
-# Flash memory size in KB
+# Flash memory size in KiB
 FLASH_SIZE=128
+# Memory size in KiB
+MEMORY_SIZE=20
 
 # Settings for TARGET
 case $target in
@@ -93,10 +156,12 @@ CQ_STARM|STBEE_MINI)
 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  ;;
@@ -109,21 +174,131 @@ esac
 
 # --with-dfu option
 if test "$with_dfu" = "yes"; then
+  if test "$target" = "FST_01" -o "$target" = "FST_01_00"; then
+      echo "FST-01 doesn't have DFU loader, you should not use --with-dfu."
+      exit 1
+  fi
   echo "Configured for DFU"
   ORIGIN=0x08003000
   FLASH_SIZE=`expr $FLASH_SIZE - 12`
   DFU_DEFINE="#define DFU_SUPPORT 1"
+  HEXOUTPUT_MAKE_OPTION="ENABLE_OUTPUT_HEX=yes"
 else
+  with_dfu=no
   echo "Configured for bare system (no-DFU)"
   ORIGIN=0x08000000
   DFU_DEFINE="#undef DFU_SUPPORT"
+  HEXOUTPUT_MAKE_OPTION=""
 fi
 
-sed -e "s%@BOARD_DIR@%$BOARD_DIR%" \
+### !!! Replace following string of "FSIJ" to yours !!! ####
+SERIALNO="FSIJ-`cat ../VERSION | sed -e 's%^[^/]*/%%'`-"
+
+SERIALNO_STR_LEN_DEFINE="#define SERIALNO_STR_LEN ${#SERIALNO}"
+
+
+if test "$sys1_compat" = "yes"; then
+  CONFIG="$target:dfu=$with_dfu"
+else
+  if test "$with_dfu" = "yes"; then
+    echo "Common binary can't support DFU loader, don't use --with-dfu."
+    exit 1
+  fi
+  # Override settings for common binary.  Safer side.
+  FLASH_PAGE_SIZE=2048
+  FLASH_SIZE=128
+  MEMORY_SIZE=20
+  CONFIG="common"
+fi
+
+output_vid_pid_version () {
+  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  */\\${nl}  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"
+}
+
+output_vendor_product_serial_strings () {
+  prefix=$1
+
+  echo "static const uint8_t ${prefix}string_vendor[] = {"
+  echo "  ${#VENDOR}*2+2,                      /* bLength */"
+  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  /* Manufacturer: \"$VENDOR\" */"
+  echo $VENDOR | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
+  echo '};'
+  echo
+  echo "static const uint8_t ${prefix}string_product[] = {"
+  echo "  ${#PRODUCT}*2+2,                     /* bLength */"
+  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  /* Product name: \"$PRODUCT\" */"
+  echo $PRODUCT | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
+  echo '};'
+
+  if test -n "$prefix"; then
+  echo
+  echo "static uint8_t ${prefix}string_serial[] = {"
+  echo "  ${#SERIALNO}*2+2+16,                 /* bLength */"
+  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  /* Serial number: \"$SERIALNO\" */"
+  echo $SERIALNO | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
+  echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
+  echo "  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,"
+  echo '};'
+  echo
+  echo "static const uint8_t ${prefix}revision_detail[] = {"
+  echo "  ${#REVISION}*2+2,                    /* bLength */"
+  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  /* revision detail: \"$REVISION\" */"
+  echo $REVISION | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
+  echo '};'
+  echo
+  echo "static const uint8_t ${prefix}config_options[] = {"
+  echo "  ${#CONFIG}*2+2,                      /* bLength */"
+  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  /* configure options: \"$CONFIG\" */"
+  echo $CONFIG | sed -e "s/\(........\)/\1\\${nl}/g" | sed -n -e "s/\(.\)/'\1', 0, /g" -e "s/^/  /" -e "/^  ./s/ $//p"
+  echo '};'
+  fi
+}
+
+if !(IFS="     "
+  while read VIDPID VERSION PRODUCT VENDOR; do
+    if test "$vidpid" = "$VIDPID"; then
+      output_vid_pid_version > usb-vid-pid-ver.c.inc
+      output_vendor_product_serial_strings neug_ >usb-strings.c.inc
+      exit 0
+    elif test "$with_fraucheky" = "$VIDPID"; then
+      output_vid_pid_version > fraucheky-vid-pid-ver.c.inc
+      output_vendor_product_serial_strings >fraucheky-usb-strings.c.inc
+    fi
+  done; exit 1) < ../NEUG_USB_DEVICE_ID
+then
+  echo "Please specify valid Vendor ID and Product ID." 
+  echo "Check ../NEUG_USB_DEVICE_ID."
+  exit 1
+fi
+
+if test "$sys1_compat" = "no"; then
+   # Disable when you are sure that it's sys version 2.1.
+   # Note that Gnuk 1.0 and NeuG (until 0.06) uses sys version 1.0.
+   # Disabling the compatibility, executable will be target independent,
+   # assuming the clock initialization will be done by SYS (before entry).
+   have_sys_h="-DHAVE_SYS_H"
+else
+   have_sys_h=""
+fi
+
+
+sed -e "s%@HAVE_SYS_H@%$have_sys_h%" \
+    -e "s%@ENABLE_FRAUCHEKY@%$ENABLE_FRAUCHEKY%" \
+    -e "s%@HEXOUTPUT_MAKE_OPTION@%$HEXOUTPUT_MAKE_OPTION%" \
        < Makefile.in > Makefile
 sed -e "s/@ORIGIN@/$ORIGIN/" -e "s/@FLASH_SIZE@/$FLASH_SIZE/" \
+    -e "s/@MEMORY_SIZE@/$MEMORY_SIZE/" \
     -e "s/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
        < neug.ld.in > neug.ld
 sed -e "s/@DFU_DEFINE@/$DFU_DEFINE/" \
+    -e "s/@SERIALNO_STR_LEN_DEFINE@/$SERIALNO_STR_LEN_DEFINE/" \
+    -e "s/@FRAUCHEKY_DEFINE@/$FRAUCHEKY_DEFINE/" \
+    -e "s/@FRAUCHEKY_MSC_DEFINE@/$FRAUCHEKY_MSC_DEFINE/" \
        < config.h.in > config.h
 exit 0