]> git.tdb.fi Git - gldbg.git/blobdiff - Makefile
Fix things for 64-bit systems
[gldbg.git] / Makefile
index c4dedb2484142439f6f193c85223c73e6e651bc8..ca938f26fd46ba1bcabfa46c3737f97267cdead3 100644 (file)
--- a/Makefile
+++ b/Makefile
-# $Id$
+ifeq ($(FLAVOR),)
+FLAVOR := gl
+endif
 
-CFLAGS = -Igensrc -ggdb -Wall -Wextra
-CXXFLAGS = -Igensrc -ggdb -Wall -Wextra
+CPPFLAGS := -I. -Isource -Iflavors/$(FLAVOR)/source
+CFLAGS := -ggdb -Wall -Wextra
+CXXFLAGS := $(CFLAGS)
 
-PACKAGES_gldbg = mspcore mspstrings mspio mspfs
-CXXFLAGS_gldbg = $(shell pkg-config --cflags $(PACKAGES_gldbg))
-LIBS_gldbg = $(shell pkg-config --libs $(PACKAGES_gldbg)) -lreadline
+PACKAGES_gldbg := libpng12
 
+FLAVOR_ROOT := flavors/$(FLAVOR)
+VPATH := $(FLAVOR_ROOT)
+
+SOURCES_libgldbg := source/gldecoder.c \
+       source/glprint.c \
+       source/enums.c \
+       source/arraysize.c \
+       source/tmpalloc.c \
+       source/packet.c \
+       source/functions.c
+SOURCES_glwrap := source/glwrap.c \
+       source/glwrap_funcs.c \
+       source/arraysize.c \
+       source/packet.c \
+       source/tmpalloc.c
+SOURCES_gldump := source/gldump.c
+SOURCES_gldbg := source/main.cpp \
+       source/gldbg.cpp \
+       source/commandinterpreter.cpp \
+       source/process.cpp \
+       source/strformat.cpp \
+       source/tool.cpp
+SOURCES_tracer := source/tracer.cpp
+SOURCES_profiler := source/profiler.cpp
+SOURCES_inspector := source/inspector.cpp \
+       source/glstate.cpp \
+       source/arraystate.cpp \
+       source/texturestate.cpp \
+       source/bufferstate.cpp \
+       source/programstate.cpp
+SOURCES_grabber := source/grabber.cpp \
+       source/grabber_flavor.cpp
+TEMPLATES := source/functions.enum.t \
+       source/functions.table.t \
+       source/gldecoder.funcs.t \
+       source/gldecoder.struct.t \
+       source/glprint.funcs.t \
+       source/glwrap.funcs.t \
+       source/enums.table.t
+
+rename = $(addprefix $(1)/,$(addsuffix $(2),$(basename $(notdir $(3)))))
+objs = $(call rename,temp,.o,$(1))
+deps = $(call rename,temp,.d,$(1))
+gen = $(call rename,gensrc,,$(1))
+
+.PHONY: all
 all: glwrap.so gldump gldbg
 
-glwrap.so: source/glwrap.o source/arraysize.o
+include flavors/$(FLAVOR)/flavor.mk
+
+SOURCES_gldbg += $(foreach tool,$(TOOLS),$(SOURCES_$(tool)))
+GENSOURCES := $(call gen,$(TEMPLATES))
+SOURCES_all := $(sort $(SOURCES_libgldbg) $(SOURCES_glwrap) $(SOURCES_gldump) $(SOURCES_gldbg))
+
+OBJECTS_libgldbg := $(call objs,$(SOURCES_libgldbg))
+OBJECTS_glwrap := $(call objs,$(SOURCES_glwrap))
+OBJECTS_gldump := $(call objs,$(SOURCES_gldump))
+OBJECTS_gldbg := $(call objs,$(SOURCES_gldbg))
+
+OBJECTS_all := $(call objs,$(SOURCES_all))
+DEPS_all := $(call deps,$(SOURCES_all) $(TEMPLATES))
+
+$(OBJECTS_gldbg): CXXFLAGS += $(shell pkg-config --cflags $(PACKAGES_gldbg))
+gldbg: LIBS += $(shell pkg-config --libs $(PACKAGES_gldbg)) -lreadline -lrt
+gldump gldbg: LIBS += ./libgldbg.a
+$(OBJECTS_glwrap): CFLAGS += -fPIC
+glwrap.so: LDFLAGS += -s
+glwrap.so: LIBS += -ldl
+
+glwrap.so: $(OBJECTS_glwrap) glwrap.ld
        $(CC) -shared -o $@ $^ $(LIBS) $(LDFLAGS)
 
-gldump: source/gldecoder.o source/gldump.o source/glprint.o source/enums.o source/arraysize.o source/tmpalloc.o
+gldump: $(OBJECTS_gldump) libgldbg.a
        $(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
 
-gldbg: source/gldbg.o source/gldecoder.o source/glprint.o source/commandinterpreter.o source/tracer.o source/process.o source/enums.o source/arraysize.o source/tmpalloc.o source/glstate.o source/texturestate.o source/bufferstate.o source/profiler.o source/arraystate.o
-       $(CXX) -o $@ $^ $(LIBS_gldbg) $(LIBS) $(LDFLAGS)
+gldbg: $(OBJECTS_gldbg) libgldbg.a
+       $(CXX) -o $@ $^ $(LIBS) $(LDFLAGS)
 
-source/glwrap.o: source/functions.h gensrc/functions.enum gensrc/glwrap.funcs
-source/gldecoder.o: source/functions.h gensrc/gldecoder.struct gensrc/gldecoder.funcs gensrc/gldecoder.funcs
-source/gldump.o: source/gldecoder.h gensrc/gldecoder.struct source/glprint.h
-source/glprint.o: source/arraysize.h gensrc/glprint.funcs gensrc/gldecoder.struct
-source/enums.o: gensrc/enums.table
-source/gldbg.o: source/gldbg.h source/gldecoder.h source/tracer.h source/commandinterpreter.h source/glstate.h source/profiler.h
-source/tracer.o: source/gldecoder.h source/glprint.h
-source/commandinterpreter.o: source/gldbg.h source/glstate.h
-source/process.o: source/process.h
-source/glstate.o: source/glstate.h source/gldecoder.h source/texturestate.h source/bufferstate.h
-source/texturestate.o: source/texturestate.h
-source/bufferstate.o: source/arraystate.h source/bufferstate.h source/enums.h
-source/arraystate.o: source/arraystate.h source/bufferstate.h
+libgldbg.a: $(OBJECTS_libgldbg)
+       $(AR) rc $@ $^
 
-%.o: %.cpp
-       $(CXX) -c $(CXXFLAGS) $(CXXFLAGS_gldbg) -o $@ $<
+temp/%.o: source/%.c temp/.created
+       $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
 
-gensrc/%: source/%.t gensrc/.created genwrap.py gl.files gl.tm gl.io gl.spec glx.files glx.tm glx.io glx.spec glxext.spec
-       python ./genwrap.py $< gl.files glx.files >$@
+temp/%.o: source/%.cpp temp/.created
+       $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
 
-gensrc/enums.table: enum.spec genenum.py
-       python ./genenum.py enum.spec >$@
+temp/.created:
+       mkdir -p temp
+       touch $@
+
+gensrc/%: source/%.t gensrc/.created generate.py
+       python ./generate.py $< $(APIS) >$@
 
 gensrc/.created:
        mkdir -p gensrc
        touch $@
+
+-include $(DEPS_all)
+
+temp/%.d: source/%.c temp/.created
+       $(CC) $(CPPFLAGS) -MM -MF $@ -MT $(call rename,temp,.o,$<) -MG $<
+
+temp/%.d: source/%.cpp temp/.created
+       $(CXX) $(CPPFLAGS) -MM -MF $@ -MT $(call rename,temp,.o,$<) -MG $<
+
+temp/%.d: source/%.t temp/.created
+       python ./generate.py --depends=$(call rename,gensrc,,$<) $< $(APIS) >$@
+
+.PHONY: clean
+clean:
+       $(RM) $(DEPS_all)
+       $(RM) $(OBJECTS_all)
+       $(RM) gensrc/enums.table $(GENSOURCES)
+       $(RM) glwrap.so libgldbg.a gldump gldbg