From 8180297a0d95b66fe81af9fa4cfeae9e87051f44 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sat, 8 Feb 2020 14:25:06 +0000 Subject: [PATCH] Modernize makefile: separate build dirs, single rule source Signed-off-by: falkTX --- .gitignore | 4 +- Makefile | 136 +++++++------------------------------- Makefile64 => Makefile.mk | 94 +++++++++++--------------- 3 files changed, 64 insertions(+), 170 deletions(-) rename Makefile64 => Makefile.mk (55%) diff --git a/.gitignore b/.gitignore index fe11502..c14dee1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *~ *.o *.so -__pycache__ +build32/ +build64/ +__pycache__/ diff --git a/Makefile b/Makefile index d643141..270d026 100644 --- a/Makefile +++ b/Makefile @@ -1,122 +1,32 @@ -### Generated by Winemaker +#!/usr/bin/make -f +# Makefile for WineASIO # +# --------------------- # +# Created by falkTX +# -PREFIX = /usr -SRCDIR = . -SUBDIRS = -DLLS = wineasio.dll -EXES = +all: +# $(info usage: ${0} 32|64) +# --------------------------------------------------------------------------------------------------------------------- +32: + $(MAKE) ARCH=i386 M=32 -### Common settings +64: + $(MAKE) ARCH=x86_64 M=64 -CEXTRA = -m32 -D_REENTRANT -fPIC -Wall -pipe -CEXTRA += -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith -CEXTRA += -Werror=implicit-function-declaration -CEXTRA += $(shell pkg-config --cflags jack) -RCEXTRA = -INCLUDE_PATH = -I. -Irtaudio/include -INCLUDE_PATH += -I$(PREFIX)/include/wine -INCLUDE_PATH += -I$(PREFIX)/include/wine/windows -INCLUDE_PATH += -I$(PREFIX)/include/wine-development -INCLUDE_PATH += -I$(PREFIX)/include/wine-development/wine/windows -DLL_PATH = -LIBRARY_PATH = -LIBRARIES = -ljack +# --------------------------------------------------------------------------------------------------------------------- -ifeq ($(DEBUG),true) -CEXTRA += -O0 -DDEBUG -g -D__WINESRC__ -LIBRARIES += -else -CEXTRA += -O2 -DNDEBUG -fvisibility=hidden -endif - -### wineasio.dll sources and settings - -wineasio_dll_MODULE = wineasio.dll -wineasio_dll_C_SRCS = asio.c \ - main.c \ - regsvr.c -wineasio_dll_RC_SRCS = -wineasio_dll_LDFLAGS = -shared \ - -m32 \ - -mnocygwin \ - $(wineasio_dll_MODULE:%=%.spec) \ - -L/usr/lib32/wine \ - -L/usr/lib/i386-linux-gnu/wine \ - -L/usr/lib/i386-linux-gnu/wine-development \ - -L/opt/wine-staging/lib \ - -L/opt/wine-staging/lib/wine -wineasio_dll_DLL_PATH = -wineasio_dll_DLLS = odbc32 \ - ole32 \ - winmm -wineasio_dll_LIBRARY_PATH= -wineasio_dll_LIBRARIES= uuid - -wineasio_dll_OBJS = $(wineasio_dll_C_SRCS:.c=.o) \ - $(wineasio_dll_RC_SRCS:.rc=.res) - - - -### Global source lists - -C_SRCS = $(wineasio_dll_C_SRCS) -RC_SRCS = $(wineasio_dll_RC_SRCS) - - -### Tools - -CC = gcc -WINECC = winegcc -RC = wrc - - -### Generic targets - -all: rtaudio/include/asio.h $(SUBDIRS) $(DLLS:%=%.so) $(EXES:%=%.so) - -### Build rules +clean:: + rm -f *.o *.so + rm -rf build32 build64 -.PHONY: all clean dummy +# --------------------------------------------------------------------------------------------------------------------- -$(SUBDIRS): dummy - @cd $@ && $(MAKE) - -# Implicit rules - -.SUFFIXES: .cpp .rc .res -DEFINCL = $(INCLUDE_PATH) $(DEFINES) $(OPTIONS) - -.c.o: - $(CC) -c $(DEFINCL) $(CFLAGS) $(CEXTRA) -o $@ $< - -.rc.res: - $(RC) $(RCFLAGS) $(RCEXTRA) $(DEFINCL) -fo$@ $< - -# Rules for cleaning - -CLEAN_FILES = y.tab.c y.tab.h lex.yy.c core *.orig *.rej \ - \\\#*\\\# *~ *% .\\\#* - -clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__) - $(RM) $(CLEAN_FILES) $(RC_SRCS:.rc=.res) $(C_SRCS:.c=.o) - $(RM) $(DLLS:%=%.so) $(EXES:%=%.so) $(EXES:%.exe=%) - -$(SUBDIRS:%=%/__clean__): dummy - cd `dirname $@` && $(MAKE) clean - -$(EXTRASUBDIRS:%=%/__clean__): dummy - -cd `dirname $@` && $(RM) $(CLEAN_FILES) - -distclean:: clean - $(RM) asio.h - -### Target specific build rules -DEFLIB = $(LIBRARY_PATH) $(LIBRARIES) $(DLL_PATH) - -$(wineasio_dll_MODULE).so: $(wineasio_dll_OBJS) - $(WINECC) $(wineasio_dll_LDFLAGS) -o $@ $(wineasio_dll_OBJS) $(wineasio_dll_LIBRARY_PATH) $(DEFLIB) $(wineasio_dll_DLLS:%=-l%) $(wineasio_dll_LIBRARIES:%=-l%) +ifneq ($(ARCH),) +ifneq ($(M),) +include Makefile.mk +endif +endif -install: - if [ -d $(PREFIX)/lib32/wine ]; then cp wineasio.dll.so $(DESTDIR)$(PREFIX)/lib32/wine; else cp wineasio.dll.so $(DESTDIR)$(PREFIX)/lib/wine; fi +# --------------------------------------------------------------------------------------------------------------------- diff --git a/Makefile64 b/Makefile.mk similarity index 55% rename from Makefile64 rename to Makefile.mk index 98f3acd..f854196 100644 --- a/Makefile64 +++ b/Makefile.mk @@ -1,16 +1,29 @@ -### Generated by Winemaker +#!/usr/bin/make -f +# Makefile for WineASIO # +# --------------------- # +# Created by falkTX +# Initially generated by winemaker +# + +ifeq ($(ARCH),) +$(error incorrect use of Makefile, ARCH var is missing) +endif +ifeq ($(M),) +$(error incorrect use of Makefile, M var is missing) +endif PREFIX = /usr SRCDIR = . -SUBDIRS = DLLS = wineasio.dll -EXES = +### Tools +CC = gcc +WINECC = winegcc ### Common settings -CEXTRA = -m64 -DNATIVE_INT64 -D_REENTRANT -fPIC -Wall -pipe +CEXTRA = -m$(M) -D_REENTRANT -fPIC -Wall -pipe CEXTRA += -fno-strict-aliasing -Wdeclaration-after-statement -Wwrite-strings -Wpointer-arith CEXTRA += -Werror=implicit-function-declaration CEXTRA += $(shell pkg-config --cflags jack) @@ -22,8 +35,14 @@ INCLUDE_PATH += -I$(PREFIX)/include/wine-development INCLUDE_PATH += -I$(PREFIX)/include/wine-development/wine/windows DLL_PATH = LIBRARY_PATH = -LIBRARIES = -ljack +LIBRARIES = $(shell pkg-config --libs jack) + +# 64bit build needs an extra flag +ifeq ($(M),64) +CEXTRA += -DNATIVE_INT64 +endif +# Debug or Release ifeq ($(DEBUG),true) CEXTRA += -O0 -DDEBUG -g -D__WINESRC__ LIBRARIES += @@ -37,16 +56,18 @@ wineasio_dll_MODULE = wineasio.dll wineasio_dll_C_SRCS = asio.c \ main.c \ regsvr.c -wineasio_dll_RC_SRCS = wineasio_dll_LDFLAGS = -shared \ - -m64 \ + -m$(M) \ -mnocygwin \ $(wineasio_dll_MODULE:%=%.spec) \ - -L/usr/lib64/wine \ - -L/usr/lib/x86_64-linux-gnu/wine \ - -L/usr/lib/x86_64-linux-gnu/wine-development \ + -L/usr/lib/wine \ + -L/usr/lib$(M)/wine \ + -L/usr/lib/$(ARCH)-linux-gnu/wine \ + -L/usr/lib/$(ARCH)-linux-gnu/wine-development \ -L/opt/wine-staging/lib \ - -L/opt/wine-staging/lib/wine + -L/opt/wine-staging/lib/wine \ + -L/opt/wine-staging/lib$(M) \ + -L/opt/wine-staging/lib$(M)/wine wineasio_dll_DLL_PATH = wineasio_dll_DLLS = odbc32 \ ole32 \ @@ -54,69 +75,30 @@ wineasio_dll_DLLS = odbc32 \ wineasio_dll_LIBRARY_PATH= wineasio_dll_LIBRARIES= uuid -wineasio_dll_OBJS = $(wineasio_dll_C_SRCS:.c=.o) \ - $(wineasio_dll_RC_SRCS:.rc=.res) - - +wineasio_dll_OBJS = $(wineasio_dll_C_SRCS:%.c=build$(M)/%.c.o) ### Global source lists C_SRCS = $(wineasio_dll_C_SRCS) -RC_SRCS = $(wineasio_dll_RC_SRCS) - - -### Tools - -CC = gcc -WINECC = winegcc -RC = wrc - ### Generic targets -all: rtaudio/include/asio.h $(SUBDIRS) $(DLLS:%=%.so) $(EXES:%=%.so) +all: rtaudio/include/asio.h $(DLLS:%=build$(M)/%.so) ### Build rules -.PHONY: all clean dummy - -$(SUBDIRS): dummy - @cd $@ && $(MAKE) +.PHONY: all # Implicit rules -.SUFFIXES: .cpp .rc .res DEFINCL = $(INCLUDE_PATH) $(DEFINES) $(OPTIONS) -.c.o: +build$(M)/%.c.o: %.c + @$(shell mkdir -p build$(M)) $(CC) -c $(DEFINCL) $(CFLAGS) $(CEXTRA) -o $@ $< -.rc.res: - $(RC) $(RCFLAGS) $(RCEXTRA) $(DEFINCL) -fo$@ $< - -# Rules for cleaning - -CLEAN_FILES = y.tab.c y.tab.h lex.yy.c core *.orig *.rej \ - \\\#*\\\# *~ *% .\\\#* - -clean:: $(SUBDIRS:%=%/__clean__) $(EXTRASUBDIRS:%=%/__clean__) - $(RM) $(CLEAN_FILES) $(RC_SRCS:.rc=.res) $(C_SRCS:.c=.o) - $(RM) $(DLLS:%=%.so) $(EXES:%=%.so) $(EXES:%.exe=%) - -$(SUBDIRS:%=%/__clean__): dummy - cd `dirname $@` && $(MAKE) clean - -$(EXTRASUBDIRS:%=%/__clean__): dummy - -cd `dirname $@` && $(RM) $(CLEAN_FILES) - -distclean:: clean - $(RM) asio.h - ### Target specific build rules DEFLIB = $(LIBRARY_PATH) $(LIBRARIES) $(DLL_PATH) -$(wineasio_dll_MODULE).so: $(wineasio_dll_OBJS) +build$(M)/$(wineasio_dll_MODULE).so: $(wineasio_dll_OBJS) $(WINECC) $(wineasio_dll_LDFLAGS) -o $@ $(wineasio_dll_OBJS) $(wineasio_dll_LIBRARY_PATH) $(DEFLIB) $(wineasio_dll_DLLS:%=-l%) $(wineasio_dll_LIBRARIES:%=-l%) - -install: - if [ -d $(PREFIX)/lib/wine ]; then cp wineasio.dll.so $(DESTDIR)$(PREFIX)/lib/wine; else cp wineasio.dll.so $(DESTDIR)$(PREFIX)/lib/wine; fi