Browse Source

fix the windows omake.bat (maybe?)
get our own copy of https://github.com/WestfW/Arduino-avr-tools-install
and used that to set up the tool paths. You still need to make "make"
installed in the path (or in the arduino tools bin directory.)

WestfW 6 years ago
parent
commit
bd451cfa0e

+ 241 - 0
optiboot/bootloaders/optiboot/install-avr-tools.bat

@@ -0,0 +1,241 @@
+@echo off
+REM install-avr-tools.bat by Bill Westfield (WestfW)
+REM  Find the avr-gcc tools that are part of an Arduino install, and
+REM  add them to the PATH for the duration of the current shell.
+REM  See https://hackaday.io/project/19935
+REM  https://github.com/WestfW/Arduino-avr-tools-install
+@echo.
+SET DEBUG=REM
+REM For debugging, do:
+REM    SET DEBUG=@echo
+
+call :clearerrors
+%DEBUG% checking args.  errorlevel=%ERRORLEVEL%
+set TMPFILE=%1
+if "%1" EQU "" (
+  REM If we're called without an arg, we're probably going to need to
+  REM explicitly reinvoke cmd.exe, which will prevent us from being able
+  REM to change the current path.  So use a secondary tmp .bat file
+  call :gettemp
+)
+
+REM See if we're already in Delayed Evaluation mode.
+%DEBUG% checking cmd mode
+call :clearerrors
+if "!x!" EQU "%x%" GOTO findArduino
+
+REM We have to run in /V mode to get late evaluation of variables inside loops
+%DEBUG% re-running in delayed eval mode
+cmd.exe /V /C "%0" %TMPFILE%
+%DEBUG% recursion finished.  Errorlevel %ERRORLEVEL%
+
+REM For some reason, W8 gets an ERRORLEVEL 255 here.  Perhaps it doesn't like
+REM that we created a batch file?  In any case, we can try to ignore it.
+if %ERRORLEVEL% NEQ 255 ( 
+   if ERRORLEVEL 1 (
+      %DEBUG% Unexpected ErrorLevel
+      GOTO EOF
+   )
+)
+REM Assuming it worked, invoke the temp file that was created
+if not exist %TMPFILE% (
+  %DEBUG% Unexpected error.  No TMPFILE %TMPFILE%
+  exit /b 432
+)
+%DEBUG% calling tmpfile
+call %TMPFILE%
+REM Pretty print some stuff for the user. 
+@echo Checking tool versions
+@echo. 
+avr-gcc --version
+call :avrdudeversion
+REM And we're done (Most of the work being done in the sub-process.)
+goto eof
+
+REM ======================================================================
+
+:findArduino
+REM Here is most of the work of the script.
+REM Look through the various places where an Arduino install is likely to exist,
+REM  make sure that we can find the avr-gcc binaries that should be part of that
+REM  install, print out the version, and ask the user if that's what they want.
+
+REM Look for existing avr-gcc in path.
+%DEBUG% Looking for avr-gcc in current path
+call :clearerrors
+call :which avr-gcc.exe
+IF "%gotwhich%" NEQ "" (
+  @ECHO avr-gcc already installed at "%gotwhich%"
+  avr-gcc --version
+  exit /b 123
+) ELSE (
+  @ECHO No avr-gcc currently installed.
+)
+REM look for Arduino install.
+set picked=n
+set printed=n
+call :scandir "%ProgramFiles%"
+if ERRORLEVEL 1 exit /b 1
+if "%picked%" NEQ "y" call :scandir "%ProgramFiles(x86)%"
+if ERRORLEVEL 1 exit /b 1
+if "%picked%" NEQ "y" call :scandir "C:\bin"
+if ERRORLEVEL 1 exit /b 1
+if "%picked%" EQU "y" goto gotdir
+@echo.
+  REM try some of the more unlikely places that Arduino might live.
+
+:noarduino
+  @echo Can't find Arduino
+  exit /b 1
+
+
+REM Given the name of a program-containing directory (like "\bin"),
+REM  See if it looks like there are any "Arduino*" directories there,
+REM  and prompt the user to ask whether that's the one we want to use
+REM  for avr-gcc.  If so, set variables saying we picked one.
+:scandir
+  %DEBUG% ScanDir %1
+  SET root=%~1
+  if NOT EXIST "%root%" exit /b 0
+  if NOT EXIST "%root%\Arduino*" exit /b 0
+  FOR /F "tokens=*" %%f IN ('dir /b /x "%root%\Arduino*"') DO (
+    SET prg=!root!\%%f
+    if exist "!prg!\Hardware\tools\avr\bin\avr-gcc.exe" (
+       if "%printed%" NEQ "Y" (
+          echo At least one Arduino install found.
+          echo.
+          set printed=Y
+       )
+       @echo Looks like !prg! has version 
+       call :gccversion "!prg!\Hardware\tools\avr\bin\avr-gcc.exe"
+       SET /P confirm="Use !prg! ? [y/n]>"
+       if "!confirm!"=="x" exit /b 1
+       if "!confirm!"=="y" (
+         SET aroot=!prg!
+         set picked=y
+         exit /b 0
+       )
+    ) else %DEBUG% No Arduino exe in expected spot !prg!
+  )
+  exit /b 0
+
+
+REM prompt for arduino install location.
+@echo ****WHY DID WE GET HERE****
+@echo asking if this is OK
+SET /P confirm="Use %prg% [y/n]>"
+if "%confirm%" NEQ "y" exit /b 0
+
+
+:gotdir
+REM figure out arduino install version.
+%DEBUG% gotdir has aroot = !aroot!
+IF EXIST "!aroot!\hardware\tools\avr\bin\avr-gcc.exe" (
+  @echo Found avr-gcc
+  set bin=!aroot!\hardware\tools\avr\bin
+  set etc=!aroot!\hardware\tools\avr\etc
+) else (
+  @echo Cant find a bin directory in !aroot!
+  exit /b 963
+)
+
+%DEBUG% Checking for utils at %prg%\hardware\tools\avr\utils\bin\
+IF EXIST "!aroot!\hardware\tools\avr\utils\bin\make.exe" (
+  REM See if we have make and etc as well (from Arduino 1.0.x/WinAVR)
+  %DEBUG% Found make.exe
+  set utils=!aroot!\hardware\tools\avr\utils\bin
+)
+
+
+REM find bin directory.
+REM create tentative path for binaries and put it in our tmp batch file
+%DEBUG% Setting paths to include bin and etc
+REM
+REM setx will set a permanent path in the registry, but it won't take effect
+REM until the next invocation of cmd.exe
+REM setx PATH %bin%;%etc%
+REM
+%DEBUG% echoing  PATH %PATH%;%bin%;%etc%
+echo PATH %%PATH%%;%bin%;%etc%>%TMPFILE%
+
+%DEBUG% Have utils = %utils%
+
+IF "%utils%" NEQ "" (
+
+   REM Check for make already installed
+   %DEBUG% Have utils; checking whether make is already installed.
+   call :which make.exe
+   if "%gotwhich%" EQU "" (
+      %DEBUG% Adding utils as well at %utils%
+      echo PATH %%PATH%%;%bin%;%etc%;%utils%>%TMPFILE%
+   )
+)
+call :clearerrors
+exit /b 0
+goto eof
+
+
+REM ----------------------------------------------------------------------
+REM          Subroutines
+REM ----------------------------------------------------------------------
+
+:which
+    %DEBUG% which %1
+    SET gotwhich=
+    for %%i in (%1) do set fullspec=%%~$PATH:i
+    if not "x!fullspec!"=="x" (
+       %DEBUG% !fullspec!
+       set gotwhich=!fullspec!
+    )
+    %DEBUG% End which %gotwhich%
+    goto eof
+
+
+REM ----------------------------------------------------------------------
+
+:gccversion
+   REM This implements "gcc --version | head -1" - show the first line
+   if EXIST %1 (
+     FOR /F "delims=*" %%l in ('%1 --version') DO (
+       @echo %%l
+       REM return after we've output one line
+       exit /b 0
+     )
+   )
+   exit /b 0
+
+
+REM ----------------------------------------------------------------------
+
+:avrdudeversion
+   SETLOCAL ENABLEDELAYEDEXPANSION
+   REM This implements "gcc --version | head -4" - show the first line
+   set /a count=4
+   FOR /F "delims=*" %%l in ('"avrdude -v 2>&1"') DO (
+     @echo %%l
+     set /a count=!count!-1
+     if !count! equ 0 (
+        ENDLOCAL
+        exit /b 0
+     )
+   )
+   exit /b 0
+goto :eof
+
+
+REM ----------------------------------------------------------------------
+
+REM Get a unique temporary filename,
+REM   Thus uses our scriptname, a random number, and the time
+:gettemp
+   set TMPFILE=%TMP%\install-avr-tools-%RANDOM%-%TIME:~6,5%.bat
+   if exist "%TMPFILE%" GOTO gettempname
+   exit /b 0
+
+REM ----------------------------------------------------------------------
+
+REM Clear the ERRORLEVEL to 0, if it happened to be set
+:clearerrors
+   exit /b 0
+
+:eof

+ 2 - 221
optiboot/bootloaders/optiboot/omake.bat

@@ -1,221 +1,2 @@
-@echo off
-SET DEBUG=REM
-
-REM   Batch file to build Optiboot by searching around for the right tools, and then
-REM   setting the path and invoking them with the specified arguments.
-REM   Based on https://github.com/WestfW/Arduino-avr-tools-install
-
-REM Batch file must run in Delayed Evaluation mode.
-%DEBUG% checking cmd mode
-call :clearerrors
-if "!x!" EQU "%x%" (
-
-REM Things are good; try to set the paths and run the compile
-
-REM --------------------------------------------------------
-   call :findArduino
-   %DEBUG% Using make %*
-   make %*
-   exit /b 0
-REM --------------------------------------------------------
-
-)
-REM We have to run in /V mode to get late evaluation of variables inside loops
-%DEBUG% re-running in delayed eval mode
-cmd.exe /V /C "%0" %*
-exit /b 0
-
-
-
-REM ======================================================================
-
-:findArduino
-REM Here is most of the work of the script.
-REM Look through the various places where an Arduino install is likely to exist,
-REM  make sure that we can find the avr-gcc binaries that should be part of that
-REM  install, print out the version, and ask the user if that's what they want.
-
-REM Look for existing avr-gcc in path.
-%DEBUG% Looking for avr-gcc in current path
-call :clearerrors
-call :which avr-gcc.exe
-IF "%gotwhich%" NEQ "" (
-  @ECHO avr-gcc already installed at %gotwhich%
-  exit /b 123
-) ELSE (
-  @ECHO No avr-gcc in current path
-)
-
-REM look for Arduino install.
-set picked=n
-set printed=n
-call :scandir "%ProgramFiles%"
-if ERRORLEVEL 1 exit /b 1
-if "%picked%" NEQ "y" call :scandir "%ProgramFiles(x86)%"
-if ERRORLEVEL 1 exit /b 1
-if "%picked%" NEQ "y" call :scandir "C:\bin"
-if ERRORLEVEL 1 exit /b 1
-if "%picked%" EQU "y" goto gotdir
-@echo.
-  REM try some of the more unlikely places that Arduino might live.
-
-:noarduino
-  @echo Can't find Arduino
-  exit /b 1
-
-
-REM Given the name of a program-containing directory (like "\bin"),
-REM  See if it looks like there are any "Arduino*" directories there,
-REM  and prompt the user to ask whether that's the one we want to use
-REM  for avr-gcc.  If so, set variables saying we picked one.
-:scandir
-  %DEBUG% ScanDir %1
-  SET root=%~1
-  if NOT EXIST "%root%" exit /b 0
-  if NOT EXIST "%root%\Arduino*" exit /b 0
-  FOR /F "tokens=*" %%f IN ('dir /b /x "%root%\Arduino*"') DO (
-    SET prg=!root!\%%f
-    if exist "!prg!\Hardware\tools\avr\bin\avr-gcc.exe" (
-       if "%printed%" NEQ "Y" (
-          echo At least one Arduino install found.
-          echo.
-          set printed=Y
-       )
-       @echo Looks like !prg! has version 
-       call :gccversion "!prg!\Hardware\tools\avr\bin\avr-gcc.exe"
-       SET aroot=!prg!
-       set picked=y
-       exit /b 0
-    ) else %DEBUG% No Arduino exe in expected spot !prg!
-  )
-  exit /b 0
-
-
-REM prompt for arduino install location.
-@echo ****WHY DID WE GET HERE****
-@echo asking if this is OK
-SET /P confirm="Use %prg% [y/n]>"
-if "%confirm%" NEQ "y" exit /b 0
-
-
-:gotdir
-REM figure out arduino install version.
-%DEBUG% gotdir has aroot = !aroot!
-IF EXIST "!aroot!\hardware\tools\avr\bin\avr-gcc.exe" (
-  set bin=!aroot!\hardware\tools\avr\bin
-  set etc=!aroot!\hardware\tools\avr\etc
-) else (
-  @echo Cant find a bin directory in !aroot!
-  exit /b 963
-)
-
-%DEBUG% Checking for utils at %prg%\hardware\tools\avr\utils\bin\
-IF EXIST "!aroot!\hardware\tools\avr\utils\bin\make.exe" (
-  REM See if we have make and etc as well (from Arduino 1.0.x/WinAVR)
-  %DEBUG% Found make.exe
-  set utils=!aroot!\hardware\tools\avr\utils\bin
-) else (
-  IF EXIST "C:\Program Files (X86)\GnuWin32" (
-    set utils="C:\Program Files (X86)\GnuWin32\bin"
-  )
-  IF EXIST "C:\Program Files\GnuWin32" (
-    set utils="C:\Program Files\GnuWin32\bin"
-  )
-)
-
-
-REM find bin directory.
-REM create tentative path for binaries and put it in our tmp batch file
-%DEBUG% Setting paths to include bin and etc
-REM
-REM setx will set a permanent path in the registry, but it won't take effect
-REM until the next invocation of cmd.exe
-REM setx PATH %bin%;%etc%
-REM
-%DEBUG% adding arduin bin and etc to PATH %bin%;%etc%
-call :shorten "%bin%"
-PATH %PATH%;!shortout!
-call :shorten "%etc%"
-PATH %PATH%;!shortout!
-
-%DEBUG% Have utils = %utils%
-
-IF %utils% NEQ "" (
-   REM Check for make already installed
-   %DEBUG% Have utils; checking whether make is already installed.
-   call :which make.exe
-   if "%gotwhich%" EQU "" (
-      echo Found Make at %utils%
-      call :shorten %utils%
-      PATH %PATH%;!shortout!
-   )
-)
-call :clearerrors
-exit /b 0
-goto eof
-
-
-REM ----------------------------------------------------------------------
-REM          Subroutines
-REM ----------------------------------------------------------------------
-
-:which
-    %DEBUG% which %1
-    SET gotwhich=
-    for %%i in (%1) do set fullspec=%%~$PATH:i
-    if not "x!fullspec!"=="x" (
-       %DEBUG% !fullspec!
-       set gotwhich=!fullspec!    
-    )
-    %DEBUG% End which %gotwhich%
-    goto eof
-
-
-REM ----------------------------------------------------------------------
-
-:gccversion
-   REM This implements "gcc --version | head -1" - show the first line
-   if EXIST %1 (
-     FOR /F "delims=*" %%l in ('%1 --version') DO (
-       @echo %%l
-       REM return after we've output one line
-       exit /b 0
-     )
-   )
-   exit /b 0
-
-
-REM ----------------------------------------------------------------------
-
-:avrdudeversion
-   SETLOCAL ENABLEDELAYEDEXPANSION
-   REM This implements "gcc --version | head -4" - show the first line
-   set /a count=4
-   FOR /F "delims=*" %%l in ('"avrdude -v 2>&1"') DO (
-     @echo %%l
-     set /a count=!count!-1
-     if !count! equ 0 (
-        ENDLOCAL
-        exit /b 0
-     )
-   )
-   exit /b 0
-goto :eof
-
-
-REM ----------------------------------------------------------------------
-
-REM Clear the ERRORLEVEL to 0, if it happened to be set
-:clearerrors
-   exit /b 0
-
-
-REM ----------------------------------------------------------------------
-
-REM Shorten a pathname to 8.3 format filenames.
-
-:shorten
-  set shortout=%~s1
-  exit /b 0
-
-:eof
+call .\install-avr-tools.bat
+make %*