[Spice-devel] [RFC] Add make-it-quick Makefile and support files

Christophe de Dinechin christophe at dinechin.org
Thu Sep 27 15:20:37 UTC 2018


From: Christophe de Dinechin <dinechin at redhat.com>

Make-it-Quick is a make-only build system that uses makefiles
for autoconfiguration. For SPICE, it provides a faster, easier to
maintain and more flexible build system.

A key feature made possible by this build system is top-level builds.
Top-level builds are made from a 'spice' directory that has protocol,
common, server and client as its sub-directories. This makes it easy
to make changes in protocol or common and rebuild all impacted server
and client code, with proper header dependency tracking.

The make-it-quick system is still evolving rapidly. In its current
incarnation, it does not yet offer all the usual targets expected from
a makefile generated by automake.

Github review link: https://github.com/c3d/spice-common/commits/c3d-build

Signed-off-by: Christophe de Dinechin <dinechin at redhat.com>
---
 Makefile        |   5 +++
 common/Makefile | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+)
 create mode 100644 Makefile
 create mode 100644 common/Makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6ddf718
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,5 @@
+MIQ=make-it-quick/
+SUBDIRS=common
+include $(MIQ)rules.mk
+$(MIQ)rules.mk:
+	git clone http://github.com/c3d/make-it-quick
diff --git a/common/Makefile b/common/Makefile
new file mode 100644
index 0000000..38895ed
--- /dev/null
+++ b/common/Makefile
@@ -0,0 +1,121 @@
+MIQ=../make-it-quick/
+
+ifeq ($(VARIANT),)
+override VARIANTS=	common server client
+endif
+
+PRODUCTS=	$(PRODUCTS_$(VARIANT))
+PRODUCTS_common=spice-common.dll
+PRODUCTS_server=spice-common-server.dll
+PRODUCTS_client=spice-common-client.dll
+
+PKGCONFIGS=	pixman-1				\
+		openssl					\
+		gobject-2.0				\
+		gio-2.0					\
+		gthread-2.0				\
+		glib-2.0				\
+		opus?					\
+		celt051?
+
+ifndef SPICE_PROTOCOL
+PKGCONFIGS+=	spice-protocol
+endif
+
+CONFIG=		alloca					\
+		<execinfo.h>				\
+		<stdlib.h>				\
+		<alloca.h>
+
+INCLUDES=	. 					\
+		..					\
+		$(SPICE_PROTOCOL)
+
+DEFINES=	HAVE_CONFIG_H				\
+		$(DEFINES_$(TARGET))
+DEFINES_debug=  ENABLE_EXTRA_CHECKS
+
+
+SOURCES=	backtrace.c                             \
+		canvas_utils.c                          \
+		lines.c                                 \
+		log.c                                   \
+		lz.c                                    \
+		marshaller.c                            \
+		mem.c                                   \
+		pixman_utils.c                          \
+		quic.c                                  \
+		region.c                                \
+		rop3.c                                  \
+		snd_codec.c                             \
+		ssl_verify.c                            \
+		sw_canvas.c				\
+		$(SOURCES_$(OS_NAME))			\
+		$(SOURCES_$(VARIANT))
+
+SOURCES_windows=gdi_canvas.c
+
+SOURCES_server=						\
+		generated_server_demarshallers.c        \
+		generated_server_marshallers.c
+
+SOURCES_client=						\
+		generated_client_demarshallers.c        \
+		generated_client_demarshallers1.c       \
+		generated_client_marshallers.c          \
+		generated_client_marshallers1.c
+
+include $(MIQ)rules.mk
+
+$(MIQ)rules.mk:
+	git submodule update --init --recursive && ln -s recorder/make-it-quick ..
+
+MARSHALLERS_DEPS = 				\
+	../spice.proto 				\
+	../python_modules/__init__.py		\
+	../python_modules/codegen.py		\
+	../python_modules/demarshal.py		\
+	../python_modules/marshal.py		\
+	../python_modules/ptypes.py		\
+	../python_modules/spice_parser.py	\
+	../spice_codegen.py
+
+MARSHALLER_GENERATED =				\
+	generated_client_marshallers.h          \
+	generated_server_marshallers.h          \
+	generated_client_demarshallers.c        \
+	generated_client_demarshallers1.c       \
+	generated_client_marshallers.c          \
+	generated_client_marshallers1.c         \
+	generated_server_demarshallers.c        \
+	generated_server_marshallers.c          \
+
+.prebuild: $(MARSHALLER_GENERATED)
+
+
+# Note despite being autogenerated these are not part of CLEANFILES, they are
+# actually a part of EXTRA_DIST, to avoid the need for pyparser by end users
+generated_%.c generated_%.h: $(MARSHALLERS_DEPS) $(MAKEFILE_DEPS)
+	$(PRINT_GENERATE) $(PYTHON) $(GENERATE_CODEGEN)
+GENERATE_CODEGEN=../spice_codegen.py $(GEN_$@) $< $@ >/dev/null
+GEN_generated_client_demarshallers.c=					\
+	--generate-demarshallers --client --include common/messages.h
+GEN_generated_client_demarshallers1.c=					\
+	--generate-demarshallers --client --include common/messages.h	\
+	--prefix 1 --ptrsize 8
+GEN_generated_client_marshallers.h=					\
+	--generate-marshallers -P --client --include common/messages.h -H
+GEN_generated_client_marshallers.c=					\
+	--generate-marshallers -P --include client_marshallers.h --client
+GEN_generated_client_marshallers1.c=					\
+	--generate-marshallers -P --include common/messages.h		\
+	--include client_marshallers.h --client --prefix 1 --ptrsize 8
+GEN_generated_server_demarshallers.c=					\
+	--generate-demarshallers --server --include common/messages.h
+STRUCTS = -M String -M Rect -M Point -M DisplayBase -M Fill -M Opaque -M Copy -M Blend -M Blackness -M Whiteness -M Invers -M Rop3 -M Stroke -M Text -M Transparent -M AlphaBlend -M Composite
+GEN_generated_server_marshallers.c=					\
+	--generate-marshallers $(STRUCTS) --server			\
+	--include common/messages.h
+GEN_generated_server_marshallers.h=					\
+	--generate-marshallers $(STRUCTS) --server			\
+	--include common/messages.h -H
--
2.13.5 (Apple Git-94)


More information about the Spice-devel mailing list