build.bat 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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=-logg -lADLMIDI -lmad -lmodplug -lsmpeg -lgme -lvorbis -lopus -lvorbisfile -ldiscord-rpc -lSDL2_mixer_ext.dll -lSDL2 -ld3dcompiler_47 -ld3d11 -ldxgi -lcurl -llibxinput9_1_0 -lfreetype -lopengl32 -lglew32 -lglu32 -lgdi32 -lbass -lbassasio -lbass_fx -lbassmix -lbasswasapi -lbassloud -lcomctl32 -lDwmapi -lComdlg32 -lpsapi -lws2_32 -lwinmm -lpthread -llibjpeg -lwbemuuid -lole32 -loleaut32 -llzma -lShlwapi
  14. set CXXFLAGS=%CXXFLAGS% -g3
  15. rem set CXXFLAGS=%CXXFLAGS% -O3
  16. rem set LDFLAGS=%LDFLAGS% -mwindows -s
  17. rem PREPARE BUILD DIR
  18. xcopy resources build /E /I /Y > nul
  19. for /d %%i in (libraries\*) do (
  20. copy %%i\bin\* build\ > nul
  21. )
  22. rem COLLECT LIBRARIES INCLUDE PATHS
  23. set INCLUDEPATHS=
  24. for /d %%i in (libraries\*) do (
  25. if exist "%%i\include" (
  26. set VAR=%%i\include
  27. set INCLUDEPATHS=!INCLUDEPATHS! -I!VAR:\=/!
  28. )
  29. )
  30. set CXXFLAGS=%CXXFLAGS% %INCLUDEPATHS%
  31. rem COLLECT LIBRARIES LINKER PATHS
  32. set LIBPATHS=
  33. for /d %%i in (libraries\*) do (
  34. if exist "%%i\lib\windows" (
  35. set VAR=%%i\lib\windows
  36. set LIBPATHS=!LIBPATHS! -L!VAR:\=/!
  37. )
  38. )
  39. set CXXFLAGS=%CXXFLAGS% %LIBPATHS%
  40. rem BUILD OBJECTS
  41. if exist "build_flags.txt" del /q "build_flags.txt"
  42. <nul set /p "=-o build/neosu.exe " >> build_flags.txt
  43. <nul set /p "=!CXXFLAGS! " >> build_flags.txt
  44. set OBJECTS=
  45. for /r "src" %%i in (*.cpp) do (
  46. set file_path=%%i
  47. set obj_path=!file_path:src\=obj\!
  48. for %%F in ("!obj_path!") do set "obj_dir=%%~dpF"
  49. if not exist !obj_dir! mkdir !obj_dir!
  50. set obj=!obj_path:.cpp=.o!
  51. set VAR=!OBJECTS! !obj!
  52. set OBJECTS=!VAR!
  53. echo CC %%i
  54. <nul set /p "=!obj:\=/! " >> build_flags.txt
  55. %CXX% %CXXFLAGS% -c %%i -o !obj!
  56. if !ERRORLEVEL! neq 0 (
  57. pause
  58. goto END
  59. )
  60. )
  61. rem PREPARE ICON
  62. windres resource.rc -O coff -o obj/icon.o
  63. <nul set /p "=obj/icon.o " >> build_flags.txt
  64. rem BUILD EXECUTABLE
  65. <nul set /p "=!LDFLAGS! " >> build_flags.txt
  66. %LD% @build_flags.txt
  67. if !ERRORLEVEL! neq 0 (
  68. pause
  69. ) else (
  70. del /q "build_flags.txt"
  71. cd build
  72. neosu.exe
  73. )
  74. :END