.PHONY: all build-gui build-game run-desktop clean web CXX = g++ WSL = wsl --shell-type login WEB_CXX = $(WSL) em++ # EMSCRIPTE_H_PATH = "//wsl.localhost/archlinux/home/shadow/dev/external/emsdk/upstream/emscripten/system/include/emscripten.h" BROWSER = "C:\Program Files\Mozilla Firefox\firefox.exe" # upstream/emscripten/system/include/emscripten.h ASSETS = "data.dat" LDFLAGS = -L./external/raylib/lib \ -L./external/box2d/build/src \ -L./external/asset_packer/bin \ WEB_LDFLAGS = -L./external/raylib-web/lib \ -L./external/asset_packer/bin \ -sUSE_GLFW=3 \ --preload-file $(ASSETS) \ --shell-file "./html/shell_custom.html" LIBS = -lraylib -lwinmm -lgdi32 -lbox2d -lassetpacker WEB_LIBS = -lraylib.web -lassetpacker.web CXXFLAGS = -std=c++20 -O2 \ -MMD -MP DEBUGFLAGS = -std=c++20 -g -O0 INCLUDES = -I./external/raylib/include \ -I./external/entt/single_include \ -I./src/include \ -I./external/imgui \ -I./external/rlImGui \ -I./external/box2d/include \ -I./external/nhlohmann_json_3.12.0/ \ -I./external/asset_packer/bin/include \ WEB_INCLUDES = -I./external/raylib-web/include \ -I./external/entt/single_include \ -I./src/include \ -I./external/imgui \ -I./external/rlImGui \ -I./external/box2d/include \ -I./external/nhlohmann_json_3.12.0/ \ -I./external/asset_packer/bin/include \ # -I./external/emscripten/include \ IMGUI_SRCS = ./external/imgui/imgui.cpp \ ./external/imgui/imgui_demo.cpp \ ./external/imgui/imgui_draw.cpp \ ./external/imgui/imgui_tables.cpp \ ./external/imgui/imgui_widgets.cpp \ IMGUI_BACKEND = ./external/rlImGui/rlImGui.cpp SRC_FILES = ./src/asset.cpp \ ./src/movement.cpp \ ./src/player.cpp \ ./src/fruit.cpp \ ./src/render.cpp \ ./src/scenes/scene.cpp \ ./src/scenes/game_play_scene.cpp \ ./src/scenes/menu_scene.cpp ENTRY_POINT = ./src/main.cpp TEST_ENTRY_POINT = ./src/test.cpp IMGUI_OBJS = $(patsubst ./external/imgui/%.cpp,./bin/%.o,$(IMGUI_SRCS)) IMGUI_BACKEND_OBJS = $(patsubst ./external/rlImGui/%.cpp,./bin/%.o,$(IMGUI_BACKEND)) OBJS_FILES = $(patsubst ./src/%.cpp,./bin/%.o,$(SRC_FILES)) DEP_FILES = $(patsubst ./bin/%.o,./bin/%.d,$(OBJS_FILES)) all: build-desktop run-desktop ./bin/%.o: ./external/imgui/%.cpp @mkdir -p bin $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ./bin/%.o: ./external/rlImGui/%.cpp @mkdir -p bin $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ./bin/%.o: ./src/%.cpp @mkdir -p bin @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ccj: clean @echo "Generating compile_commands.json..." bear -- $(MAKE) ccj-web: clean @echo "Generating web compile_commands.json..." $(WSL) bear -- $(MAKE) web-native @sed -i '$$ s/,$$//' compile_commands.json @sed -i 's|"/home/|"\\\\\\\\wsl.localhost\\\\archlinux\\\\home\\\\|g' compile_commands.json @sed -i 's|=/home/|=\\\\\\\\wsl.localhost\\\\archlinux\\\\home\\\\|g' compile_commands.json @sed -i 's|"/mnt/c/|"C:/|g' compile_commands.json -include $(DEP_FILES) build-gui: $(IMGUI_OBJS) build-gui-backend: $(IMGUI_BACKEND_OBJS) build-core: $(OBJS_FILES) build-desktop: $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) @mkdir -p bin $(CXX) $(CXXFLAGS) $(INCLUDES) $(ENTRY_POINT) $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) $(LDFLAGS) $(LIBS) -o ./bin/main.exe cp ./assets ./bin -rf build-test: $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) @mkdir -p bin $(CXX) $(CXXFLAGS) $(INCLUDES) $(TEST_ENTRY_POINT) $(OBJS_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) $(LDFLAGS) $(LIBS) -o ./bin/test.exe cp ./assets ./bin -rf build-debug: @mkdir -p debug $(CXX) $(DEBUGFLAGS) $(INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_OBJS) $(IMGUI_BACKEND_OBJS) $(LDFLAGS) $(LIBS) -o ./debug/d.exe cp ./data.dat ./debug -rf web: @mkdir -p web $(WEB_CXX) $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/index.html web-native: @mkdir -p web em++ $(CXXFLAGS) $(WEB_INCLUDES) $(ENTRY_POINT) $(SRC_FILES) $(IMGUI_SRCS) $(IMGUI_BACKEND) $(WEB_LDFLAGS) $(WEB_LIBS) -o ./web/index.html clean-desktop: @rm -r -f ./bin @rm -f compile_commands.json clean-debug: @rm -r -f ./debug clean-web: @rm -r -f ./web clean: clean-desktop clean-debug clean-web run-desktop: ./bin/main.exe open-browser: $(BROWSER) start-server: $(WSL) python -m http.server 3000 -d ./web run-web: $(BROWSER) http://localhost:3000/index.html $(WSL) python -m http.server 3000 -d ./web # $(WSL) node ./web/web.js run-debug: ./debug/d.exe run-test: build-test ./bin/test.exe pack-assets: ./external/asset_packer/bin/assetpacker.exe assets/