A simple windows batch file to compile HLSL shaders with DirectX11 SDK

@echo off

rem //------------------------------------------------------------
rem //
rem // DirectX11 HLSL シェーダをコンパイルするバッチファイル
rem //
rem //------------------------------------------------------------

rem fxc.exe の場所
set SHADER_COMPILER="C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Utilities\bin\x86\fxc.exe"

rem 結果の出力先
set OUTPUT_DIR=..\..\temporary

rem //------------------------------------------------------------
rem //
rem // デフォルトの設定
rem // 
rem //------------------------------------------------------------

set SHADER_OPT_DEFAULT=1

set VS_PROFILE_DEFAULT=vs_5_0
set GS_PROFILE_DEFAULT=gs_5_0
set PS_PROFILE_DEFAULT=ps_5_0
set CS_PROFILE_DEFAULT=cs_5_0

set VS_ENTRYPOINT_DEFAULT=VSMain
set GS_ENTRYPOINT_DEFAULT=GSMain
set PS_ENTRYPOINT_DEFAULT=PSMain
set CS_ENTRYPOINT_DEFAULT=CSMain

set SHADER_SOURCE_SUFFIX_DEFAULT=hlsl
set SHADER_ASM_SUFFIX_DEFAULT=shasm
set SHADER_OBJ_SUFFIX_DEFAULT=shobj

rem //------------------------------------------------------------

if not exist %SHADER_COMPILER% (
    echo エラー : SHADER_COMPILER がないです.
    echo SHADER_COMPILER は %SHADER_COMPILER% です.

    return
)

if not exist %OUTPUT_DIR% (
    echo エラー : OUTPUT_DIR がないです.
    echo OUTPUT_DIR は %OUTPUT_DIR% です.

    return
)

rem //------------------------------------------------------------
rem //
rem // ビルド対象のシェーダ
rem //
rem //------------------------------------------------------------

rem HLSL のファイル名と エントリポイントを指定

call :build_shader_vs_5_0 FluidRender.hlsl ParticleVS
call :build_shader_gs_5_0 FluidRender.hlsl ParticleGS
call :build_shader_ps_5_0 FluidRender.hlsl ParticlePS

call :build_shader_cs_5_0 FluidCS11.hlsl   DensityCS_Simple
call :build_shader_cs_5_0 FluidCS11.hlsl   ForceCS_Simple
call :build_shader_cs_5_0 FluidCS11.hlsl   IntegrateCS

exit /b %ERRORLEVEL%

rem //------------------------------------------------------------
rem //
rem // 以下は関数
rem //
rem //------------------------------------------------------------

rem 頂点シェーダをビルドする関数

:build_shader_vs_5_0

call :build_shader %1 %VS_PROFILE_DEFAULT% %2

exit /b %ERRORLEVEL%


rem //------------------------------------------------------------

rem ジオメトリシェーダをビルドする関数

:build_shader_gs_5_0

call :build_shader %1 %GS_PROFILE_DEFAULT% %2

exit /b %ERRORLEVEL%

rem //------------------------------------------------------------

rem ピクセルシェーダをビルドする関数

:build_shader_ps_5_0

call :build_shader %1 %PS_PROFILE_DEFAULT% %2

exit /b %ERRORLEVEL%

rem //------------------------------------------------------------

rem コンピュートシェーダをビルドする関数

:build_shader_cs_5_0

call :build_shader %1 %CS_PROFILE_DEFAULT% %2

exit /b %ERRORLEVEL%

rem //------------------------------------------------------------

rem シェーダをビルドする関数

:build_shader

SETLOCAL 

set SOURCE_BASE_NAME=%~n1

set HLSL_FILENAME=%1
set ASM_FILENAME=%OUTPUT_DIR%\%SOURCE_BASE_NAME%_%3_%2.%SHADER_ASM_SUFFIX_DEFAULT%

if not exist %HLSL_FILENAME% (
    echo エラー : HLSL_FILENAME がないです
    echo    HLSL_FILENAME = %HLSL_FILENAME% です
    exit /b 1
)

echo;
echo %HLSL_FILENAME% のエントリポイント %3 を、%2 でビルド

%SHADER_COMPILER% /O%SHADER_OPT_DEFAULT% /nologo /Fc%ASM_FILENAME% /T%2 /E%3 %HLSL_FILENAME%

if not %ERRORLEVEL% == 0 (
    echo コンパイルエラー
    echo    エラーレベル     : %ERRORLEVEL%
    echo    ファイル名       : %HLSL_FILENAME%
    echo    エントリポイント : %3
    echo    プロファイル     : %2

    echo;

    pause
    exit /b 1
)

ENDLOCAL

exit /b %ERRORLEVEL%

rem //------------------------------------------------------------