.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./external/imgui \ -I./external/rlImGui \ -I./external/box2d/include \ -I./external/nhlohmann_json_3.12.0/ \ -I./external/asset_packer/bin/include \ -I./src \ WEB_INCLUDES = -I./external/raylib-web/include \ -I./external/entt/single_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./src \ 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/engine/core/application.cpp \ # ./src/engine/scene/scene.cpp \ # ./src/game/main.cpp SRC_FILES := $(shell find ./src -name "*.cpp") TEST_ENTRY_POINT = ./src/test.cpp IMGUI_OBJS = $(patsubst ./external/imgui/%.cpp,./bin/external/%.o,$(IMGUI_SRCS)) IMGUI_BACKEND_OBJS = $(patsubst ./external/rlImGui/%.cpp,./bin/external/%.o,$(IMGUI_BACKEND)) OBJS_FILES = $(patsubst ./src/%.cpp,./bin/obj/%.o,$(SRC_FILES)) DEP_FILES = $(patsubst ./bin/obj/%.o,./bin/obj/%.d,$(OBJS_FILES)) all: build-desktop run-desktop ./bin/external/%.o: ./external/imgui/%.cpp @mkdir -p bin @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ./bin/external/%.o: ./external/rlImGui/%.cpp @mkdir -p bin @mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ ./bin/obj/%.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) $(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) $(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) $(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-all: @rm -r -f ./bin clean-engine: @rm -r -f ./bin/obj/engine @rm -r -f ./bin/main.exe clean-game: @rm -r -f ./bin/obj/game @rm -r -f ./bin/main.exe clean-desktop: @rm -r -f ./bin/obj @rm -r -f ./bin/main.exe 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/ list-src-files: @echo $(shell find src -name "*.cpp")