build.bat 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set CXX=g++
  4. set LD=g++
  5. rem Install ccache for faster builds
  6. where ccache >nul 2>nul
  7. if %errorlevel% equ 0 (
  8. set CXX=ccache %CXX%
  9. )
  10. set CXXFLAGS=-std=c++17 -Wall -fmessage-length=0 -Wno-sign-compare -Wno-unused-local-typedefs -Wno-reorder -Wno-switch -IC:\mingw32\include
  11. set CXXFLAGS=%CXXFLAGS% -D__GXX_EXPERIMENTAL_CXX0X__
  12. set CXXFLAGS=%CXXFLAGS% -Isrc/App -Isrc/App/Osu -Isrc/Engine -Isrc/GUI -Isrc/GUI/Windows -Isrc/GUI/Windows/VinylScratcher -Isrc/Engine/Input -Isrc/Engine/Platform -Isrc/Engine/Main -Isrc/Engine/Renderer -Isrc/Util
  13. set LDFLAGS=-s -logg -lADLMIDI -lmad -lmodplug -lsmpeg -lgme -lvorbis -lopus -lvorbisfile -ldiscord-rpc -lSDL2_mixer_ext.dll -lSDL2 -ld3dcompiler_47 -ld3d11 -ldxgi -lopenvr_api -lcurl -llibxinput9_1_0 -lfreetype -lopengl32 -lOpenCL -lvulkan-1 -lglew32 -lglu32 -lgdi32 -lbass -lbass_fx -lcomctl32 -lDwmapi -lComdlg32 -lpsapi -lenet -lws2_32 -lwinmm -lpthread -llibjpeg -lwbemuuid -lole32 -loleaut32 -llzma
  14. set CXXFLAGS=%CXXFLAGS% -g3
  15. rem set CXXFLAGS=%CXXFLAGS% -O3 -DMCOSU_STREAM="release"
  16. rem set LDFLAGS=%LDFLAGS% -mwindows
  17. rem PREPARE BUILD DIR
  18. xcopy resources build /E /I /Y > nul
  19. if not exist build\cfg mkdir build\cfg
  20. for /d %%i in (libraries\*) do (
  21. copy %%i\bin\* build\ > nul
  22. )
  23. rem COLLECT LIBRARIES INCLUDE PATHS
  24. set INCLUDEPATHS=
  25. for /d %%i in (libraries\*) do (
  26. if exist "%%i\include" (
  27. set VAR=%%i\include
  28. set INCLUDEPATHS=!INCLUDEPATHS! -I!VAR:\=/!
  29. )
  30. )
  31. set CXXFLAGS=%CXXFLAGS% %INCLUDEPATHS%
  32. rem COLLECT LIBRARIES LINKER PATHS
  33. set LIBPATHS=
  34. for /d %%i in (libraries\*) do (
  35. if exist "%%i\lib\windows" (
  36. set VAR=%%i\lib\windows
  37. set LIBPATHS=!LIBPATHS! -L!VAR:\=/!
  38. )
  39. )
  40. set CXXFLAGS=%CXXFLAGS% %LIBPATHS%
  41. rem BUILD OBJECTS
  42. if exist "build_flags.txt" del /q "build_flags.txt"
  43. <nul set /p "=-o build/McOsu.exe " >> build_flags.txt
  44. <nul set /p "=!CXXFLAGS! " >> build_flags.txt
  45. set OBJECTS=
  46. for /r "src" %%i in (*.cpp) do (
  47. set file_path=%%i
  48. set obj_path=!file_path:src\=obj\!
  49. for %%F in ("!obj_path!") do set "obj_dir=%%~dpF"
  50. if not exist !obj_dir! mkdir !obj_dir!
  51. set obj=!obj_path:.cpp=.o!
  52. set VAR=!OBJECTS! !obj!
  53. set OBJECTS=!VAR!
  54. echo CC %%i
  55. <nul set /p "=!obj:\=/! " >> build_flags.txt
  56. %CXX% %CXXFLAGS% -c %%i -o !obj!
  57. if !ERRORLEVEL! neq 0 (
  58. pause
  59. goto END
  60. )
  61. )
  62. rem BUILD EXECUTABLE
  63. <nul set /p "=!LDFLAGS! " >> build_flags.txt
  64. %LD% @build_flags.txt
  65. if !ERRORLEVEL! neq 0 (
  66. pause
  67. ) else (
  68. del /q "build_flags.txt"
  69. cd build
  70. start McOsu
  71. )
  72. :END