#!make
#
-PROGRAMS = dcpu16 as-dcpu16
+
+ifeq "$(origin CC)" "default"
+CC = clang
+endif
+ifeq ($(CC),gcc)
+CPPFLAGS += -DWANT_VARIADIC_VOIDP_CAST
+endif
+
+
+PROGRAMS = as-dcpu16 vm-dcpu16
+SOURCES = common.c dcpu16.c as-dcpu16.c vm-dcpu16.c \
+ hw_clock.c hw_keyboard.c hw_lem1802.c hw_spc2000.c
+
+CPPFLAGS += -DDEBUG
CFLAGS = -g -Wall -Wextra -pedantic -std=c99
-LDFLAGS =
+
+UNAME := $(shell uname)
+ifeq ($(UNAME),Darwin)
+CPPFLAGS += -DHAVE_FUNOPEN
+# libpng from system x11, libvncserver from macports
+CPPFLAGS += -I/usr/X11/include -I/opt/local/include
+LDFLAGS += -L/usr/X11/lib -L/opt/local/lib
+endif
+ifeq ($(UNAME),Linux)
+# linux needs _GNU_SOURCE for fopencookie
+# linux needs _XOPEN_SOURCE=600 (provided by _GNU_SOURCE) for getopt and strdup
+CPPFLAGS += -DHAVE_FOPENCOOKIE -D_GNU_SOURCE
+# linux needs librt for clock_gettime
+LDFLAGS += -lrt
+endif
+
+CPPFLAGS += -DHAVE_LIBVNCSERVER -DHAVE_LIBPNG
+LDFLAGS += -lvncserver -lpng -lreadline
all: $(PROGRAMS)
+depend: .depend
+
+.depend: $(SOURCES)
+ @rm -f ./.depend
+ $(CC) $(CFLAGS) -MM $^ >> ./.depend
+
+include .depend
+
-as-dcpu16: as-dcpu16.o
+vm-dcpu16: vm-dcpu16.o dcpu16.o common.o hw_clock.o hw_keyboard.o hw_lem1802.o hw_spc2000.o
-dcpu16: dcpu16.o
+as-dcpu16: as-dcpu16.o dcpu16.o common.o
clean:
- @rm -rf $(PROGRAMS) *.o *.dSYM
+ @rm -rf $(PROGRAMS) *.o *.dSYM .depend
check: $(PROGRAMS)