summaryrefslogtreecommitdiff
path: root/build.bat
blob: 9c4631c062ceb9090e5074e3f1e2eb9b235a0db8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
@echo off
REM build.bat - Batch build script for libgraffik
REM Usage: build.bat <backend> <example>

setlocal enabledelayedexpansion

set LIB_DIR=lib
set EXAMPLES_DIR=examples
set BUILD_DIR=build
set CXX=g++
set CXXFLAGS=-std=c++11 -Wall -Wextra -I%LIB_DIR%

if "%1"=="" goto show_help
if "%1"=="help" goto show_help
if "%1"=="-h" goto show_help
if "%1"=="--help" goto show_help
if "%1"=="clean" goto clean

set BACKEND=%1
set EXAMPLE=%2

if "%EXAMPLE%"=="" (
    echo Error: Example not specified
    echo Usage: build.bat ^<backend^> ^<example^>
    echo Example: build.bat sdl sample1
    exit /b 1
)

REM Validate example exists
if not exist "%EXAMPLES_DIR%\%EXAMPLE%.cpp" (
    echo Error: Example '%EXAMPLE%' not found
    echo.
    echo Available examples:
    for %%f in (%EXAMPLES_DIR%\*.cpp) do echo   %%~nf
    exit /b 1
)

REM Create build directory
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"

REM Set backend-specific flags
if /i "%BACKEND%"=="sdl" (
    set BACKEND_DEFINE=-DUSE_SDL
    if not defined SDL2_PATH set SDL2_PATH=C:\SDL2
    set INCLUDES=-I!SDL2_PATH!\include -I!SDL2_PATH!\include\SDL2
    set LDFLAGS=-L!SDL2_PATH!\lib
    set LIBS=-lmingw32 -lSDL2main -lSDL2 -mwindows
    
    REM Copy SDL2.dll
    if exist "%LIB_DIR%\SDL2.dll" (
        copy /y "%LIB_DIR%\SDL2.dll" "%BUILD_DIR%\" >nul 2>&1
    ) else if exist "!SDL2_PATH!\bin\SDL2.dll" (
        copy /y "!SDL2_PATH!\bin\SDL2.dll" "%BUILD_DIR%\" >nul 2>&1
    )
) else if /i "%BACKEND%"=="win32" (
    set BACKEND_DEFINE=-DUSE_WIN32
    set INCLUDES=
    set LDFLAGS=
    set LIBS=-lgdi32 -luser32
) else (
    echo Error: Invalid backend '%BACKEND%'
    echo Available backends: sdl, win32
    exit /b 1
)

echo Building %EXAMPLE% with %BACKEND% backend...
echo.

REM Build command
%CXX% %CXXFLAGS% %BACKEND_DEFINE% %INCLUDES% ^
    %EXAMPLES_DIR%\%EXAMPLE%.cpp %LIB_DIR%\graphics.cpp ^
    -o %BUILD_DIR%\%EXAMPLE%.exe ^
    %LDFLAGS% %LIBS%

if %errorlevel% equ 0 (
    echo.
    echo Build successful!
    echo Output: %BUILD_DIR%\%EXAMPLE%.exe
    echo.
    echo Run with: %BUILD_DIR%\%EXAMPLE%.exe
    exit /b 0
) else (
    echo.
    echo Build failed!
    exit /b 1
)

:show_help
echo ========================================
echo    libgraffik Build System
echo ========================================
echo.
echo Usage:
echo   build.bat ^<backend^> ^<example^>
echo   build.bat clean
echo.
echo Available Backends:
echo   sdl    - SDL2 (cross-platform)
echo   win32  - Win32 API (Windows native)
echo.
echo Available Examples:
for %%f in (%EXAMPLES_DIR%\*.cpp) do echo   %%~nf
echo.
echo Examples:
echo   build.bat sdl sample1
echo   build.bat win32 sample2
echo   build.bat clean
echo.
exit /b 0

:clean
echo Cleaning build files...
if exist "%BUILD_DIR%" (
    rmdir /s /q "%BUILD_DIR%"
    echo Clean complete
) else (
    echo Nothing to clean
)
exit /b 0