generate config.mk.
[gnuk/neug.git] / src / configure
index cac7291..ddaae35 100755 (executable)
@@ -6,7 +6,7 @@ nl=$'\n'
 #
 # This file is *NOT* generated by GNU Autoconf, but written by NIIBE Yutaka
 #
-# Copyright (C) 2010, 2011, 2012, 2013, 2015
+# Copyright (C) 2010, 2011, 2012, 2013, 2015, 2016, 2017
 #               Free Software Initiative of Japan
 #
 # This file is a part of NeuG, a Random Number Generator implementation.
@@ -24,6 +24,15 @@ nl=$'\n'
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+#
+# Submodule check
+#
+if ! test -f ../chopstx/rules.mk; then
+  echo "Submodule 'chopstx' not found" >&2
+  echo "You might need: git submodule update --init" >&2
+  exit 1
+fi
+
 # Default settings
 help=no
 vidpid=none
@@ -36,20 +45,28 @@ 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"`
+if test -e ../.git; then
+  if type git >/dev/null 2>&1; then
+     REVISION=$(git describe --dirty="-modified")
+     REVISION_CHOPSTX=$(cd ../chopstx && git describe --dirty="-modified")
+     REVISION_FRAUCHEKY=$(cd ../fraucheky && git describe --dirty="-modified")
+  else
+     # echo 'No git available, please install git'
+     GIT_REVISION=$(sed -e 's/^\(.......\).*$/g\1/' "../.git/$(sed -e 's/^ref: //' ../.git/HEAD)")
+     REVISION=$(cat ../VERSION)-$GIT_REVISION
+     REVISION_CHOPSTX=$(cat ../chopstx/VERSION)-$(sed -e 's/^\(.......\).*$/g\1/' ../.git/modules/chopstx/HEAD)
+     REVISION_FRAUCHEKY=$(cat ../fraucheky/VERSION)-$(sed -e 's/^\(.......\).*$/g\1/' ../.git/modules/fraucheky/HEAD)
+  fi
 else
-  REVISION=`cat ../VERSION`
-  REVISION_CHOPSTX=`cat ../chopstx/VERSION`
-  REVISION_FRAUCHEKY=`cat ../fraucheky/VERSION`
+  REVISION=$(cat ../VERSION)
+  REVISION_CHOPSTX=$(cat ../chopstx/VERSION)
+  REVISION_FRAUCHEKY=$(cat ../fraucheky/VERSION)
 fi
 
 # Process each option
 for option; do
   case $option in
-  *=*) optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
+  *=*) optarg=$(expr "X$option" : '[^=]*=\(.*\)') ;;
   *)   optarg=yes ;;
   esac
 
@@ -102,15 +119,16 @@ Configuration:
                           STBEE
                           STBEE_MINI
                           MAPLE_MINI
-                          CQ_STARM
                           ST_DONGLE
                           ST_NUCLEO_F103
+                          NITROKEY_START
+                          CQ_STARM
                           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
+                          but requires SYS 3.0 or newer
   --with-dfu           build image for DFU             [<target specific>]
 
   --with-fraucheky=VID:PID
@@ -121,22 +139,27 @@ EOF
 fi
 
 if test "$vidpid" = "none"; then
-  echo "Please specify Vendor ID and Product ID by --vidpid option." 
+  echo "Please specify Vendor ID and Product ID by --vidpid option." >&2
   exit 1
 fi
 
 if ! test "$with_fraucheky" = "no"; then
   ../fraucheky/configure $with_fraucheky $with_index $REVISION $REVISION_CHOPSTX $REVISION_FRAUCHEKY
-  ENABLE_FRAUCHEKY=""
+  enable_fraucheky=yes
   FRAUCHEKY_DEFINE="#define FRAUCHEKY_SUPPORT 1"
   FRAUCHEKY_MSC_DEFINE="#define MSC_INTERFACE_NO    2"
 else
-  ENABLE_FRAUCHEKY="# "
+  enable_fraucheky=""
   FRAUCHEKY_DEFINE="#undef FRAUCHEKY_SUPPORT"
   FRAUCHEKY_MSC_DEFINE="#undef MSC_INTERFACE_NO"
+  if ! test -f ../fraucheky/build.mk; then
+    echo "Submodule 'fraucheky' not found" >&2
+    echo "You might need: git submodule update --init" >&2
+    exit 1
+  fi
 fi
 
-BOARD_HEADER_FILE=board-`echo $target | tr '_[:upper:]' '-[:lower:]'`.h
+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
 
@@ -172,27 +195,47 @@ STM8S_DISCOVERY)
   ;;
 esac
 
+if test "$target" = "GNU_LINUX"; then
+  ldscript=""
+  chip="gnu-linux"
+  use_sys="yes"
+  emulation="yes"
+  cross=""
+  mcu="none"
+  def_emulation="-DGNU_LINUX_EMULATION"
+  enable_hexoutput=""
+  libs="-lpthread"
+else
+  ldscript="neug.ld"
+  chip="stm32f103"
+  use_sys="yes"
+  emulation=""
+  cross="arm-none-eabi-"
+  mcu="cortex-m3"
+  def_emulation=""
+  enable_hexoutput=yes
+  libs=""
+fi
+
 # --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."
+      echo "FST-01 doesn't have DFU loader, you should not use --with-dfu." >&2
       exit 1
   fi
   echo "Configured for DFU"
   ORIGIN=0x08003000
-  FLASH_SIZE=`expr $FLASH_SIZE - 12`
+  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
 
 ### !!! Replace following string of "FSIJ" to yours !!! ####
-SERIALNO="FSIJ-`cat ../VERSION | sed -e 's%^[^/]*/%%'`-"
+SERIALNO="FSIJ-$(cat ../VERSION | sed -e 's%^[^/]*/%%')-"
 
 SERIALNO_STR_LEN_DEFINE="#define SERIALNO_STR_LEN ${#SERIALNO}"
 
@@ -201,7 +244,7 @@ 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."
+    echo "Common binary can't support DFU loader, don't use --with-dfu." >&2
     exit 1
   fi
   # Override settings for common binary.  Safer side.
@@ -221,14 +264,14 @@ output_vendor_product_serial_strings () {
 
   echo "static const uint8_t ${prefix}string_vendor[] = {"
   echo "  ${#VENDOR}*2+2,                      /* bLength */"
-  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  STRING_DESCRIPTOR,           /* 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 "  STRING_DESCRIPTOR,           /* 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 '};'
@@ -237,7 +280,7 @@ output_vendor_product_serial_strings () {
   echo
   echo "static uint8_t ${prefix}string_serial[] = {"
   echo "  ${#SERIALNO}*2+2+16,                 /* bLength */"
-  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  STRING_DESCRIPTOR,           /* 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,"
@@ -246,14 +289,14 @@ output_vendor_product_serial_strings () {
   echo
   echo "static const uint8_t ${prefix}revision_detail[] = {"
   echo "  ${#REVISION}*2+2,                    /* bLength */"
-  echo "  USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType */"
+  echo "  STRING_DESCRIPTOR,           /* 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 "  STRING_DESCRIPTOR,           /* 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 '};'
@@ -272,26 +315,34 @@ if !(IFS="        "
     fi
   done; exit 1) < ../NEUG_USB_DEVICE_ID
 then
-  echo "Please specify valid Vendor ID and Product ID." 
-  echo "Check ../NEUG_USB_DEVICE_ID."
+  echo "Please specify valid Vendor ID and Product ID." >&2
+  echo "Check ../NEUG_USB_DEVICE_ID." >&2
   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"
+    # Disable when you are sure that it's sys version 3.0 or later.
+    # 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 clock_init in 
+    # SYS.
+    use_sys3="-DUSE_SYS3"
 else
-   have_sys_h=""
+    use_sys3=""
 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
+(echo "CHIP=$chip";
+ echo "USE_SYS=$use_sys";
+ echo "EMULATION=$emulation";
+ echo "CROSS=$cross";
+ echo "MCU=$mcu";
+ echo "DEFS=$use_sys3 $flash_override $def_emulation";
+ echo "LDSCRIPT=$ldscript";
+ echo "LIBS=$libs";
+ echo "ENABLE_FRAUCHEKY=$enable_fraucheky";
+ echo "ENABLE_OUTPUT_HEX=$enable_hexoutput"
+)      > config.mk
 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/" \