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"