[Pixman] [PATCH 4/7] build-win32: Share targets and variables across win32 makefiles

Andrea Canciani ranma42 at gmail.com
Sun Sep 4 13:53:42 PDT 2011


The win32 build system repeatedly defines some basic variables
(notably program names and flags) and C sources compilation rules.

They can be factored out to a common Makefile, to be included in every
other Makefile.win32.
---
 Makefile.win32.common |   54 +++++++++++++++++++++++++++++++++++++++++++
 pixman/Makefile.win32 |   61 +++++-------------------------------------------
 test/Makefile.win32   |   38 ++++++++----------------------
 3 files changed, 71 insertions(+), 82 deletions(-)
 create mode 100644 Makefile.win32.common

diff --git a/Makefile.win32.common b/Makefile.win32.common
new file mode 100644
index 0000000..56c3593
--- /dev/null
+++ b/Makefile.win32.common
@@ -0,0 +1,54 @@
+LIBRARY = pixman-1
+
+CC = cl
+LD = link
+AR = lib
+PERL = perl
+
+ifeq ($(top_builddir),)
+top_builddir = $(top_srcdir)
+endif
+
+CFG_VAR = $(CFG)
+ifeq ($(CFG_VAR),)
+CFG_VAR = release
+endif
+
+ifeq ($(CFG_VAR),debug)
+CFG_CFLAGS  = -MDd -Od -Zi
+CFG_LDFLAGS = -DEBUG
+else
+CFG_CFLAGS  = -MD -O2
+CFG_LDFLAGS =
+endif
+
+# Package definitions, to be used instead of those provided in config.h
+PKG_CFLAGS  = -DPACKAGE=$(LIBRARY) -DPACKAGE_VERSION="" -DPACKAGE_BUGREPORT=""
+
+BASE_CFLAGS = -nologo -I. -I$(top_srcdir) -I$(top_srcdir)/pixman
+
+PIXMAN_CFLAGS  = $(BASE_CFLAGS) $(PKG_CFLAGS) $(CFG_CFLAGS) $(CFLAGS)
+PIXMAN_LDFLAGS = -nologo $(CFG_LDFLAGS) $(LDFLAGS)
+PIXMAN_ARFLAGS = -nologo $(LDFLAGS)
+
+
+inform:
+ifneq ($(CFG),release)
+ifneq ($(CFG),debug)
+ifneq ($(CFG),)
+	@echo "Invalid specified configuration option: "$(CFG)"."
+	@echo
+	@echo "Possible choices for configuration are 'release' and 'debug'"
+	@exit 1
+endif
+	@echo "Using default RELEASE configuration... (use CFG=release or CFG=debug)"
+endif
+endif
+
+
+$(CFG_VAR)/%.obj: %.c $(BUILT_SOURCES)
+	@mkdir -p $(CFG_VAR)
+	@$(CC) -c $(PIXMAN_CFLAGS) -Fo"$@" $<
+
+clean: inform
+	@$(RM) $(CFG_VAR)/*.{exe,ilk,lib,obj,pdb} $(BUILT_SOURCES) || exit 0
diff --git a/pixman/Makefile.win32 b/pixman/Makefile.win32
index d2d018a..beff4a0 100644
--- a/pixman/Makefile.win32
+++ b/pixman/Makefile.win32
@@ -2,17 +2,7 @@ default: all
 
 top_srcdir = ..
 include $(top_srcdir)/pixman/Makefile.sources
-
-LIBRARY     = pixman-1
-
-CC   = cl
-LINK = link
-PERL = perl
-
-CFG_VAR = $(CFG)
-ifeq ($(CFG_VAR),)
-CFG_VAR=release
-endif
+include $(top_srcdir)/Makefile.win32.common
 
 MMX_VAR = $(MMX)
 ifeq ($(MMX_VAR),)
@@ -24,26 +14,18 @@ ifeq ($(SSE2_VAR),)
 SSE2_VAR=on
 endif
 
-CFLAGS     = -MD -nologo -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -I../pixman/src -I. -DPACKAGE=$(LIBRARY) -DPACKAGE_VERSION="" -DPACKAGE_BUGREPORT=""
 MMX_CFLAGS = -DUSE_MMX -w14710 -w14714
 SSE2_CFLAGS = -DUSE_SSE2
 
-# optimization flags
-ifeq ($(CFG_VAR),debug)
-CFLAGS += -Od -Zi
-else
-CFLAGS += -O2
-endif
-
 # MMX compilation flags
 ifeq ($(MMX_VAR),on)
-CFLAGS += $(MMX_CFLAGS)
+PIXMAN_CFLAGS += $(MMX_CFLAGS)
 libpixman_sources += pixman-mmx.c
 endif
 
 # SSE2 compilation flags
 ifeq ($(SSE2_VAR),on)
-CFLAGS += $(SSE2_CFLAGS)
+PIXMAN_CFLAGS += $(SSE2_CFLAGS)
 libpixman_sources += pixman-sse2.c
 endif
 
@@ -51,26 +33,6 @@ OBJECTS = $(patsubst %.c, $(CFG_VAR)/%.obj, $(libpixman_sources))
 
 # targets
 all: inform informMMX informSSE2 $(CFG_VAR)/$(LIBRARY).lib
-	@exit 0
-clean: inform clean_r 
-	@exit 0
-pixman: inform informMMX informSSE2 $(CFG_VAR)/$(LIBRARY).lib 
-	@exit 0
-
-inform:
-ifneq ($(CFG),release)
-ifneq ($(CFG),debug)
-ifneq ($(CFG),)
-	@echo "Invalid specified configuration option : "$(CFG)"."
-	@echo
-	@echo -n "Possible choices for configuration are "
-	@echo "'release' and 'debug'"
-	@echo ""
-	@exit 1
-endif
-	@echo "Using default RELEASE configuration... (use CFG=release or CFG=debug)"
-endif
-endif
 
 informMMX:
 ifneq ($(MMX),off)
@@ -78,8 +40,7 @@ ifneq ($(MMX),on)
 ifneq ($(MMX),)
 	@echo "Invalid specified MMX option : "$(MMX_VAR)"."
 	@echo
-	@echo -n "Possible choices for MMX are 'on' or 'off'"
-	@echo ""
+	@echo "Possible choices for MMX are 'on' or 'off'"
 	@exit 1
 endif
 	@echo "Setting MMX flag to default value 'on'... (use MMX=on or MMX=off)"
@@ -92,22 +53,14 @@ ifneq ($(SSE2),on)
 ifneq ($(SSE2),)
 	@echo "Invalid specified SSE option : "$(SSE2)"."
 	@echo
-	@echo -n "Possible choices for SSE2 are 'on' or 'off'"
-	@echo ""
+	@echo "Possible choices for SSE2 are 'on' or 'off'"
 	@exit 1
 endif
 	@echo "Setting SSE2 flag to default value 'on'... (use SSE2=on or SSE2=off)"
 endif
 endif
 
-# pixman compilation and linking
-$(CFG_VAR)/%.obj: %.c $(BUILT_SOURCES)
-	@mkdir -p $(CFG_VAR)
-	@$(CC) -c $(CFLAGS) -Fo"$@" $<
 
+# pixman linking
 $(CFG_VAR)/$(LIBRARY).lib: $(OBJECTS)
-	lib -NOLOGO -OUT:$@ $(OBJECTS) || exit 0
-
-clean_r:
-	@rm -f $(CFG_VAR)/*.obj $(CFG_VAR)/*.lib $(CFG_VAR)/*.pdb $(CFG)/*.ilk || exit 0
-	@rm -f $(CFG)/*.obj $(CFG)/*.lib $(CFG)/*.pdb $(CFG)/*.ilk $(BUILT_SOURCES) || exit 0
+	@$(AR) $(PIXMAN_ARFLAGS) -OUT:$@ $^
diff --git a/test/Makefile.win32 b/test/Makefile.win32
index 215fb04..c857db9 100644
--- a/test/Makefile.win32
+++ b/test/Makefile.win32
@@ -2,25 +2,12 @@ default: all
 
 top_srcdir = ..
 include $(top_srcdir)/test/Makefile.sources
+include $(top_srcdir)/Makefile.win32.common
 
-CC   = cl
-LINK = link
-
-CFG_VAR = $(CFG)
-ifeq ($(CFG_VAR),)
-CFG_VAR=release
-endif
-
-CFLAGS     = -MD -nologo -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_BIND_TO_CURRENT_VCLIBS_VERSION -D_MT -I../pixman -I. -I../
-TEST_LDADD = ../pixman/$(CFG_VAR)/pixman-1.lib $(CFG_VAR)/libutils.lib
-INCLUDES = -I../pixman -I$(top_builddir)/pixman
-
-# optimization flags
-ifeq ($(CFG_VAR),debug)
-CFLAGS += -Od -Zi
-else
-CFLAGS += -O2
-endif
+TEST_LDADD = \
+	$(top_builddir)/pixman/$(CFG_VAR)/$(LIBRARY).lib \
+	$(CFG_VAR)/libutils.lib \
+	$(NULL)
 
 libutils_OBJECTS = $(patsubst %.c, $(CFG_VAR)/%.obj, $(libutils_sources))
 
@@ -29,18 +16,13 @@ OBJECTS = $(patsubst %.c, $(CFG_VAR)/%.obj, $(SOURCES))
 TESTS   = $(patsubst %,   $(CFG_VAR)/%.exe, $(TESTPROGRAMS))
 BENCHS  = $(patsubst %,   $(CFG_VAR)/%.exe, $(BENCHMARKS))
 
-
-all: $(TESTS) $(BENCHS)
+all: inform $(TESTS) $(BENCHS)
 
 $(CFG_VAR)/libutils.lib: $(libutils_OBJECTS)
-	@lib -NOLOGO -OUT:$@ $^ || exit 0
-
-$(CFG_VAR)/%.obj: %.c
-	@mkdir -p $(CFG_VAR)
-	@$(CC) -c $(CFLAGS) -Fo"$@" $<
+	@$(AR) $(PIXMAN_ARFLAGS) -OUT:$@ $^
 
 $(CFG_VAR)/%.exe: $(CFG_VAR)/%.obj $(TEST_LDADD)
-	@$(LINK) /NOLOGO /OUT:$@ $^
+	@$(LD) $(PIXMAN_LDFLAGS) -OUT:$@ $^
 
-clean:
-	@rm -f $(CFG_VAR)/*.obj $(CFG_VAR)/*.pdb || exit 0
+$(top_builddir)/pixman/$(CFG_VAR)/$(LIBRARY).lib:
+	@$(MAKE) -C $(top_builddir)/pixman -f Makefile.win32
-- 
1.7.4.4



More information about the Pixman mailing list