Version 1.0.1b
[gnuk/neug.git] / src / configure
index 876c0ed..9fedc80 100755 (executable)
@@ -3,7 +3,8 @@
 #
 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
 #
 #
 # 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.
 #
 #
 # This file is a part of NeuG, a Random Number Generator implementation.
 #
 
 # Default settings
 help=no
 
 # Default settings
 help=no
-target=STBEE_MINI
+target=FST_01
 verbose=no
 verbose=no
+vidpid=none
 with_dfu=default
 debug=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
 
 # Process each option
 for option; do
@@ -41,10 +57,22 @@ for option; do
     target=$optarg ;;
   -v | --verbose)
     verbose=yes ;;
     target=$optarg ;;
   -v | --verbose)
     verbose=yes ;;
+  --vidpid=*)
+    vidpid=$optarg ;;
+  --enable-sys1-compat)
+    sys1_compat = yes ;;
+  --disable-sys1-compat)
+    sys1_compat = no ;;
   --with-dfu)
     with_dfu=yes ;;
   --without-dfu)
     with_dfu=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
   *)
     echo "Unrecognized option \`$option'" >&2
     echo "Try \`$0 --help' for more information." >&2
@@ -61,25 +89,48 @@ Defaults for the options are specified in brackets.
 
 Configuration:
   -h, --help           display this help and exit      [no]
 
 Configuration:
   -h, --help           display this help and exit      [no]
-  --target=TARGET      specify target                  [STBEE_MINI]
+  --vidpid=VID:PID     specify vendor/product ID       [<NONE>]
+  --target=TARGET      specify target                  [FST_01]
                        supported targes are:
                        supported targes are:
+                          FST_01
+                          FST_01_00
+                          STM8S_DISCOVERY
                           OLIMEX_STM32_H103
                           OLIMEX_STM32_H103
-                          STBEE_MINI
-                          CQ_STARM
-                          STBEE
+  --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-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
 
 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
 
   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
+
+TARGET_DEFINE="#define BOARD_$target 1"
+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 KiB
 # Flash page size in byte
 FLASH_PAGE_SIZE=1024
 # Flash memory size in KiB
@@ -124,13 +175,103 @@ else
   DFU_DEFINE="#undef DFU_SUPPORT"
 fi
 
   DFU_DEFINE="#undef DFU_SUPPORT"
 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}"
+
+
+CONFIG="$target:dfu=$with_dfu"
+
+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  */\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"
+}
+
+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 -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 ${prefix}string_product[] = {"
+  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 '};'
+
+  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 -n -e "s/\(........\)/\1\n/gp" | 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 '};'
+  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_
+       echo
+       echo 'static const uint8_t neug_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 neug_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 '};'
+       ) >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.0.
+   # 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%" \
        < 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/" \
        < 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/@FLASH_PAGE_SIZE@/$FLASH_PAGE_SIZE/" \
+    -e "s/@TARGET_DEFINE@/$TARGET_DEFINE/" \
+    -e "s/@SERIALNO_STR_LEN@/$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
        < config.h.in > config.h
 exit 0