EXTERNALS = $(shell ls *.c)
CPPEXTERNALS = $(shell ls *.cpp)

STRIP = strip --strip-unneeded -R .note -R .comment

all: $(EXTERNALS:.c=.pd_linux) $(CPPEXTERNALS:.cpp=.pd_linux)

# this might be a better way to do this:
# EXTERNALS    := ${patsubst %.c, %.o, ${wildcard *.c}} 
# all: ${EXTERNALS}

.SUFFIXES: .pd_linux

STK = $(shell ls -d stk*/)

CFLAGS = -I$(STK)include

# cross-platform default
CPU_FLAGS = -O2
OPTIM_FLAGS = -funroll-loops -fomit-frame-pointer $(CPU_FLAGS)

FLAGS = -fPIC -DPD -DUNIX $(OPTIM_FLAGS)  \
    -Wall -W -Wshadow -Wstrict-prototypes  \
    -Wno-unused -Wno-parentheses -Wno-switch $(CFLAGS)

INCLUDES = -I. -I.. -I../../build/include

%.pd_linux: %.c
	$(CC) $(FLAGS) $(INCLUDES) -o "$*.o" -c "$+"
	gcc -Wl,-export_dynamic  -shared -o "$@" "$*.o" -lc -lm
	chmod a-x "$@"
	$(STRIP) $@
	rm -f "$*.o" 

%.pd_linux: %.cpp
	$(CXX) $(FLAGS) $(INCLUDES) -o "$*.o" -c "$+"
	$(CXX) -Wl,-export_dynamic  -shared -o "$@" "$*.o" -lc -lm $(STK)src/libstk.a
	chmod a-x "$@"
	$(STRIP) $@
	rm -f "$*.o" 

clean:
	-rm *.pd_linux *~ *.o
	-rm link.stamp