aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile112
1 files changed, 102 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index 2b8688b..39cf5a6 100644
--- a/Makefile
+++ b/Makefile
@@ -1,17 +1,109 @@
-TARGET := $(shell pwd | sed 's|.*/\(.*\)$$|\1|')
-EXTERNALS_ROOT := $(shell pwd | sed 's|^\(/.*externals\).*|\1|')
+# to use this Makefile for your project, you should only need to add your
+# source files to the SOURCES variable. For objects that only build on
+# certain platforms, add those to the SOURCES line for the right platforms.
-default:
- make -C $(EXTERNALS_ROOT) $(TARGET)
+SOURCES =
+
+LIBRARY_NAME := $(shell basename `pwd`)
+
+pd_src = ../../pd
+objectsdir = $(pd_src)/extra
+
+CFLAGS = -DPD -I$(pd_src)/src -Wall -W -g
+LDFLAGS =
+LIBS =
+
+UNAME := $(shell uname -s)
+ifeq ($(UNAME),Darwin)
+ SOURCES += ambient_light_sensor.c iodisplay.c keyboard_light.c sudden_motion_sensor.c
+ EXTENSION = pd_darwin
+ OS = macosx
+ OPT_CFLAGS = -fast
+ FAT_FLAGS = -arch i386 -arch ppc -mmacosx-version-min=10.4
+ CFLAGS += -fPIC $(FAT_FLAGS)
+ LDFLAGS += -bundle -undefined dynamic_lookup $(FAT_FLAGS) -framework IOKit
+ LIBS += -lc
+ STRIP = strip -x
+ endif
+ifeq ($(UNAME),Linux)
+ SOURCES +=
+ EXTENSION = pd_linux
+ OS = linux
+ OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
+ CFLAGS += -fPIC
+ LDFLAGS += -Wl,--export-dynamic -shared -fPIC
+ LIBS += -lc
+ STRIP = strip --strip-unneeded -R .note -R .comment
+endif
+ifeq (MINGW,$(findstring MINGW,$(UNAME)))
+ SOURCES +=
+ EXTENSION = dll
+ OS = windows
+ OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer -march=i686 -mtune=pentium4
+ WINDOWS_HACKS = -D'O_NONBLOCK=1'
+ CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
+ LDFLAGS += -s -shared -Wl,--enable-auto-import
+ LIBS += -L$(pd_src)/bin -L$(pd_src)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
+ STRIP = strip --strip-unneeded -R .note -R .comment
+endif
+
+CFLAGS += $(OPT_CFLAGS)
+
+
+.PHONY = all install libdir_install single_install install-doc install-exec clean dist etags
+
+all: $(SOURCES:.c=.$(EXTENSION))
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
+
+%.$(EXTENSION): %.o
+ $(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(LIBS)
+ chmod a-x "$*.$(EXTENSION)"
+ $(STRIP) $*.$(EXTENSION)
+ rm -f -- $*.o
+
+# this links everything into a single binary file
+$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
+ $(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
+ chmod a-x $(LIBRARY_NAME).$(EXTENSION)
+ $(STRIP) $(LIBRARY_NAME).$(EXTENSION)
+ rm -f -- $*.o
+
+
+install: libdir_install
+
+# The meta and help files are explicitly installed to make sure they are
+# actually there. Those files are not optional, then need to be there.
+libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-exec
+ install -d $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(LIBRARY_NAME)-meta.pd $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(SOURCES:.c=.$(EXTENSION)) $(objectsdir)/$(LIBRARY_NAME)
+
+# install library linked as single binary
+single_install: $(LIBRARY_NAME) install-doc install-exec
+ install -d $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(LIBRARY_NAME).$(EXTENSION) $(objectsdir)/$(LIBRARY_NAME)
+
+install-doc:
+ install -d $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(SOURCES:.c=-help.pd) $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(wildcard *.pd) $(objectsdir)/$(LIBRARY_NAME)
+
+install-exec:
+ install -d $(objectsdir)/$(LIBRARY_NAME)
+ install -m644 -p $(wildcard *.pd) $(objectsdir)/$(LIBRARY_NAME)
-install:
- make -C $(EXTERNALS_ROOT) $(TARGET)_install
clean:
- make -C $(EXTERNALS_ROOT) $(TARGET)_clean
+ -rm -f -- $(SOURCES:.c=.o)
+ -rm -f -- $(SOURCES:.c=.$(EXTENSION))
+ -rm -f -- $(LIBRARY_NAME).$(EXTENSION)
+
+
+dist:
+ cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-test_locations:
- make -C $(EXTERNALS_ROOT) test_locations
etags:
- etags *.[ch] ~/code/pure-data/trunk/pd/src/*.[ch] /usr/include/*.h /usr/include/sys/*.h
+ etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h