SHELL := /bin/sh OBJDIR := build SRCDIR := src BINDIR := bin LIBDIR := ext/tangerine LIB := $(LIBDIR)/build/libTangerine.a CXX := g++ # NOTE: due to a longstanding 'bug' in gcc, we can only check for unitialized # variables if an optimization pass is run. However, compiling without # optimization is useful for debugging, so we can add some local variables # for easier inspection. # see) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=18501 CHECK_UNITIALIZED := false ifeq ($(CHECK_UNITIALIZED), true) CXXFLAGS := -std=c++11 -g -ggdb3 -O -Wall else CXXFLAGS := -std=c++11 -g -ggdb3 -Wall endif CXXFLAGS += -I$(LIBDIR)/include/ \ $(shell sdl2-config --cflags) LDFLAGS := $(shell sdl2-config --libs) -lGLEW -lGL COMMON_SOURCES := $(SRCDIR)/orbits.cpp COMMON_OBJECTS := $(patsubst $(SRCDIR)/%.cpp, $(OBJDIR)/%.o, $(COMMON_SOURCES)) TESTDIR := tests TEST_SOURCES := $(wildcard $(TESTDIR)/*.cpp) TEST_OBJECTS := $(patsubst $(TESTDIR)/%.cpp, $(OBJDIR)/%.o, $(TEST_SOURCES)) TEST_BIN := $(BINDIR)/test_orbit # imgui setup IMGUI_DIR := ext/imgui CXXFLAGS += -I$(IMGUI_DIR) IMGUI_IMPL_DIR := $(IMGUI_DIR)/backends IMGUI_IMPL_SOURCES := $(IMGUI_IMPL_DIR)/imgui_impl_opengl3.cpp $(IMGUI_IMPL_DIR)/imgui_impl_sdl2.cpp IMGUI_SOURCES := $(filter-out $(IMGUI_DIR)/imgui_demo.cpp, $(wildcard $(IMGUI_DIR)/*.cpp)) IMGUI_OBJECTS := $(patsubst $(IMGUI_DIR)/%.cpp, $(OBJDIR)/%.o, $(IMGUI_SOURCES)) IMGUI_IMP_OBJECTS += $(patsubst $(IMGUI_IMPL_DIR)/%.cpp, $(OBJDIR)/%.o, $(IMGUI_IMPL_SOURCES)) SOURCES := $(SRCDIR)/main.cpp $(SRCDIR)/gooey.cpp $(SRCDIR)/game.cpp OBJECTS := $(patsubst $(SRCDIR)/%.cpp, $(OBJDIR)/%.o, $(SOURCES)) BIN := $(BINDIR)/orbital_shipping all: mkdirs $(BIN) tags @# automatically run tests when (re-)compiling @#${TEST_BIN} .PHONY: all tests: $(TEST_BIN) .PHONY: tests tags: @ctags -R --exclude=ext/imgui/* --exclude=ext/tangerine/ext/* .PHONY: tags mkdirs: @-mkdir -p ./bin ./build .PHONY: mkdirs -include $(OBJDIR)/*.d $(BIN): $(COMMON_OBJECTS) $(OBJECTS) $(IMGUI_OBJECTS) $(IMGUI_IMP_OBJECTS) $(LIB) $(CXX) -o $@ $(COMMON_OBJECTS) $(OBJECTS) $(LIB) \ $(IMGUI_OBJECTS) $(IMGUI_IMP_OBJECTS) $(LDFLAGS) $(TEST_BIN): $(TEST_OBJECTS) $(LIB) $(CXX) -o $@ $(LDFLAGS) $(TEST_OBJECTS) $(LIB) $(COMMON_OBJECTS): $(COMMON_SOURCES) $(CXX) $(CXXFLAGS) -c -MMD $(SRCDIR)/orbits.cpp -o $@ $(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp $(CXX) $(CXXFLAGS) -c -MMD $< -o $@ $(TEST_OBJECTS): $(OBJDIR)/%.o : $(TESTDIR)/%.cpp $(CXX) $(CXXFLAGS) -c -MMD $< -o $@ $(IMGUI_OBJECTS): $(OBJDIR)/%.o : $(IMGUI_DIR)/%.cpp $(CXX) $(CXXFLAGS) -c -MMD $< -o $@ $(IMGUI_IMP_OBJECTS): $(OBJDIR)/%.o : $(IMGUI_IMPL_DIR)/%.cpp $(CXX) $(CXXFLAGS) -c -MMD $< -o $@ $(LIB): $(MAKE) -C $(LIBDIR) clean: @rm -f $(BIN) $(TEST_BIN) $(OBJDIR)/* .PHONY: clean clean_lib: $(MAKE) -C $(LIBDIR) clean .PHONY: clean_lib