main
Makefile
1# wld bmake
2
3.include "config.mk"
4
5PREFIX?= /usr
6LIBDIR?= ${PREFIX}/lib
7INCLUDEDIR?= ${PREFIX}/include
8PKGCONFIGDIR?= ${LIBDIR}/pkgconfig
9
10PKG_CONFIG?= pkg-config
11WAYLAND_SCANNER?=wayland-scanner
12INSTALL?= install
13AR?= ar
14CC?= cc
15
16VERSION_MAJOR=0
17VERSION_MINOR=0
18VERSION=${VERSION_MAJOR}.${VERSION_MINOR}
19
20WLD_LIB_LINK=libwld.so
21WLD_LIB_SONAME=${WLD_LIB_LINK}.${VERSION_MAJOR}
22WLD_LIB=${WLD_LIB_LINK}.${VERSION}
23
24WLD_REQUIRES=fontconfig pixman-1
25WLD_REQUIRES_PRIVATE=freetype2
26
27WLD_SOURCES= \
28 buffer.c \
29 buffered_surface.c \
30 color.c \
31 context.c \
32 font.c \
33 renderer.c \
34 surface.c
35
36WLD_HEADERS=wld.h
37
38.if ${ENABLE_DRM} == 1
39WLD_REQUIRES_PRIVATE+=libdrm
40WLD_SOURCES+=drm.c dumb.c
41WLD_HEADERS+=drm.h
42
43.if !empty(DRM_DRIVERS:Mintel)
44WLD_REQUIRES_PRIVATE+=libdrm_intel
45WLD_SOURCES+=intel.c intel/batch.c
46WLD_CPPFLAGS+=-DWITH_DRM_INTEL=1
47.endif
48
49.if !empty(DRM_DRIVERS:Mnouveau)
50WLD_REQUIRES_PRIVATE+=libdrm_nouveau
51WLD_SOURCES+=nouveau.c
52WLD_CPPFLAGS+=-DWITH_DRM_NOUVEAU=1
53.endif
54.endif
55
56.if ${ENABLE_PIXMAN} == 1
57WLD_SOURCES+=pixman.c
58WLD_HEADERS+=pixman.h
59.endif
60
61.if ${ENABLE_WAYLAND} == 1
62WLD_REQUIRES_PRIVATE+=wayland-client
63WLD_SOURCES+=wayland.c
64WLD_HEADERS+=wayland.h
65
66.if !empty(WAYLAND_INTERFACES:Mshm)
67WLD_SOURCES+=wayland-shm.c
68WLD_CPPFLAGS+=-DWITH_WAYLAND_SHM=1
69.endif
70
71.if !empty(WAYLAND_INTERFACES:Mdrm)
72WLD_SOURCES+=wayland-drm.c protocol/wayland-drm-protocol.c
73WLD_CPPFLAGS+=-DWITH_WAYLAND_DRM=1
74WAYLAND_DRM_XML=protocol/wayland-drm.xml
75.endif
76.endif
77
78WLD_PACKAGES=${WLD_REQUIRES} ${WLD_REQUIRES_PRIVATE}
79WLD_PKG_CFLAGS!=${PKG_CONFIG} --cflags ${WLD_PACKAGES}
80WLD_PKG_LIBS!=${PKG_CONFIG} --libs ${WLD_PACKAGES}
81
82.if ${.MAKE.OS} == "OpenBSD"
83WLD_PKG_LIBS+=-lc
84.endif
85
86CPPFLAGS+=${WLD_PKG_CFLAGS} ${WLD_CPPFLAGS}
87
88CFLAGS+=-fvisibility=hidden -std=c99 -Wvla
89CFLAGS+=-Wall -Werror=implicit-function-declaration \
90 -Werror=implicit-int -Werror=pointer-sign \
91 -Werror=pointer-arith
92
93.if ${.MAKE.OS} == "NetBSD"
94CPPFLAGS+=-D_NETBSD_SOURCE
95.endif
96
97.if ${.MAKE.OS} == "Linux"
98CPPFLAGS+=-D_POSIX_C_SOURCE=200809L
99.endif
100
101.if ${ENABLE_DEBUG} == 1
102CPPFLAGS+=-DENABLE_DEBUG=1
103CFLAGS+=-g
104.else
105CPPFLAGS+=-DNDEBUG
106.endif
107
108STATIC_OBJECTS=${WLD_SOURCES:R:S/$/.o/g}
109SHARED_OBJECTS=${WLD_SOURCES:R:S/$/.lo/g}
110
111DEPFLAGS=-MMD -MP -MF .deps/${.TARGET:T:R}.d
112
113.SUFFIXES: .c .o .lo
114
115.deps:
116 @mkdir -p $@
117
118.c.o: .deps
119 @echo " CC $@"
120 @${CC} ${CPPFLAGS} ${CFLAGS} ${DEPFLAGS} -c $< -o $@
121
122.c.lo: .deps
123 @echo " CC $@"
124 @${CC} ${CPPFLAGS} ${CFLAGS} -fPIC ${DEPFLAGS} -c $< -o $@
125
126.if defined(WAYLAND_DRM_XML)
127protocol/wayland-drm-protocol.c: ${WAYLAND_DRM_XML}
128 @echo " GEN $@"
129 @${WAYLAND_SCANNER:Uwayland-scanner} private-code ${.ALLSRC} $@
130
131protocol/wayland-drm-client-protocol.h: ${WAYLAND_DRM_XML}
132 @echo " GEN $@"
133 @${WAYLAND_SCANNER:Uwayland-scanner} client-header ${.ALLSRC} $@
134
135wayland-drm.o wayland-drm.lo: protocol/wayland-drm-client-protocol.h
136.endif
137
138.if ${ENABLE_STATIC} == 1
139libwld.a: ${STATIC_OBJECTS}
140 @echo " AR $@"
141 @${AR} rc $@ ${.ALLSRC}
142 @ranlib $@
143.endif
144
145.if ${ENABLE_SHARED} == 1
146${WLD_LIB}: ${SHARED_OBJECTS}
147 @echo " LINK $@"
148 @${CC} -shared -Wl,-soname,${WLD_LIB_SONAME} \
149 -o $@ ${.ALLSRC} ${WLD_PKG_LIBS}
150
151${WLD_LIB_SONAME}: ${WLD_LIB}
152 ln -sf ${WLD_LIB} $@
153
154${WLD_LIB_LINK}: ${WLD_LIB_SONAME}
155 ln -sf ${WLD_LIB_SONAME} $@
156.endif
157
158wld.pc: wld.pc.in
159 @echo " GEN $@"
160 @sed -e "s:@VERSION@:${VERSION}:" \
161 -e "s:@PREFIX@:${PREFIX}:" \
162 -e "s:@LIBDIR@:${LIBDIR}:" \
163 -e "s:@INCLUDEDIR@:${INCLUDEDIR}:" \
164 -e "s:@WLD_REQUIRES@:${WLD_REQUIRES}:" \
165 -e "s:@WLD_REQUIRES_PRIVATE@:${WLD_REQUIRES_PRIVATE}:" \
166 ${.ALLSRC} > $@
167
168.MAIN: all
169.PHONY: all
170all: wld.pc
171.if ${ENABLE_STATIC} == 1
172all: libwld.a
173.endif
174.if ${ENABLE_SHARED} == 1
175all: ${WLD_LIB} ${WLD_LIB_SONAME} ${WLD_LIB_LINK}
176.endif
177
178.PHONY: install
179install: all
180 ${INSTALL} -d ${DESTDIR}${LIBDIR}
181 ${INSTALL} -d ${DESTDIR}${INCLUDEDIR}/wld
182 ${INSTALL} -d ${DESTDIR}${PKGCONFIGDIR}
183
184 ${INSTALL} -m644 wld.pc ${DESTDIR}${PKGCONFIGDIR}
185 ${INSTALL} -m644 ${WLD_HEADERS} ${DESTDIR}${INCLUDEDIR}/wld
186
187.if ${ENABLE_STATIC} == 1
188 ${INSTALL} -m644 libwld.a ${DESTDIR}${LIBDIR}
189.endif
190
191.if ${ENABLE_SHARED} == 1
192 ${INSTALL} -m755 ${WLD_LIB} ${DESTDIR}${LIBDIR}
193 cd ${DESTDIR}${LIBDIR} && ln -sf ${WLD_LIB} ${WLD_LIB_SONAME}
194 cd ${DESTDIR}${LIBDIR} && ln -sf ${WLD_LIB_SONAME} ${WLD_LIB_LINK}
195.endif
196
197.PHONY: clean
198clean:
199 rm -f ${STATIC_OBJECTS} ${SHARED_OBJECTS} \
200 libwld.a ${WLD_LIB} ${WLD_LIB_LINK} \
201 ${WLD_LIB_SONAME} wld.pc
202 rm -rf .deps protocol/wayland-drm-protocol.c \
203 protocol/wayland-drm-client-protocol.h
204
205.sinclude ".deps/*.d"