
linux: forcedosc.rk_x86_64 bentbob.rk_x86_64 lorenz.rk_x86_64 \
        forcedosc.rk_i386 bentbob.rk_i386 lorenz.rk_i386

mac: forcedosc.rk_mac bentbob.rk_mac lorenz.rk_mac

pc: forcedosc.rk_dll bentbob.rk_dll lorenz.rk_dll

.SUFFIXES: .rk_x86_64 .rk_i386 .rk_arm_so .rk_mac .rk_dll

LINUXCFLAGS = -DPD -O2 -funroll-loops -fomit-frame-pointer \
    -Wall -W -Wshadow -Wstrict-prototypes \
    -Wno-unused -Wno-unused-parameter -Wno-parentheses -Wno-switch $(CFLAGS)

.c.rk_x86_64:
	$(CC) $(LINUXCFLAGS) -shared -o $@ $(@:.rk_x86_64=.c) -lc -lm
	strip --strip-unneeded $@

.c.rk_i386:
	$(CC) $(LINUXCFLAGS) -shared -m32 -o $@ $(@:.rk_i386=.c) -lc -lm
	strip --strip-unneeded $@

DARWINCFLAGS = -DPD -O2 -Wall -W -Wshadow -Wstrict-prototypes \
    -Wno-unused -Wno-parentheses -Wno-switch

.c.rk_mac:
	$(CC) -arch i386 -arch x86_64 $(DARWINCFLAGS) -bundle -undefined suppress \
                -flat_namespace -o $@  $(@:.rk_mac=.c)


MSCC = cl
MSLN = link
VC = "C:\\Program Files\\Microsoft Visual Studio 9.0\\VC"
VSTK = "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A"

PDNTLDIR = $(VC)\\lib
PDNTLIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
        /NODEFAULTLIB:uuid \
	$(PDNTLDIR)\\libcmt.lib $(PDNTLDIR)\\oldnames.lib \
        $(VSTK)\\lib\\kernel32.lib $(VSTK)\\lib\\uuid.lib
PDNTINCLUDE = /I. /I..\\..\\src /I$(VC)\\include /I$(VSTK)\\include \
    /I..\\..\\..\\..\\pd\\src
PDNTCFLAGS = /W3 /WX /DMSW /DPD /nologo -D_CRT_SECURE_NO_WARNINGS \
    -D_CRT_NONSTDC_NO_DEPRECATE

.c.rk_dll:
	$(MSCC) $(PDNTCFLAGS) $(PDNTINCLUDE) /c $(@:.rk_dll=.c)
	$(MSLN) /nologo /dll \
                /export:rungekutte_derivative \
                /export:rungekutte_nstate \
                /export:rungekutte_nparam \
                /out:$@ $(@:.rk_dll=.obj) $(PDNTLIB)

pc-clean: ; rm *.exp *.lib *.obj

