Browse Source

makefiles tweak; use gcc preprocessor options for dependency checking

Pal Lockheart 7 years ago
parent
commit
1a00501cc1
4 changed files with 73 additions and 31 deletions
  1. 3 0
      .gitignore
  2. 24 11
      unix/Makefile
  3. 23 10
      win32/Makefile
  4. 23 10
      win32/Makefile.mingw

+ 3 - 0
.gitignore

@@ -245,6 +245,9 @@ unix/sdlpal
 sdlpal.cfg
 data
 
+*.Td
+*.d
+
 *.xcscmblueprint
 xcuserdata
 *.xcuserstate

+ 24 - 11
unix/Makefile

@@ -6,11 +6,14 @@ TEST_TARGET = ./sdlpal-tests
 HOST =
 TEST_CCFLAGS =
 
+DEPFLAGS = -MT $@ -MMD -MP -MF $*.Td
+
 GTEST_DIR = ../3rd/googletest/googletest
 
-CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c)
+CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) 
 CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
 OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o)
+DEPFILES = $(OBJFILES:.o=.d) 
 TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 
@@ -20,6 +23,8 @@ CFLAGS = $(CCFLAGS) -std=gnu99 `fltk-config --cflags`
 LDFLAGS = `sdl2-config --libs` `fltk-config --ldflags` -lstdc++ -lm -pthread
 TEST_CXXFLAGS += -isystem $(GTEST_DIR)/include -I $(GTEST_DIR) -g -Wall -Wextra -pthread
 
+POSTCOMPILE = @mv -f $*.Td $*.d && touch $@
+
 .PHONY : all clean check
 
 all: $(TARGET)
@@ -28,24 +33,32 @@ $(TARGET): $(OBJFILES)
 	@echo [LD] $@
 	@$(HOST)gcc $^ -o $@ $(LDFLAGS)
 
-gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc
-	@echo [CC] $^
-	@$(HOST)g++ $(TEST_CXXFLAGS) -c $< -o $@
+gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(TEST_CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.c
-	@echo [CC] $^
-	@$(HOST)gcc $(CFLAGS) -c $< -o $@
+%.o: %.c %.d
+	@echo [CC] $<
+	@$(HOST)gcc $(DEPFLAGS) $(CFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.cpp
-	@echo [CC] $^
-	@$(HOST)g++ $(CXXFLAGS) -c $< -o $@
+%.o: %.cpp %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
 $(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) gtest-all.o
 	@echo [LD] $@
 	@$(HOST)g++ $^ -o $@ $(LDFLAGS) -lpthread
 
 clean:
-	-rm -f $(TARGET) $(TEST_TARGET) *.o ../*.o ../adplug/*.o ../libmad/*.o ../liboggvorbis/src/*.o ../tests/*.o
+	-rm -f $(TARGET) $(TEST_TARGET) $(OBJFILES) $(TEST_OBJFILES) $(DEPFILES)
+
+%.d: ;
+.PRECIOUS: %.d
+
+-include $(DEPFILES)
 
 check: TEST_CCFLAGS = -DUNIT_TEST=1 -isystem $(GTEST_DIR)/include
 check: $(TEST_TARGET)

+ 23 - 10
win32/Makefile

@@ -6,12 +6,15 @@ TEST_TARGET = sdlpal-tests.exe
 HOST =
 TEST_CCFLAGS =
 
+DEPFLAGS = -MT $@ -MMD -MP -MF $*.Td
+
 GTEST_DIR = ../3rd/googletest/googletest
 
 CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) $(wildcard ../native_midi/*.c) $(wildcard ../win32/*.c)
 CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
 RCFILES = $(wildcard ./sdlpal.rc)
 OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(RCFILES:.rc=.o)
+DEPFILES = $(CFILES:.c=.d) $(CPPFILES:.cpp=.d)
 TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 
@@ -21,6 +24,8 @@ CFLAGS = $(CCFLAGS) -std=gnu99
 LDFLAGS = `sdl2-config --libs` -lm -lwinmm -lole32 -loleaut32 -limm32 -lcomctl32 -luuid -ldxguid -lversion -static -static-libgcc -static-libstdc++
 TEST_CXXFLAGS += -isystem $(GTEST_DIR)/include -I $(GTEST_DIR) -g -Wall -Wextra -pthread
 
+POSTCOMPILE = @mv -f $*.Td $*.d && touch $@
+
 .PHONY : all clean check
 
 all: $(TARGET)
@@ -29,17 +34,20 @@ $(TARGET): $(OBJFILES)
 	@echo [LD] $@
 	@$(HOST)g++ $^ -o $@ $(LDFLAGS)
 
-gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc
-	@echo [CC] $^
-	@$(HOST)g++ $(TEST_CXXFLAGS) -c $^ -o $@
+gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(TEST_CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.c
-	@echo [CC] $^
-	@$(HOST)gcc $(CFLAGS) -c $^ -o $@
+%.o: %.c %.d
+	@echo [CC] $<
+	@$(HOST)gcc $(DEPFLAGS) $(CFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.cpp
-	@echo [CC] $^
-	@$(HOST)g++ $(CXXFLAGS) -c $^ -o $@
+%.o: %.cpp %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
 %.o: %.rc
 	@echo [RES] $^
@@ -50,7 +58,12 @@ $(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) gtest-all.o
 	@$(HOST)g++ $^ -o $@ $(LDFLAGS) -pthread
 
 clean:
-	-rm -f $(TARGET) $(TEST_TARGET) $(OBJFILES) $(TEST_OBJFILES)
+	-rm -f $(TARGET) $(TEST_TARGET) $(OBJFILES) $(TEST_OBJFILES) $(DEPFILES)
+
+%.d: ;
+.PRECIOUS: %.d
+
+-include $(DEPFILES)
 
 check: TEST_CCFLAGS = -DUNIT_TEST=1 -isystem $(GTEST_DIR)/include
 check: $(TEST_TARGET)

+ 23 - 10
win32/Makefile.mingw

@@ -6,12 +6,15 @@ TEST_TARGET = sdlpal-tests.exe
 HOST =
 TEST_CCFLAGS =
 
+DEPFLAGS = -MT $@ -MMD -MP -MF $*.Td
+
 GTEST_DIR = ../3rd/googletest/googletest
 
 CFILES = $(wildcard ../adplug/*.c) $(wildcard ../libmad/*.c) $(wildcard ../liboggvorbis/src/*.c) $(wildcard ../*.c) $(wildcard ../native_midi/*.c) $(wildcard ../win32/*.c)
 CPPFILES = $(wildcard ../adplug/*.cpp) $(wildcard ../*.cpp) $(wildcard ./*.cpp)
 RCFILES = $(wildcard ./sdlpal.rc)
 OBJFILES = $(CFILES:.c=.o) $(CPPFILES:.cpp=.o) $(RCFILES:.rc=.o)
+DEPFILES = $(CFILES:.c=.d) $(CPPFILES:.cpp=.d)
 TEST_CPPFILES = $(wildcard ../tests/*.cpp)
 TEST_OBJFILES = $(TEST_CPPFILES:.cpp=.o)
 
@@ -21,6 +24,8 @@ CFLAGS = $(CCFLAGS) -std=gnu99
 LDFLAGS = -lmingw32 -lSDL2main -lSDL2 -mwindows -lm -lwinmm -lole32 -loleaut32 -limm32 -lcomctl32 -luuid -ldxguid -lversion -static -static-libgcc -static-libstdc++
 TEST_CXXFLAGS += -isystem $(GTEST_DIR)/include -I $(GTEST_DIR) -g -Wall -Wextra -pthread
 
+POSTCOMPILE = @move /Y $(subst /,\,$*).Td $(subst /,\,$*).d > NUL 2>&1 && type NUL >> $(subst /,\,$@)
+
 .PHONY : all clean check
 
 all: $(TARGET)
@@ -29,17 +34,20 @@ $(TARGET): $(OBJFILES)
 	@echo [LD] $@
 	@$(HOST)g++ $^ -o $@ $(LDFLAGS)
 
-gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc
-	@echo [CC] $^
-	@$(HOST)g++ $(TEST_CXXFLAGS) -c $^ -o $@
+gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(TEST_CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.c
-	@echo [CC] $^
-	@$(HOST)gcc $(CFLAGS) -c $^ -o $@
+%.o: %.c %.d
+	@echo [CC] $<
+	@$(HOST)gcc $(DEPFLAGS) $(CFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-%.o: %.cpp
-	@echo [CC] $^
-	@$(HOST)g++ $(CXXFLAGS) -c $^ -o $@
+%.o: %.cpp %.d
+	@echo [CC] $<
+	@$(HOST)g++ $(DEPFLAGS) $(CXXFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
 %.o: %.rc
 	@echo [RES] $^
@@ -50,7 +58,12 @@ $(TEST_TARGET): $(OBJFILES) $(TEST_OBJFILES) gtest-all.o
 	@$(HOST)g++ $^ -o $@ $(LDFLAGS) -pthread
 
 clean:
-	-del /Q $(subst /,\,$(TARGET)) $(subst /,\,$(TEST_TARGET)) $(subst /,\,$(OBJFILES)) $(subst /,\,$(TEST_OBJFILES))
+	-del /Q $(subst /,\,$(TARGET)) $(subst /,\,$(TEST_TARGET)) $(subst /,\,$(OBJFILES)) $(subst /,\,$(TEST_OBJFILES)) $(subst /,\,$(DEPFILES))
+
+%.d: ;
+.PRECIOUS: %.d
+
+-include $(DEPFILES)
 
 check: TEST_CCFLAGS = -DUNIT_TEST=1 -isystem $(GTEST_DIR)/include
 check: $(TEST_TARGET)