diff options
author | 2007-12-17 15:19:59 +0000 | |
---|---|---|
committer | 2007-12-17 15:19:59 +0000 | |
commit | 7b77f1218624ea26dbb2efd85a19f795f5d4e02e (patch) | |
tree | 19209304095572b4fd61c2a2d6a5aa75c4e471ad /makefile | |
parent | 3da7f476068b3ffef713218ba2fc1bd5030f2c38 (diff) |
Initial checkin of MAME 0.121.mame0121
Diffstat (limited to 'makefile')
-rw-r--r-- | makefile | 586 |
1 files changed, 586 insertions, 0 deletions
diff --git a/makefile b/makefile new file mode 100644 index 00000000000..19ecd929577 --- /dev/null +++ b/makefile @@ -0,0 +1,586 @@ +########################################################################### +# +# makefile +# +# Core makefile for building MAME and derivatives +# +# Copyright (c) 1996-2007, 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 +OSD = windows +endif + + + +#------------------------------------------------- +# specify OS target, which further differentiates +# the underlying OS; supported values are: +# win32, unix, macosx, os2 +#------------------------------------------------- + +ifndef TARGETOS +ifeq ($(OSD),windows) +TARGETOS = win32 +else +TARGETOS = unix +endif +endif + + + +#------------------------------------------------- +# specify program options; see each option below +# for details +#------------------------------------------------- + +# uncomment next line to include the debugger +# DEBUG = 1 + +# uncomment next line to include the internal profiler +# PROFILER = 1 + +# uncomment next line to use DRC MIPS3 engine +X86_MIPS3_DRC = 1 + +# uncomment next line to use DRC PowerPC engine +X86_PPC_DRC = 1 + +# uncomment next line to use DRC Voodoo rasterizers +# X86_VOODOO_DRC = 1 + + + +#------------------------------------------------- +# specify build options; see each option below +# for details +#------------------------------------------------- + +# uncomment one of the next lines to build a target-optimized build +# NATIVE = 1 +# ATHLON = 1 +# I686 = 1 +# P4 = 1 +# PM = 1 +# AMD64 = 1 +# G4 = 1 +# G5 = 1 +# CELL = 1 + +# uncomment next line if you are building for a 64-bit target +# PTR64 = 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 include the symbols +# SYMBOLS = 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 + +# 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 +#------------------------------------------------- + +# disable DRC cores for 64-bit builds +ifdef PTR64 +X86_PPC_DRC = +endif + +# 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 + + + +#------------------------------------------------- +# platform-specific definitions +#------------------------------------------------- + +# extension for executables +EXE = + +ifeq ($(TARGETOS),win32) +EXE = .exe +endif +ifeq ($(TARGETOS),os2) +EXE = .exe +endif + +# compiler, linker and utilities +AR = @ar +CC = @gcc +LD = @gcc +MD = -mkdir$(EXE) +RM = @rm -f + + + +#------------------------------------------------- +# based on the architecture, determine suffixes +# and endianness +#------------------------------------------------- + +# by default, don't compile for a specific target CPU +# and assume little-endian (x86) +ARCH = +ENDIAN = little + +# architecture-specific builds get extra options +ifdef NATIVE +SUFFIX = nat +ARCH = -march=native +endif + +ifdef ATHLON +SUFFIX = at +ARCH = -march=athlon +endif + +ifdef I686 +SUFFIX = pp +ARCH = -march=pentiumpro +endif + +ifdef P4 +SUFFIX = p4 +ARCH = -march=pentium4 +endif + +ifdef AMD64 +SUFFIX = 64 +ARCH = -march=athlon64 +endif + +ifdef PM +SUFFIX = pm +ARCH = -march=pentium3 -msse2 +endif + +ifdef G4 +SUFFIX = g4 +ARCH = -mcpu=G4 +ENDIAN = big +endif + +ifdef G5 +SUFFIX = g5 +ARCH = -mcpu=G5 +ENDIAN = big +endif + +ifdef CELL +SUFFIX = cbe +ARCH = +ENDIAN = big +endif + + +#------------------------------------------------- +# form the name of the executable +#------------------------------------------------- + +# debug builds just get the 'd' suffix and nothing more +ifdef DEBUG +SUFFIX = d +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 +FULLNAME = $(PREFIX)$(NAME)$(SUFFIX) + +# 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/$(OSD)/$(FULLNAME) + + + +#------------------------------------------------- +# 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 +ifeq ($(ENDIAN),little) +DEFS += -DLSB_FIRST +endif + +# define PTR64 if we are a 64-bit target +ifdef PTR64 +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 VOODOO_DRC if we are building the DRC Voodoo engine +ifdef X86_VOODOO_DRC +DEFS += -DVOODOO_DRC +endif + + + +#------------------------------------------------- +# compile flags +#------------------------------------------------- + +# we compile to C89 standard with GNU extensions +CFLAGS = -std=gnu89 + +# add -g if we need symbols +ifdef SYMBOLS +CFLAGS += -g +endif + +# add a basic set of warnings +CFLAGS += \ + -Wall \ + -Wpointer-arith \ + -Wbad-function-cast \ + -Wcast-align \ + -Wstrict-prototypes \ + -Wundef \ + -Wformat-security \ + -Wwrite-strings \ + +# add profiling information for the compiler +ifdef PROFILE +CFLAGS += -pg +endif + +# this warning is not supported on the os2 compilers +ifneq ($(TARGETOS),os2) +CFLAGS += -Wdeclaration-after-statement +endif + +# add the optimization flag +CFLAGS += -O$(OPTIMIZE) + +# if we are optimizing, include optimization options +# and make all errors into warnings +ifneq ($(OPTIMIZE),0) +CFLAGS += -Werror $(ARCH) -fno-strict-aliasing +#CFLAGS += $(ARCH) -fno-strict-aliasing +endif + +# if symbols are on, make sure we have frame pointers +ifdef SYMBOLS +CFLAGS += -fno-omit-frame-pointer +endif + + + +#------------------------------------------------- +# include paths +#------------------------------------------------- + +# add core include paths +CFLAGS += \ + -I$(SRC)/$(TARGET) \ + -I$(SRC)/$(TARGET)/includes \ + -I$(OBJ)/$(TARGET)/layout \ + -I$(SRC)/emu \ + -I$(OBJ)/emu \ + -I$(OBJ)/emu/layout \ + -I$(SRC)/lib/util \ + -I$(SRC)/osd \ + -I$(SRC)/osd/$(OSD) \ + + + +#------------------------------------------------- +# linking flags +#------------------------------------------------- + +# LDFLAGS are used generally; LDFLAGSEMULATOR are additional +# flags only used when linking the core emulator +LDFLAGS = -Wl,--warn-common +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 +ifndef PROFILE +LDFLAGS += -s +endif +endif + +# output a map file (emulator only) +ifdef MAP +LDFLAGSEMULATOR += -Wl,-Map,$(FULLNAME).map +endif + +# any reason why this doesn't work for all cases? +ifeq ($(TARGETOS),macosx) +LDFLAGSEMULATOR += -Xlinker -all_load +endif + + + +#------------------------------------------------- +# define the standard object directory; other +# projects can add their object directories to +# this variable +#------------------------------------------------- + +OBJDIRS = $(OBJ) + + + +#------------------------------------------------- +# define standard libarires for CPU and sounds +#------------------------------------------------- + +LIBEMU = $(OBJ)/libemu.a +LIBCPU = $(OBJ)/libcpu.a +LIBSOUND = $(OBJ)/libsound.a +LIBUTIL = $(OBJ)/libutil.a +LIBOCORE = $(OBJ)/libocore.a +LIBOSD = $(OBJ)/libosd.a + +VERSIONOBJ = $(OBJ)/version.o + + + +#------------------------------------------------- +# either build or link against the included +# libraries +#------------------------------------------------- + +# start with an empty set of libs +LIBS = + +# add expat XML library +ifdef BUILD_EXPAT +CFLAGS += -I$(SRC)/lib/expat +EXPAT = $(OBJ)/libexpat.a +else +LIBS += -lexpat +EXPAT = +endif + +# add ZLIB compression library +ifdef BUILD_ZLIB +CFLAGS += -I$(SRC)/lib/zlib +ZLIB = $(OBJ)/libz.a +else +LIBS += -lz +ZLIB = +endif + + + +#------------------------------------------------- +# 'all' target needs to go here, before the +# include files which define additional targets +#------------------------------------------------- + +all: maketree buildtools emulator tools + + + +#------------------------------------------------- +# 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)/emu/emu.mak +include $(SRC)/lib/lib.mak +include $(SRC)/build/build.mak +include $(SRC)/tools/tools.mak + +# combine the various definitions to one +CDEFS = $(DEFS) $(COREDEFS) $(CPUDEFS) $(SOUNDDEFS) + + + +#------------------------------------------------- +# primary targets +#------------------------------------------------- + +emulator: maketree $(BUILD) $(EMULATOR) + +buildtools: maketree $(BUILD) + +tools: maketree $(TOOLS) + +maketree: $(sort $(OBJDIRS)) + +clean: + @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 + + + +#------------------------------------------------- +# directory targets +#------------------------------------------------- + +$(sort $(OBJDIRS)): + $(MD) -p $@ + + + +#------------------------------------------------- +# executable targets and dependencies +#------------------------------------------------- + +$(EMULATOR): $(VERSIONOBJ) $(DRVLIBS) $(LIBOSD) $(LIBEMU) $(LIBCPU) $(LIBSOUND) $(LIBUTIL) $(EXPAT) $(ZLIB) $(LIBOCORE) $(RESFILE) +# always recompile the version string + $(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ) + @echo Linking $@... + $(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $^ $(LIBS) -o $@ + + + +#------------------------------------------------- +# 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) + @echo Converting $<... + @$(FILE2STR) $< $@ layout_$(basename $(notdir $<)) + +$(OBJ)/%.fh: $(SRC)/%.png $(PNG2BDC) $(FILE2STR) + @echo Converting $<... + @$(PNG2BDC) $< $(OBJ)/temp.bdc + @$(FILE2STR) $(OBJ)/temp.bdc $@ font_$(basename $(notdir $<)) UINT8 + +$(OBJ)/%.a: + @echo Archiving $@... + $(RM) $@ + $(AR) -cr $@ $^ + +ifeq ($(TARGETOS),macosx) +$(OBJ)/%.o: $(SRC)/%.m | $(OSPREBUILD) + @echo Objective-C compiling $<... + $(CC) $(CDEFS) $(CFLAGS) -c $< -o $@ +endif |