@Echo Off
Set SAVPATH=%PATH%

Set paramSys=win32
Set paramUpdate=no
Set paramSpeed=no
Set paramAudit=no
Set paramConsole=no

REM Système cible
If /I "%1"=="psp"           Set paramSys=psp
If /I "%2"=="psp"           Set paramSys=psp
If /I "%3"=="psp"           Set paramSys=psp
If /I "%4"=="psp"           Set paramSys=psp
If /I "%5"=="psp"           Set paramSys=psp
Set makeExt=%paramSys%
If /I "%1"=="psp-cf"        Set makeExt=psp-cf
If /I "%2"=="psp-cf"        Set makeExt=psp-cf
If /I "%3"=="psp-cf"        Set makeExt=psp-cf
If /I "%4"=="psp-cf"        Set makeExt=psp-cf
If /I "%5"=="psp-cf"        Set makeExt=psp-cf
If "%makeExt%"=="psp-cf"    Set paramSys=psp

REM Mise à jour SVN
If /I "%1"=="update"        Set paramUpdate=yes
If /I "%2"=="update"        Set paramUpdate=yes
If /I "%3"=="update"        Set paramUpdate=yes
If /I "%4"=="update"        Set paramUpdate=yes
If /I "%5"=="update"        Set paramUpdate=yes

REM Compilation rapide avec un seul fichier C/C++
If /I "%1"=="speed"         Set paramSpeed=yes
If /I "%2"=="speed"         Set paramSpeed=yes
If /I "%3"=="speed"         Set paramSpeed=yes
If /I "%4"=="speed"         Set paramSpeed=yes
If /I "%5"=="speed"         Set paramSpeed=yes

REM Activation du traçage des fonctions
If /I "%1"=="audit"         Set paramAudit=yes
If /I "%2"=="audit"         Set paramAudit=yes
If /I "%3"=="audit"         Set paramAudit=yes
If /I "%4"=="audit"         Set paramAudit=yes
If /I "%5"=="audit"         Set paramAudit=yes

REM Activation de la console dans la version Win32
If /I "%1"=="console"       Set paramConsole=yes
If /I "%2"=="console"       Set paramConsole=yes
If /I "%3"=="console"       Set paramConsole=yes
If /I "%4"=="console"       Set paramConsole=yes
If /I "%5"=="console"       Set paramConsole=yes

If Not Exist makefile.%paramSys% (
    REM Erreur de lancement
    Echo Enable to build with file "makefile.%paramSys%"...
    Goto Finish
)

REM Nettoyage
Call clean.bat %paramSys%
Cls

REM Mise à jour de la version
If "%paramUpdate%"=="yes" (
    If Exist svnUpdate.bat  Call svnUpdate.bat
)

REM Création des répertoires de compilation à l'identique de l'arborescence de "src"
Set BinDir=bin
If Not Exist %BinDir% Mkdir %BinDir%

REM Génération des fichiers si possible
Set srcDir=src
If "%paramSpeed%"=="yes" (
    If Exist makeSrcPerf.bat (
        Set srcDir=srcPerf
        Call makeSrcPerf.bat
    )
)

REM Création des répertoires de compilation
For /F %%i In ('Dir src /B /AD') Do (
    If Not Exist %BinDir%\%%i MkDir %BinDir%\%%i
)

REM Le répertoire des ressources pour la construction
Set buildRes=res\build

REM Pour USGE Audit
Set OPT_USGE_AUDIT=
If "%paramAudit%"=="yes"    Set OPT_USGE_AUDIT=Audit

REM Création du fichier "makefile.var" pour y intégrer le titre
Set /P APP_TITLE=<%buildRes%\title.txt
Set /P APP_VERSION=<%buildRes%\version.txt
Set /P CUSTOMLIBS=<%buildRes%\%paramSys%Libs.txt
Set /P INCLUDE_FOLDERS=<%buildRes%\%paramSys%Includes.txt
Set /P GCC_OPTIONS=<%buildRes%\%paramSys%GccOptions%OPT_USGE_AUDIT%.txt
Set /P GPP_OPTIONS=<%buildRes%\%paramSys%GppOptions%OPT_USGE_AUDIT%.txt
Set /P sdkPath=<%buildRes%\%paramSys%Path.txt
Set PATH=%sdkPath%;%PATH%

REM Création du fichier "makefile.var"
Echo #####################################################################################>makefile.var
Echo # Fichier "Makefile" pour les variables communes indépendant de la plateforme visée #>>makefile.var
Echo #####################################################################################>>makefile.var
Echo.>>makefile.var
Echo # Informations sur la construction du fichier>>makefile.var
Echo NOM = %APP_TITLE%>>makefile.var
Echo VERSION = %APP_VERSION%>>makefile.var
Echo TITLE = %APP_TITLE% %APP_VERSION%>>makefile.var
Echo.>>makefile.var
Echo # Informations sur les répertoires>>makefile.var
Echo OUTPUT = bin/>>makefile.var
Echo RELEASE = release/>>makefile.var
Echo SRC = %srcDir%/>>makefile.var
Echo.>>makefile.var
REM Bibliothèques additionnelles
If Not "%CUSTOMLIBS%"=="" (
    Echo # Bibliothèques additionnelles>>makefile.var
    Set CUSTOMLIBS>>makefile.var
)
REM Répertoires Include additionnels
If Not "%INCLUDE_FOLDERS%"=="" (
    Echo # Répertoires Include additionnels>>makefile.var
    Set INCLUDE_FOLDERS>>makefile.var
)
REM Options GCC
If Not "%GCC_OPTIONS%"=="" (
    Echo # Options GCC>>makefile.var
    Set GCC_OPTIONS>>makefile.var
)
REM Options G++
If Not "%GPP_OPTIONS%"=="" (
    Echo # Options G++>>makefile.var
    Set GPP_OPTIONS>>makefile.var
)
REM Affichage de la console
If "%paramConsole%.console.%paramSys%"=="no.console.win32" (
    Echo NO_CONSOLE = -mwindows>>makefile.var
)
Echo.>>makefile.var
Echo # Informations sur les fichiers OBJET>>makefile.var
Echo CPP = $(wildcard $(SRC)*.cpp) $(wildcard $(SRC)*/*.cpp)>>makefile.var
Echo C = $(wildcard $(SRC)*.c) $(wildcard $(SRC)*/*.c)>>makefile.var
Echo PROGOBJ = $(CPP:.cpp=.obj) $(C:.c=.o)>>makefile.var

REM Récapitulatif des options :
Set GCC_CMD=gcc
If "%paramSys%"=="psp" (
    Set GCC_CMD=psp-gcc
)
%GCC_CMD% -dumpmachine>gccTmp.txt
Set /p GCC_MACHINE=<gccTmp.txt
%GCC_CMD% -dumpversion>gccTmp.txt
Set /p GCC_VERSION=<gccTmp.txt
Del gccTmp.txt
Echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Echo    - App version      : %APP_TITLE% v%APP_VERSION%
Echo    - GCC version      : %GCC_VERSION% (%GCC_MACHINE%)
Echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Echo    - Target system    : %paramSys%
Echo    - Update version   : %paramUpdate%
Echo    - Speed generation : %paramSpeed%
If "%paramSys%"=="psp" (
    If "%makeExt%"=="psp-cf" (
        Echo    - PSP Version      : Custom Firmware
    ) Else (
        Echo    - PSP Version      : Official Firmware
    )
) Else (
    Echo    - Console enabled  : %paramConsole%
)
Echo    - Include audit    : %paramAudit%
Echo ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ

REM Génération des ressources pour l'application Windows
If "%paramSys%"=="win32" (
    If Exist %buildRes%\res.rc (
        Echo Making "appIcon.rc.o" for Windows application icon...
        windres %buildRes%\res.rc res.rc.o
    )
)

make -f makefile.%makeExt%

If Exist makefile.var   Del makefile.var

REM Suppression du fichier généré pour les ressources pour Win32
If "%paramSys%"=="win32" (
    If Exist res.rc.o   Del res.rc.o
)
REM Suppression des fichiers binaires annexes pour la PSP
If "%paramSys%"=="psp" (
    If Exist release\myElf.elf          Del release\myElf.elf
    If Exist release\myElf.elf.strip    Del release\myElf.elf.strip
    If Exist release\myElf.elf.prx      Del release\myElf.elf.prx
    If Exist release\PARAM.SFO          Del release\PARAM.SFO
    If Exist data.psp                   Del data.psp
)

REM Fin de traitement
:Finish
If Exist %BinDir%       Rd /s /q %BinDir%
Set PATH=%SAVPATH%
