build-win32: Share targets and variables across win32 makefiles

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.
This commit is contained in:
Andrea Canciani 2011-09-04 18:00:38 +02:00
parent efdf65c0c4
commit a76b78c2da
3 changed files with 71 additions and 82 deletions

54
Makefile.win32.common Normal file
View File

@ -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

View File

@ -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:$@ $^

View File

@ -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