2009-09-23 16:00:04 +02:00

170 lines
2.8 KiB
Makefile

CC=gcc
ifdef DEBUG
# I think we only use gnu99 instead of c99 due to va_args extensions.
CFLAGS=-I. -Wall -W -pg -g -pedantic -ansi -DDEBUG
else
CFLAGS=-I. -Wall -W -O6 -funroll-loops -fexpensive-optimizations
endif
ifndef DJGPP
# uname is not available by default under DOS
OSTYPE=$(shell uname -s)
else
OSTYPE=DJGPP
endif
GCC_WIN=0
ifeq ($(findstring MINGW,$(OSTYPE)),MINGW)
GCC_WIN=1
endif
ifeq ($(findstring CYGWIN,$(OSTYPE)),CYGWIN)
GCC_WIN=1
endif
ifdef DJGPP
LDFLAGS=
else
ifeq ($(findstring BeOS,$(OSTYPE)),BeOS)
LDFLAGS=-nostart
else # Unix or Win GCC
LDFLAGS=-shared
endif
endif
ifeq ($(findstring DJGPP,$(OSTYPE)),)
ifneq ($(GCC_WIN),1)
CFLAGS+=-fPIC
else
# Cygwin and MinGW need an import library for a DLL
LDFLAGS+=-Wl,--out-implib,libcd64dll.a
endif
endif
# The next check is not really specific to FreeBSD or OpenBSD -- the version of
# gcc I use is just old.
ifeq ($(findstring FreeBSD,$(OSTYPE)),)
ifeq ($(findstring OpenBSD,$(OSTYPE)),)
CFLAGS+=-std=gnu99
endif
endif
DEFAULT_BUILD=1
# If the user passed anything, we are not a default build.
ifdef LIBIEEE1284
DEFAULT_BUILD=0
else
ifdef PPDEV
DEFAULT_BUILD=0
else
ifdef PORTDEV
DEFAULT_BUILD=0
else
ifdef RAWIO
DEFAULT_BUILD=0
endif
endif
endif
endif
ifeq ($(DEFAULT_BUILD),1)
# Put default build options for each OS here
ifeq ($(findstring DJGPP,$(OSTYPE)),DJGPP)
RAWIO=1
endif
ifeq ($(findstring MINGW,$(OSTYPE)),MINGW)
RAWIO=1
endif
ifeq ($(findstring CYGWIN,$(OSTYPE)),CYGWIN)
RAWIO=1
endif
ifeq ($(findstring BeOS,$(OSTYPE)),BeOS)
RAWIO=1
endif
ifeq ($(findstring OpenBSD,$(OSTYPE)),OpenBSD)
# i386_iopl() is located in libi386.a (note the .a)
LIBS+=-L/usr/lib -li386
RAWIO=1
endif
ifeq ($(findstring FreeBSD,$(OSTYPE)),FreeBSD)
RAWIO=1
endif
ifeq ($(findstring Linux,$(OSTYPE)),Linux)
ifeq ($(shell if test -r /usr/include/ieee1284.h; then echo 1; else echo 0; fi),1)
LIBIEEE1284=1
endif
ifeq ($(shell if test -r /usr/include/linux/ppdev.h; then echo 1; else echo 0; fi),1)
PPDEV=1
endif
PORTDEV=1
RAWIO=1
endif
endif # DEFAULT_BUILD = 1
# Now for backend-specific defs
ifdef LIBIEEE1284
CFLAGS+=-DCD64_USE_LIBIEEE1284
LIBS+=-lieee1284
endif
ifdef PPDEV
CFLAGS+=-DCD64_USE_PPDEV
endif
ifdef PORTDEV
CFLAGS+=-DCD64_USE_PORTDEV
endif
ifdef RAWIO
CFLAGS+=-DCD64_USE_RAWIO
endif
default: all
ifeq ($(findstring DJGPP,$(OSTYPE)),DJGPP)
all: libcd64.a
else
ifeq ($(GCC_WIN),1)
all: libcd64.a cd64.dll
else
all: libcd64.a libcd64.so
endif # GCC_WIN
endif # DJGPP
# libcd64 stuff
cd64io.o: cd64io.c
$(CC) $(CFLAGS) $^ -c -o $@
cd64lib.o: cd64lib.c
$(CC) $(CFLAGS) $^ -c -o $@
libcd64.a: cd64lib.o cd64io.o
ld -r $^ $(LIBS) -o $*.o
# rm -f $@
ar crs $@ $*.o
LDFLAGS+=$(LIBS)
ifeq ($(GCC_WIN),1)
cd64.dll: cd64lib.o cd64io.o
else
libcd64.so: cd64lib.o cd64io.o
endif
# rm -f $@
$(CC) $^ $(LDFLAGS) -o $@
clean:
rm -f *.o *.so *.dll *.a a.out