commit 0a60e49

shrub  ·  2026-02-08 00:06:32 +0000 UTC
parent 402198d
bmake
2 files changed,  +198, -193
+184, -178
  1@@ -1,199 +1,205 @@
  2-# wld: Makefile
  3-
  4-include config.mk
  5-
  6-PREFIX          ?= /usr
  7-LIBDIR          ?= $(PREFIX)/lib
  8-INCLUDEDIR      ?= $(PREFIX)/include
  9-PKGCONFIGDIR    ?= $(LIBDIR)/pkgconfig
 10-
 11-PKG_CONFIG      ?= pkg-config
 12-WAYLAND_SCANNER ?= wayland-scanner
 13-
 14-VERSION_MAJOR   := 0
 15-VERSION_MINOR   := 0
 16-VERSION         := $(VERSION_MAJOR).$(VERSION_MINOR)
 17-
 18-WLD_LIB_LINK    := libwld.so
 19-WLD_LIB_SONAME  := $(WLD_LIB_LINK).$(VERSION_MAJOR)
 20-WLD_LIB         := $(WLD_LIB_LINK).$(VERSION)
 21-
 22-TARGETS         := wld.pc
 23-CLEAN_FILES     :=
 24-
 25-WLD_REQUIRES = fontconfig pixman-1
 26-WLD_REQUIRES_PRIVATE = freetype2
 27-WLD_SOURCES =           \
 28-    buffer.c            \
 29-    buffered_surface.c  \
 30-    color.c             \
 31-    context.c           \
 32-    font.c              \
 33-    renderer.c          \
 34+# wld bmake 
 35+
 36+.include "config.mk"
 37+
 38+PREFIX?=        /usr
 39+LIBDIR?=        ${PREFIX}/lib
 40+INCLUDEDIR?=    ${PREFIX}/include
 41+PKGCONFIGDIR?=  ${LIBDIR}/pkgconfig
 42+
 43+PKG_CONFIG?=    pkg-config
 44+WAYLAND_SCANNER?=wayland-scanner
 45+INSTALL?=       install
 46+AR?=            ar
 47+CC?=            cc
 48+
 49+VERSION_MAJOR=0
 50+VERSION_MINOR=0
 51+VERSION=${VERSION_MAJOR}.${VERSION_MINOR}
 52+
 53+WLD_LIB_LINK=libwld.so
 54+WLD_LIB_SONAME=${WLD_LIB_LINK}.${VERSION_MAJOR}
 55+WLD_LIB=${WLD_LIB_LINK}.${VERSION}
 56+
 57+WLD_REQUIRES=fontconfig pixman-1
 58+WLD_REQUIRES_PRIVATE=freetype2
 59+
 60+WLD_SOURCES= \
 61+    buffer.c \
 62+    buffered_surface.c \
 63+    color.c \
 64+    context.c \
 65+    font.c \
 66+    renderer.c \
 67     surface.c
 68-WLD_HEADERS = wld.h
 69-
 70-ifeq ($(ENABLE_DRM),1)
 71-    WLD_REQUIRES_PRIVATE += libdrm
 72-    WLD_SOURCES += drm.c dumb.c
 73-    WLD_HEADERS += drm.h
 74-
 75-    ifneq ($(findstring intel,$(DRM_DRIVERS)),)
 76-        WLD_REQUIRES_PRIVATE += libdrm_intel
 77-        WLD_SOURCES += intel.c intel/batch.c
 78-        WLD_CPPFLAGS += -DWITH_DRM_INTEL=1
 79-    endif
 80-
 81-    ifneq ($(findstring nouveau,$(DRM_DRIVERS)),)
 82-        WLD_REQUIRES_PRIVATE += libdrm_nouveau
 83-        WLD_SOURCES += nouveau.c
 84-        WLD_CPPFLAGS += -DWITH_DRM_NOUVEAU=1
 85-    endif
 86-endif
 87-
 88-ifeq ($(ENABLE_PIXMAN),1)
 89-    WLD_SOURCES += pixman.c
 90-    WLD_HEADERS += pixman.h
 91-endif
 92-
 93-ifeq ($(ENABLE_WAYLAND),1)
 94-    WLD_REQUIRES_PRIVATE += wayland-client
 95-    WLD_SOURCES += wayland.c
 96-    WLD_HEADERS += wayland.h
 97-
 98-    ifneq ($(findstring shm,$(WAYLAND_INTERFACES)),)
 99-        WLD_SOURCES += wayland-shm.c
100-        WLD_CPPFLAGS += -DWITH_WAYLAND_SHM=1
101-    endif
102-
103-    ifneq ($(findstring drm,$(WAYLAND_INTERFACES)),)
104-        WLD_SOURCES += wayland-drm.c protocol/wayland-drm-protocol.c
105-        WLD_CPPFLAGS += -DWITH_WAYLAND_DRM=1
106-    endif
107-endif
108-
109-ifeq ($(if $(V),$(V),0), 0)
110-    define quiet
111-        @echo "  $1	$@"
112-        @$(if $2,$2,$($1))
113-    endef
114-else
115-    quiet = $(if $2,$2,$($1))
116-endif
117-
118-WLD_STATIC_OBJECTS  = $(WLD_SOURCES:%.c=%.o)
119-WLD_SHARED_OBJECTS  = $(WLD_SOURCES:%.c=%.lo)
120-WLD_PACKAGES        = $(WLD_REQUIRES) $(WLD_REQUIRES_PRIVATE)
121-WLD_PACKAGE_CFLAGS ?= $(call pkgconfig,$(WLD_PACKAGES),cflags,CFLAGS)
122-WLD_PACKAGE_LIBS   ?= $(call pkgconfig,$(WLD_PACKAGES),libs,LIBS)
123-
124-ifeq ($(shell uname),OpenBSD)
125-    WLD_PACKAGE_LIBS += -lc
126-endif
127-
128-
129-FINAL_CFLAGS = $(CFLAGS) -fvisibility=hidden -std=c99 -Wvla
130-FINAL_CPPFLAGS = $(CPPFLAGS)
131-
132-# Warning/error flags
133-FINAL_CFLAGS += -Werror=implicit-function-declaration -Werror=implicit-int \
134-                -Werror=pointer-sign -Werror=pointer-arith \
135-                -Wall -Wno-missing-braces
136-
137-ifeq ($(shell uname),NetBSD)
138-    # Needed for mkostemp
139-    FINAL_CPPFLAGS += -D_NETBSD_SOURCE
140-endif
141-
142-ifeq ($(shell uname),Linux)
143-    FINAL_CPPFLAGS += -D_POSIX_C_SOURCE=200809L
144-endif
145-
146-ifeq ($(ENABLE_DEBUG),1)
147-    FINAL_CPPFLAGS += -DENABLE_DEBUG=1
148-    FINAL_CFLAGS += -g
149-else
150-    FINAL_CPPFLAGS += -DNDEBUG
151-endif
152-
153-ifeq ($(ENABLE_STATIC),1)
154-    TARGETS += libwld.a
155-    CLEAN_FILES += $(WLD_STATIC_OBJECTS)
156-endif
157-
158-ifeq ($(ENABLE_SHARED),1)
159-    TARGETS += $(WLD_LIB) $(WLD_LIB_LINK) $(WLD_LIB_SONAME)
160-    CLEAN_FILES += $(WLD_SHARED_OBJECTS)
161-endif
162-
163-CLEAN_FILES += $(TARGETS)
164-
165-compile     = $(call quiet,CC) $(FINAL_CPPFLAGS) $(FINAL_CFLAGS) -c -o $@ $< \
166-              -MMD -MP -MF .deps/$(basename $<).d -MT $(basename $@).o -MT $(basename $@).lo
167-link        = $(call quiet,CCLD,$(CC)) $(LDFLAGS) -o $@ $^
168-pkgconfig   = $(sort $(foreach pkg,$(1),$(if $($(pkg)_$(3)),$($(pkg)_$(3)), \
169-                                           $(shell $(PKG_CONFIG) --$(2) $(pkg)))))
170 
171-.PHONY: all
172-all: $(TARGETS)
173-
174-include $(foreach dir,intel protocol,$(dir)/local.mk)
175+WLD_HEADERS=wld.h
176+
177+.if ${ENABLE_DRM} == 1
178+WLD_REQUIRES_PRIVATE+=libdrm
179+WLD_SOURCES+=drm.c dumb.c
180+WLD_HEADERS+=drm.h
181+
182+.if !empty(DRM_DRIVERS:Mintel)
183+WLD_REQUIRES_PRIVATE+=libdrm_intel
184+WLD_SOURCES+=intel.c intel/batch.c
185+WLD_CPPFLAGS+=-DWITH_DRM_INTEL=1
186+.endif
187+
188+.if !empty(DRM_DRIVERS:Mnouveau)
189+WLD_REQUIRES_PRIVATE+=libdrm_nouveau
190+WLD_SOURCES+=nouveau.c
191+WLD_CPPFLAGS+=-DWITH_DRM_NOUVEAU=1
192+.endif
193+.endif
194+
195+.if ${ENABLE_PIXMAN} == 1
196+WLD_SOURCES+=pixman.c
197+WLD_HEADERS+=pixman.h
198+.endif
199+
200+.if ${ENABLE_WAYLAND} == 1
201+WLD_REQUIRES_PRIVATE+=wayland-client
202+WLD_SOURCES+=wayland.c
203+WLD_HEADERS+=wayland.h
204+
205+.if !empty(WAYLAND_INTERFACES:Mshm)
206+WLD_SOURCES+=wayland-shm.c
207+WLD_CPPFLAGS+=-DWITH_WAYLAND_SHM=1
208+.endif
209+
210+.if !empty(WAYLAND_INTERFACES:Mdrm)
211+WLD_SOURCES+=wayland-drm.c protocol/wayland-drm-protocol.c
212+WLD_CPPFLAGS+=-DWITH_WAYLAND_DRM=1
213+WAYLAND_DRM_XML=protocol/wayland-drm.xml
214+.endif
215+.endif
216+
217+WLD_PACKAGES=${WLD_REQUIRES} ${WLD_REQUIRES_PRIVATE}
218+WLD_PKG_CFLAGS!=${PKG_CONFIG} --cflags ${WLD_PACKAGES}
219+WLD_PKG_LIBS!=${PKG_CONFIG} --libs ${WLD_PACKAGES}
220+
221+.if ${.MAKE.OS} == "OpenBSD"
222+WLD_PKG_LIBS+=-lc
223+.endif
224+
225+CPPFLAGS+=${WLD_PKG_CFLAGS} ${WLD_CPPFLAGS}
226+
227+CFLAGS+=-fvisibility=hidden -std=c99 -Wvla
228+CFLAGS+=-Wall -Werror=implicit-function-declaration \
229+        -Werror=implicit-int -Werror=pointer-sign \
230+        -Werror=pointer-arith
231+
232+.if ${.MAKE.OS} == "NetBSD"
233+CPPFLAGS+=-D_NETBSD_SOURCE
234+.endif
235+
236+.if ${.MAKE.OS} == "Linux"
237+CPPFLAGS+=-D_POSIX_C_SOURCE=200809L
238+.endif
239+
240+.if ${ENABLE_DEBUG} == 1
241+CPPFLAGS+=-DENABLE_DEBUG=1
242+CFLAGS+=-g
243+.else
244+CPPFLAGS+=-DNDEBUG
245+.endif
246+
247+STATIC_OBJECTS=${WLD_SOURCES:R:S/$/.o/g}
248+SHARED_OBJECTS=${WLD_SOURCES:R:S/$/.lo/g}
249+
250+DEPFLAGS=-MMD -MP -MF .deps/${.TARGET:T:R}.d
251+
252+.SUFFIXES: .c .o .lo
253 
254 .deps:
255-	@mkdir "$@"
256+	@mkdir -p $@
257 
258-%.o: %.c | .deps
259-	$(compile) $(WLD_CPPFLAGS) $(WLD_PACKAGE_CFLAGS)
260+.c.o: .deps
261+	@echo "  CC  $@"
262+	@${CC} ${CPPFLAGS} ${CFLAGS} ${DEPFLAGS} -c $< -o $@
263 
264-%.lo: %.c | .deps
265-	$(compile) $(WLD_CPPFLAGS) $(WLD_PACKAGE_CFLAGS) -fPIC
266+.c.lo: .deps
267+	@echo "  CC  $@"
268+	@${CC} ${CPPFLAGS} ${CFLAGS} -fPIC ${DEPFLAGS} -c $< -o $@
269 
270-wayland-drm.o wayland-drm.lo: protocol/wayland-drm-client-protocol.h
271+.if defined(WAYLAND_DRM_XML)
272+protocol/wayland-drm-protocol.c: ${WAYLAND_DRM_XML}
273+	@echo "  GEN $@"
274+	@${WAYLAND_SCANNER:Uwayland-scanner} private-code ${.ALLSRC} $@
275 
276-wld.pc: wld.pc.in
277-	$(call quiet,GEN,sed)                                       \
278-	    -e "s:@VERSION@:$(VERSION):"                            \
279-	    -e "s:@PREFIX@:$(PREFIX):"                              \
280-	    -e "s:@LIBDIR@:$(LIBDIR):"                              \
281-	    -e "s:@INCLUDEDIR@:$(INCLUDEDIR):"                      \
282-	    -e "s:@WLD_REQUIRES@:$(WLD_REQUIRES):"                  \
283-	    -e "s:@WLD_REQUIRES_PRIVATE@:$(WLD_REQUIRES_PRIVATE):"  \
284-	    $< > $@
285+protocol/wayland-drm-client-protocol.h: ${WAYLAND_DRM_XML}
286+	@echo "  GEN $@"
287+	@${WAYLAND_SCANNER:Uwayland-scanner} client-header ${.ALLSRC} $@
288+
289+wayland-drm.o wayland-drm.lo: protocol/wayland-drm-client-protocol.h
290+.endif
291 
292-libwld.a: $(WLD_STATIC_OBJECTS)
293-	$(call quiet,AR) cr $@ $^
294+.if ${ENABLE_STATIC} == 1
295+libwld.a: ${STATIC_OBJECTS}
296+	@echo "  AR  $@"
297+	@${AR} rc $@ ${.ALLSRC}
298+	@ranlib $@
299+.endif
300 
301-$(WLD_LIB): $(WLD_SHARED_OBJECTS)
302-	$(link) $(WLD_PACKAGE_LIBS) -shared -Wl,-soname,$(WLD_LIB_SONAME),-no-undefined
303+.if ${ENABLE_SHARED} == 1
304+${WLD_LIB}: ${SHARED_OBJECTS}
305+	@echo "  LINK $@"
306+	@${CC} -shared -Wl,-soname,${WLD_LIB_SONAME} \
307+	    -o $@ ${.ALLSRC} ${WLD_PKG_LIBS}
308 
309-$(WLD_LIB_SONAME) $(WLD_LIB_LINK): $(WLD_LIB)
310-	$(call quiet,SYM,ln -sf) $< $@
311+${WLD_LIB_SONAME}: ${WLD_LIB}
312+	ln -sf ${WLD_LIB} $@
313 
314-$(foreach dir,LIB PKGCONFIG,$(DESTDIR)$($(dir)DIR)) $(DESTDIR)$(INCLUDEDIR)/wld:
315-	mkdir -p $@
316+${WLD_LIB_LINK}: ${WLD_LIB_SONAME}
317+	ln -sf ${WLD_LIB_SONAME} $@
318+.endif
319 
320-.PHONY: install-wld.pc
321-install-wld.pc: wld.pc | $(DESTDIR)$(PKGCONFIGDIR)
322-	install -m 644 $< $(DESTDIR)$(PKGCONFIGDIR)
323+wld.pc: wld.pc.in
324+	@echo "  GEN $@"
325+	@sed -e "s:@VERSION@:${VERSION}:" \
326+	     -e "s:@PREFIX@:${PREFIX}:" \
327+	     -e "s:@LIBDIR@:${LIBDIR}:" \
328+	     -e "s:@INCLUDEDIR@:${INCLUDEDIR}:" \
329+	     -e "s:@WLD_REQUIRES@:${WLD_REQUIRES}:" \
330+	     -e "s:@WLD_REQUIRES_PRIVATE@:${WLD_REQUIRES_PRIVATE}:" \
331+	     ${.ALLSRC} > $@
332+
333+.MAIN: all
334+.PHONY: all
335+all: wld.pc
336+.if ${ENABLE_STATIC} == 1
337+all: libwld.a
338+.endif
339+.if ${ENABLE_SHARED} == 1
340+all: ${WLD_LIB} ${WLD_LIB_SONAME} ${WLD_LIB_LINK}
341+.endif
342 
343-.PHONY: install-libwld.a
344-install-libwld.a: libwld.a | $(DESTDIR)$(LIBDIR)
345-	install -m 644 $< $(DESTDIR)$(LIBDIR)
346+.PHONY: install
347+install: all
348+	${INSTALL} -d ${DESTDIR}${LIBDIR}
349+	${INSTALL} -d ${DESTDIR}${INCLUDEDIR}/wld
350+	${INSTALL} -d ${DESTDIR}${PKGCONFIGDIR}
351 
352-.PHONY: install-$(WLD_LIB)
353-install-$(WLD_LIB): $(WLD_LIB) | $(DESTDIR)$(LIBDIR)
354-	install -m 755 $< $(DESTDIR)$(LIBDIR)
355+	${INSTALL} -m644 wld.pc ${DESTDIR}${PKGCONFIGDIR}
356+	${INSTALL} -m644 ${WLD_HEADERS} ${DESTDIR}${INCLUDEDIR}/wld
357 
358-.PHONY: install-$(WLD_LIB_LINK) install-$(WLD_LIB_SONAME)
359-install-$(WLD_LIB_LINK) install-$(WLD_LIB_SONAME): install-$(WLD_LIB) | $(DESTDIR)$(LIBDIR)
360-	ln -sf $(WLD_LIB) $(DESTDIR)$(LIBDIR)/${@:install-%=%}
361+.if ${ENABLE_STATIC} == 1
362+	${INSTALL} -m644 libwld.a ${DESTDIR}${LIBDIR}
363+.endif
364 
365-.PHONY: install
366-install: $(TARGETS:%=install-%) | $(foreach dir,LIB PKGCONFIG,$(DESTDIR)$($(dir)DIR)) $(DESTDIR)$(INCLUDEDIR)/wld
367-	install -m 644 $(WLD_HEADERS) $(DESTDIR)$(INCLUDEDIR)/wld
368+.if ${ENABLE_SHARED} == 1
369+	${INSTALL} -m755 ${WLD_LIB} ${DESTDIR}${LIBDIR}
370+	cd ${DESTDIR}${LIBDIR} && ln -sf ${WLD_LIB} ${WLD_LIB_SONAME}
371+	cd ${DESTDIR}${LIBDIR} && ln -sf ${WLD_LIB_SONAME} ${WLD_LIB_LINK}
372+.endif
373 
374 .PHONY: clean
375 clean:
376-	rm -rf $(CLEAN_FILES)
377+	rm -f ${STATIC_OBJECTS} ${SHARED_OBJECTS} \
378+	    libwld.a ${WLD_LIB} ${WLD_LIB_LINK} \
379+	    ${WLD_LIB_SONAME} wld.pc
380+	rm -rf .deps protocol/wayland-drm-protocol.c \
381+	    protocol/wayland-drm-client-protocol.h
382 
383--include .deps/*.d
384+.sinclude ".deps/*.d"
+14, -15
 1@@ -1,20 +1,19 @@
 2-# wld: config.mk
 3+# wld: config.mk (BSD make)
 4 
 5-CC                  = gcc
 6-CFLAGS              = -pipe
 7+CC=gcc
 8+CFLAGS=-pipe
 9 
10-ENABLE_DEBUG        = 1
11-ENABLE_STATIC       = 1
12-ENABLE_SHARED       = 1
13+ENABLE_DEBUG=1
14+ENABLE_STATIC=1
15+ENABLE_SHARED=1
16 
17-ENABLE_PIXMAN       = 1
18-ENABLE_DRM          = 1
19-ENABLE_WAYLAND      = 1
20+ENABLE_PIXMAN=1
21+ENABLE_DRM=1
22+ENABLE_WAYLAND=1
23 
24-DRM_DRIVERS         = intel nouveau
25-WAYLAND_INTERFACES  = shm
26-
27-ifeq ($(ENABLE_DRM),1)
28-    WAYLAND_INTERFACES += drm
29-endif
30+DRM_DRIVERS=intel nouveau
31+WAYLAND_INTERFACES=shm
32 
33+.if ${ENABLE_DRM} == 1
34+WAYLAND_INTERFACES+= drm
35+.endif