summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/makefile
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/makefile')
-rw-r--r--trunk/makefile824
1 files changed, 824 insertions, 0 deletions
diff --git a/trunk/makefile b/trunk/makefile
new file mode 100644
index 00000000000..06fa568d22a
--- /dev/null
+++ b/trunk/makefile
@@ -0,0 +1,824 @@
+###########################################################################
+#
+# makefile
+#
+# Core makefile for building MAME and derivatives
+#
+# Copyright (c) Nicola Salmoria and the MAME Team.
+# Visit http://mamedev.org for licensing and usage restrictions.
+#
+###########################################################################
+
+
+
+###########################################################################
+################# BEGIN USER-CONFIGURABLE OPTIONS #####################
+###########################################################################
+
+
+#-------------------------------------------------
+# specify core target: mame, mess, etc.
+# specify subtarget: mame, mess, tiny, etc.
+# build rules will be included from
+# src/$(TARGET)/$(SUBTARGET).mak
+#-------------------------------------------------
+
+ifndef TARGET
+TARGET = mame
+endif
+
+ifndef SUBTARGET
+SUBTARGET = $(TARGET)
+endif
+
+
+
+#-------------------------------------------------
+# specify OSD layer: windows, sdl, etc.
+# build rules will be included from
+# src/osd/$(OSD)/$(OSD).mak
+#-------------------------------------------------
+
+ifndef OSD
+ifeq ($(OS),Windows_NT)
+OSD = windows
+TARGETOS = win32
+else
+OSD = sdl
+endif
+endif
+
+ifndef CROSS_BUILD_OSD
+CROSS_BUILD_OSD = $(OSD)
+endif
+
+
+
+#-------------------------------------------------
+# specify OS target, which further differentiates
+# the underlying OS; supported values are:
+# win32, unix, macosx, os2
+#-------------------------------------------------
+
+ifndef TARGETOS
+
+ifeq ($(OS),Windows_NT)
+TARGETOS = win32
+else
+
+ifneq ($(CROSSBUILD),1)
+
+ifneq ($(OS2_SHELL),)
+TARGETOS = os2
+else
+
+UNAME = $(shell uname -a)
+
+ifeq ($(firstword $(filter Linux,$(UNAME))),Linux)
+TARGETOS = linux
+endif
+ifeq ($(firstword $(filter Solaris,$(UNAME))),Solaris)
+TARGETOS = solaris
+endif
+ifeq ($(firstword $(filter FreeBSD,$(UNAME))),FreeBSD)
+TARGETOS = freebsd
+endif
+ifeq ($(firstword $(filter GNU/kFreeBSD,$(UNAME))),GNU/kFreeBSD)
+TARGETOS = freebsd
+endif
+ifeq ($(firstword $(filter NetBSD,$(UNAME))),NetBSD)
+TARGETOS = netbsd
+endif
+ifeq ($(firstword $(filter OpenBSD,$(UNAME))),OpenBSD)
+TARGETOS = openbsd
+endif
+ifeq ($(firstword $(filter Darwin,$(UNAME))),Darwin)
+TARGETOS = macosx
+endif
+
+ifndef TARGETOS
+$(error Unable to detect TARGETOS from uname -a: $(UNAME))
+endif
+
+# Autodetect PTR64
+ifndef PTR64
+ifeq ($(firstword $(filter x86_64,$(UNAME))),x86_64)
+PTR64 = 1
+endif
+ifeq ($(firstword $(filter amd64,$(UNAME))),amd64)
+PTR64 = 1
+endif
+ifeq ($(firstword $(filter ppc64,$(UNAME))),ppc64)
+PTR64 = 1
+endif
+endif
+
+# Autodetect BIGENDIAN
+# MacOSX
+ifndef BIGENDIAN
+ifneq (,$(findstring Power,$(UNAME)))
+BIGENDIAN=1
+endif
+# Linux
+ifneq (,$(findstring ppc,$(UNAME)))
+BIGENDIAN=1
+endif
+endif # BIGENDIAN
+
+endif # OS/2
+endif # CROSS_BUILD
+endif # Windows_NT
+
+endif # TARGET_OS
+
+
+ifeq ($(TARGETOS),win32)
+
+# Autodetect PTR64
+ifndef PTR64
+ifneq (,$(findstring mingw64-w64,$(PATH)))
+PTR64=1
+endif
+endif
+
+endif
+
+
+
+#-------------------------------------------------
+# configure name of final executable
+#-------------------------------------------------
+
+# uncomment and specify prefix to be added to the name
+# PREFIX =
+
+# uncomment and specify suffix to be added to the name
+# SUFFIX =
+
+
+
+#-------------------------------------------------
+# specify architecture-specific optimizations
+#-------------------------------------------------
+
+# uncomment and specify architecture-specific optimizations here
+# some examples:
+# ARCHOPTS = -march=pentiumpro # optimize for I686
+# ARCHOPTS = -march=core2 # optimize for Core 2
+# ARCHOPTS = -march=native # optimize for local machine (auto detect)
+# ARCHOPTS = -mcpu=G4 # optimize for G4
+# note that we leave this commented by default so that you can
+# configure this in your environment and never have to think about it
+# ARCHOPTS =
+
+
+
+#-------------------------------------------------
+# specify program options; see each option below
+# for details
+#-------------------------------------------------
+
+# uncomment next line to build a debug version
+# DEBUG = 1
+
+# uncomment next line to include the internal profiler
+# PROFILER = 1
+
+# uncomment the force the universal DRC to always use the C backend
+# you may need to do this if your target architecture does not have
+# a native backend
+# FORCE_DRC_C_BACKEND = 1
+
+# uncomment next line to build using unix-style libsdl on Mac OS X
+# (vs. the native framework port). Normal users should not enable this.
+# MACOSX_USE_LIBSDL = 1
+
+
+
+#-------------------------------------------------
+# specify build options; see each option below
+# for details
+#-------------------------------------------------
+
+# uncomment next line if you are building for a 64-bit target
+# PTR64 = 1
+
+# uncomment next line if you are building for a big-endian target
+# BIGENDIAN = 1
+
+# uncomment next line to build expat as part of MAME build
+BUILD_EXPAT = 1
+
+# uncomment next line to build zlib as part of MAME build
+BUILD_ZLIB = 1
+
+# uncomment next line to build libflac as part of MAME build
+BUILD_FLAC = 1
+
+# uncomment next line to build jpeglib as part of MAME build
+BUILD_JPEGLIB = 1
+
+# uncomment next line to include the symbols
+# SYMBOLS = 1
+
+# specify symbols level or leave commented to use the default
+# (default is SYMLEVEL = 2 normally; use 1 if you only need backtrace)
+# SYMLEVEL = 2
+
+# uncomment next line to dump the symbols to a .sym file
+# DUMPSYM = 1
+
+# uncomment next line to include profiling information from the compiler
+# PROFILE = 1
+
+# uncomment next line to generate a link map for exception handling in windows
+# MAP = 1
+
+# uncomment next line to generate verbose build information
+# VERBOSE = 1
+
+# specify optimization level or leave commented to use the default
+# (default is OPTIMIZE = 3 normally, or OPTIMIZE = 0 with symbols)
+# OPTIMIZE = 3
+
+
+###########################################################################
+################## END USER-CONFIGURABLE OPTIONS ######################
+###########################################################################
+
+
+#-------------------------------------------------
+# sanity check the configuration
+#-------------------------------------------------
+
+# specify a default optimization level if none explicitly stated
+ifndef OPTIMIZE
+ifndef SYMBOLS
+OPTIMIZE = 3
+else
+OPTIMIZE = 0
+endif
+endif
+
+# profiler defaults to on for DEBUG builds
+ifdef DEBUG
+ifndef PROFILER
+PROFILER = 1
+endif
+endif
+
+# allow gprof profiling as well, which overrides the internal PROFILER
+# also enable symbols as it is useless without them
+ifdef PROFILE
+PROFILER =
+SYMBOLS = 1
+ifndef SYMLEVEL
+SYMLEVEL = 1
+endif
+endif
+
+# set the symbols level
+ifdef SYMBOLS
+ifndef SYMLEVEL
+SYMLEVEL = 2
+endif
+endif
+
+
+#-------------------------------------------------
+# platform-specific definitions
+#-------------------------------------------------
+
+# extension for executables
+EXE =
+
+ifeq ($(TARGETOS),win32)
+EXE = .exe
+endif
+ifeq ($(TARGETOS),os2)
+EXE = .exe
+endif
+
+ifndef BUILD_EXE
+BUILD_EXE = $(EXE)
+endif
+
+# compiler, linker and utilities
+AR = @ar
+CC = @gcc
+LD = @g++
+MD = -mkdir$(EXE)
+RM = @rm -f
+OBJDUMP = @objdump
+
+
+
+#-------------------------------------------------
+# form the name of the executable
+#-------------------------------------------------
+
+# reset all internal prefixes/suffixes
+PREFIXSDL =
+SUFFIX64 =
+SUFFIXDEBUG =
+SUFFIXPROFILE =
+
+# Windows SDL builds get an SDL prefix
+ifeq ($(OSD),sdl)
+ifeq ($(TARGETOS),win32)
+PREFIXSDL = sdl
+endif
+endif
+
+# 64-bit builds get a '64' suffix
+ifeq ($(PTR64),1)
+SUFFIX64 = 64
+endif
+
+# debug builds just get the 'd' suffix and nothing more
+ifdef DEBUG
+SUFFIXDEBUG = d
+endif
+
+# gprof builds get an addition 'p' suffix
+ifdef PROFILE
+SUFFIXPROFILE = p
+endif
+
+# the name is just 'target' if no subtarget; otherwise it is
+# the concatenation of the two (e.g., mametiny)
+ifeq ($(TARGET),$(SUBTARGET))
+NAME = $(TARGET)
+else
+NAME = $(TARGET)$(SUBTARGET)
+endif
+
+# fullname is prefix+name+suffix+suffix64+suffixdebug
+FULLNAME = $(PREFIX)$(PREFIXSDL)$(NAME)$(SUFFIX)$(SUFFIX64)$(SUFFIXDEBUG)$(SUFFIXPROFILE)
+
+# add an EXE suffix to get the final emulator name
+EMULATOR = $(FULLNAME)$(EXE)
+
+
+
+#-------------------------------------------------
+# source and object locations
+#-------------------------------------------------
+
+# all sources are under the src/ directory
+SRC = src
+
+# build the targets in different object dirs, so they can co-exist
+OBJ = obj/$(PREFIX)$(OSD)$(SUFFIX)$(SUFFIX64)$(SUFFIXDEBUG)$(SUFFIXPROFILE)
+
+
+
+#-------------------------------------------------
+# compile-time definitions
+#-------------------------------------------------
+
+# CR/LF setup: use both on win32/os2, CR only on everything else
+DEFS = -DCRLF=2
+
+ifeq ($(TARGETOS),win32)
+DEFS = -DCRLF=3
+endif
+ifeq ($(TARGETOS),os2)
+DEFS = -DCRLF=3
+endif
+
+# map the INLINE to something digestible by GCC
+DEFS += -DINLINE="static inline"
+
+# define LSB_FIRST if we are a little-endian target
+ifndef BIGENDIAN
+DEFS += -DLSB_FIRST
+endif
+
+# define PTR64 if we are a 64-bit target
+ifeq ($(PTR64),1)
+DEFS += -DPTR64
+endif
+
+# define MAME_DEBUG if we are a debugging build
+ifdef DEBUG
+DEFS += -DMAME_DEBUG
+else
+DEFS += -DNDEBUG
+endif
+
+# define MAME_PROFILER if we are a profiling build
+ifdef PROFILER
+DEFS += -DMAME_PROFILER
+endif
+
+# define USE_NETWORK if we are a making network enabled build
+ifdef USE_NETWORK
+DEFS += -DUSE_NETWORK
+endif
+
+# need to ensure FLAC functions are statically linked
+ifeq ($(BUILD_FLAC),1)
+DEFS += -DFLAC__NO_DLL
+endif
+
+# define USE_SYSTEM_JPEGLIB if library shipped with MAME is not used
+ifneq ($(BUILD_JPEGLIB),1)
+DEFS += -DUSE_SYSTEM_JPEGLIB
+endif
+
+
+
+#-------------------------------------------------
+# compile flags
+# CCOMFLAGS are common flags
+# CONLYFLAGS are flags only used when compiling for C
+# CPPONLYFLAGS are flags only used when compiling for C++
+# COBJFLAGS are flags only used when compiling for Objective-C(++)
+#-------------------------------------------------
+
+# start with empties for everything
+CCOMFLAGS =
+CONLYFLAGS =
+COBJFLAGS =
+CPPONLYFLAGS =
+
+# CFLAGS is defined based on C or C++ targets
+# (remember, expansion only happens when used, so doing it here is ok)
+CFLAGS = $(CCOMFLAGS) $(CPPONLYFLAGS)
+
+# we compile C-only to C89 standard with GNU extensions
+# we compile C++ code to C++98 standard with GNU extensions
+CONLYFLAGS += -std=gnu89
+CPPONLYFLAGS += -x c++ -std=gnu++98
+COBJFLAGS += -x objective-c++
+
+# this speeds it up a bit by piping between the preprocessor/compiler/assembler
+CCOMFLAGS += -pipe
+
+# add -g if we need symbols, and ensure we have frame pointers
+ifdef SYMBOLS
+CCOMFLAGS += -g$(SYMLEVEL) -fno-omit-frame-pointer
+endif
+
+# add -v if we need verbose build information
+ifdef VERBOSE
+CCOMFLAGS += -v
+endif
+
+# add profiling information for the compiler
+ifdef PROFILE
+CCOMFLAGS += -pg
+endif
+
+# add the optimization flag
+CCOMFLAGS += -O$(OPTIMIZE)
+
+# add the error warning flag
+ifndef NOWERROR
+CCOMFLAGS += -Werror
+endif
+
+# if we are optimizing, include optimization options
+ifneq ($(OPTIMIZE),0)
+CCOMFLAGS += -fno-strict-aliasing $(ARCHOPTS)
+endif
+
+# add a basic set of warnings
+CCOMFLAGS += \
+ -Wall \
+ -Wcast-align \
+ -Wundef \
+ -Wformat-security \
+ -Wwrite-strings \
+ -Wno-sign-compare \
+ -Wno-conversion
+
+# warnings only applicable to C compiles
+CONLYFLAGS += \
+ -Wpointer-arith \
+ -Wbad-function-cast \
+ -Wstrict-prototypes
+
+# warnings only applicable to OBJ-C compiles
+COBJFLAGS += \
+ -Wpointer-arith
+
+# warnings only applicable to C++ compiles
+CPPONLYFLAGS += \
+ -Woverloaded-virtual
+
+
+#-------------------------------------------------
+# include paths
+#-------------------------------------------------
+
+# add core include paths
+INCPATH += \
+ -I$(SRC)/$(TARGET) \
+ -I$(OBJ)/$(TARGET)/layout \
+ -I$(SRC)/emu \
+ -I$(OBJ)/emu \
+ -I$(OBJ)/emu/layout \
+ -I$(SRC)/lib/util \
+ -I$(SRC)/lib \
+ -I$(SRC)/osd \
+ -I$(SRC)/osd/$(OSD) \
+
+
+
+#-------------------------------------------------
+# archiving flags
+#-------------------------------------------------
+# Default to something reasonable for all platforms
+ARFLAGS = -cr
+# Deal with macosx brain damage if COMMAND_MODE is in
+# the luser's environment:
+ifeq ($(TARGETOS),macosx)
+ifeq ($(COMMAND_MODE),"legacy")
+ARFLAGS = -crs
+endif
+endif
+
+
+#-------------------------------------------------
+# linking flags
+#-------------------------------------------------
+
+# LDFLAGS are used generally; LDFLAGSEMULATOR are additional
+# flags only used when linking the core emulator
+LDFLAGS =
+ifneq ($(TARGETOS),macosx)
+ifneq ($(TARGETOS),os2)
+ifneq ($(TARGETOS),solaris)
+LDFLAGS = -Wl,--warn-common
+endif
+endif
+endif
+LDFLAGSEMULATOR =
+
+# add profiling information for the linker
+ifdef PROFILE
+LDFLAGS += -pg
+endif
+
+# strip symbols and other metadata in non-symbols and non profiling builds
+ifndef SYMBOLS
+ifneq ($(TARGETOS),macosx)
+LDFLAGS += -s
+endif
+endif
+
+# output a map file (emulator only)
+ifdef MAP
+LDFLAGSEMULATOR += -Wl,-Map,$(FULLNAME).map
+endif
+
+
+
+#-------------------------------------------------
+# define the standard object directory; other
+# projects can add their object directories to
+# this variable
+#-------------------------------------------------
+
+OBJDIRS = $(OBJ) $(OBJ)/$(TARGET)/$(SUBTARGET)
+
+
+#-------------------------------------------------
+# define standard libarires for CPU and sounds
+#-------------------------------------------------
+
+LIBEMU = $(OBJ)/libemu.a
+LIBCPU = $(OBJ)/$(TARGET)/$(SUBTARGET)/libcpu.a
+LIBDASM = $(OBJ)/$(TARGET)/$(SUBTARGET)/libdasm.a
+LIBSOUND = $(OBJ)/$(TARGET)/$(SUBTARGET)/libsound.a
+LIBUTIL = $(OBJ)/libutil.a
+LIBOCORE = $(OBJ)/libocore.a
+LIBOSD = $(OBJ)/libosd.a
+
+VERSIONOBJ = $(OBJ)/version.o
+EMUINFOOBJ = $(OBJ)/$(TARGET)/$(TARGET).o
+DRIVLISTSRC = $(OBJ)/$(TARGET)/$(SUBTARGET)/drivlist.c
+DRIVLISTOBJ = $(OBJ)/$(TARGET)/$(SUBTARGET)/drivlist.o
+
+
+
+#-------------------------------------------------
+# either build or link against the included
+# libraries
+#-------------------------------------------------
+
+# start with an empty set of libs
+LIBS =
+
+# add expat XML library
+ifeq ($(BUILD_EXPAT),1)
+INCPATH += -I$(SRC)/lib/expat
+EXPAT = $(OBJ)/libexpat.a
+else
+LIBS += -lexpat
+EXPAT =
+endif
+
+# add ZLIB compression library
+ifeq ($(BUILD_ZLIB),1)
+INCPATH += -I$(SRC)/lib/zlib
+ZLIB = $(OBJ)/libz.a
+else
+LIBS += -lz
+ZLIB =
+endif
+
+# add flac library
+ifeq ($(BUILD_FLAC),1)
+INCPATH += -I$(SRC)/lib/util
+FLAC_LIB = $(OBJ)/libflac.a
+# $(OBJ)/libflac++.a
+else
+LIBS += -lFLAC
+FLAC_LIB =
+endif
+
+# add jpeglib image library
+ifeq ($(BUILD_JPEGLIB),1)
+INCPATH += -I$(SRC)/lib/libjpeg
+JPEG_LIB = $(OBJ)/libjpeg.a
+else
+LIBS += -ljpeg
+JPEG_LIB =
+endif
+
+# add SoftFloat floating point emulation library
+SOFTFLOAT = $(OBJ)/libsoftfloat.a
+
+# add formats emulation library
+FORMATS_LIB = $(OBJ)/libformats.a
+
+#-------------------------------------------------
+# 'default' target needs to go here, before the
+# include files which define additional targets
+#-------------------------------------------------
+
+default: maketree buildtools emulator
+
+all: default tools
+
+
+7Z_LIB = $(OBJ)/lib7z.a
+
+#-------------------------------------------------
+# defines needed by multiple make files
+#-------------------------------------------------
+
+BUILDSRC = $(SRC)/build
+BUILDOBJ = $(OBJ)/build
+BUILDOUT = $(BUILDOBJ)
+
+
+
+#-------------------------------------------------
+# include the various .mak files
+#-------------------------------------------------
+
+# include OSD-specific rules first
+include $(SRC)/osd/$(OSD)/$(OSD).mak
+
+# then the various core pieces
+include $(SRC)/$(TARGET)/$(SUBTARGET).mak
+-include $(SRC)/$(TARGET)/osd/$(OSD)/$(OSD).mak
+include $(SRC)/emu/emu.mak
+include $(SRC)/lib/lib.mak
+include $(SRC)/build/build.mak
+-include $(SRC)/osd/$(CROSS_BUILD_OSD)/build.mak
+include $(SRC)/tools/tools.mak
+
+# combine the various definitions to one
+CCOMFLAGS += $(INCPATH)
+CDEFS = $(DEFS)
+
+
+
+#-------------------------------------------------
+# primary targets
+#-------------------------------------------------
+
+emulator: maketree $(BUILD) $(EMULATOR)
+
+buildtools: maketree $(BUILD)
+
+# In order to keep dependencies reasonable, we exclude objects in the base of
+# $(SRC)/emu, as well as all the OSD objects and anything in the $(OBJ) tree
+depend: maketree $(MAKEDEP_TARGET)
+ @echo Rebuilding depend.mak...
+ $(MAKEDEP) -I. $(INCPATH) -X$(SRC)/emu -X$(SRC)/osd/... -X$(OBJ)/... src/$(TARGET) > depend.mak
+
+tools: maketree $(TOOLS)
+
+maketree: $(sort $(OBJDIRS))
+
+clean: $(OSDCLEAN)
+ @echo Deleting object tree $(OBJ)...
+ $(RM) -r $(OBJ)
+ @echo Deleting $(EMULATOR)...
+ $(RM) $(EMULATOR)
+ @echo Deleting $(TOOLS)...
+ $(RM) $(TOOLS)
+ifdef MAP
+ @echo Deleting $(FULLNAME).map...
+ $(RM) $(FULLNAME).map
+endif
+ifdef SYMBOLS
+ @echo Deleting $(FULLNAME).sym...
+ $(RM) $(FULLNAME).sym
+endif
+
+checkautodetect:
+ @echo TARGETOS=$(TARGETOS)
+ @echo PTR64=$(PTR64)
+ @echo BIGENDIAN=$(BIGENDIAN)
+ @echo UNAME="$(UNAME)"
+
+
+#-------------------------------------------------
+# directory targets
+#-------------------------------------------------
+
+$(sort $(OBJDIRS)):
+ $(MD) -p $@
+
+
+
+#-------------------------------------------------
+# executable targets and dependencies
+#-------------------------------------------------
+
+ifndef EXECUTABLE_DEFINED
+
+$(EMULATOR): $(VERSIONOBJ) $(EMUINFOOBJ) $(DRIVLISTOBJ) $(DRVLIBS) $(LIBOSD) $(LIBCPU) $(LIBEMU) $(LIBDASM) $(LIBSOUND) $(LIBUTIL) $(EXPAT) $(SOFTFLOAT) $(JPEG_LIB) $(FLAC_LIB) $(7Z_LIB) $(FORMATS_LIB) $(ZLIB) $(LIBOCORE) $(RESFILE)
+ $(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ)
+ @echo Linking $@...
+ $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $^ $(LIBS) -o $@
+ifeq ($(TARGETOS),win32)
+ifdef SYMBOLS
+ifndef MSVC_BUILD
+ $(OBJDUMP) --section=.text --line-numbers --syms --demangle $@ >$(FULLNAME).sym
+endif
+endif
+endif
+
+endif
+
+
+
+#-------------------------------------------------
+# generic rules
+#-------------------------------------------------
+
+$(OBJ)/%.o: $(SRC)/%.c | $(OSPREBUILD)
+ @echo Compiling $<...
+ $(CC) $(CDEFS) $(CFLAGS) -c $< -o $@
+
+$(OBJ)/%.pp: $(SRC)/%.c | $(OSPREBUILD)
+ @echo Compiling $<...
+ $(CC) $(CDEFS) $(CFLAGS) -E $< -o $@
+
+$(OBJ)/%.s: $(SRC)/%.c | $(OSPREBUILD)
+ @echo Compiling $<...
+ $(CC) $(CDEFS) $(CFLAGS) -S $< -o $@
+
+$(OBJ)/%.lh: $(SRC)/%.lay $(FILE2STR_TARGET)
+ @echo Converting $<...
+ @$(FILE2STR) $< $@ layout_$(basename $(notdir $<))
+
+$(OBJ)/%.fh: $(SRC)/%.png $(PNG2BDC_TARGET) $(FILE2STR_TARGET)
+ @echo Converting $<...
+ @$(PNG2BDC) $< $(OBJ)/temp.bdc
+ @$(FILE2STR) $(OBJ)/temp.bdc $@ font_$(basename $(notdir $<)) UINT8
+
+$(DRIVLISTOBJ): $(DRIVLISTSRC)
+ @echo Compiling $<...
+ $(CC) $(CDEFS) $(CFLAGS) -c $< -o $@
+
+$(DRIVLISTSRC): $(SRC)/$(TARGET)/$(SUBTARGET).lst $(MAKELIST_TARGET)
+ @echo Building driver list $<...
+ @$(MAKELIST) $< >$@
+
+$(OBJ)/%.a:
+ @echo Archiving $@...
+ $(RM) $@
+ $(AR) $(ARFLAGS) $@ $^
+
+ifeq ($(TARGETOS),macosx)
+$(OBJ)/%.o: $(SRC)/%.m | $(OSPREBUILD)
+ @echo Objective-C compiling $<...
+ $(CC) $(CDEFS) $(COBJFLAGS) $(CCOMFLAGS) -c $< -o $@
+endif
+
+
+
+#-------------------------------------------------
+# optional dependencies file
+#-------------------------------------------------
+
+-include depend.mak