| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- #-----------------------------------------------------------------------------#
- # PhysicsFS -- A filesystem abstraction.
- #
- # Please see the file LICENSE in the source's root directory.
- # This file written by Ryan C. Gordon.
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- # Makefile for building PhysicsFS on Unix-like systems. Follow the
- # instructions for editing this file, then run "make" on the command line.
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- # Set to your liking.
- #-----------------------------------------------------------------------------#
- CC = gcc
- LINKER = gcc
- #-----------------------------------------------------------------------------#
- # If this makefile fails to detect Cygwin correctly, or you want to force
- # the build process's behaviour, set it to "true" or "false" (w/o quotes).
- #-----------------------------------------------------------------------------#
- #cygwin := true
- #cygwin := false
- cygwin := autodetect
- #-----------------------------------------------------------------------------#
- # Set this to true if you want to create a debug build.
- #-----------------------------------------------------------------------------#
- #debugging := false
- debugging := true
- #-----------------------------------------------------------------------------#
- # Set the archive types you'd like to support.
- # Note that various archives may need external libraries.
- #-----------------------------------------------------------------------------#
- use_archive_zip := true
- use_archive_grp := true
- #-----------------------------------------------------------------------------#
- # Set to "true" if you'd like to build a DLL. Set to "false" otherwise.
- #-----------------------------------------------------------------------------#
- #build_dll := false
- build_dll := true
- #-----------------------------------------------------------------------------#
- # Set one of the below. Currently, none of these are used.
- #-----------------------------------------------------------------------------#
- #use_asm = -DUSE_I386_ASM
- use_asm = -DUSE_PORTABLE_C
- #-----------------------------------------------------------------------------#
- # Set this to where you want PhysicsFS installed. It will put the
- # files in $(install_prefix)/bin, $(install_prefix)/lib, and
- # $(install_prefix)/include ...
- #-----------------------------------------------------------------------------#
- install_prefix := /usr/local
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- # Everything below this line is probably okay.
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- #-----------------------------------------------------------------------------#
- # CygWin autodetect.
- #-----------------------------------------------------------------------------#
- ifeq ($(strip $(cygwin)),autodetect)
- ifneq ($(strip $(shell gcc -v 2>&1 |grep "cygwin")),)
- cygwin := true
- else
- cygwin := false
- endif
- endif
- #-----------------------------------------------------------------------------#
- # Platform-specific binary stuff.
- #-----------------------------------------------------------------------------#
- ifeq ($(strip $(cygwin)),true)
- # !!! FIXME
- build_dll := false
- # !!! FIXME
- ASM = nasmw
- EXE_EXT = .exe
- DLL_EXT = .dll
- STATICLIB_EXT = .a
- ASMOBJFMT = win32
- ASMDEFS = -dC_IDENTIFIERS_UNDERSCORED
- CFLAGS += -DC_IDENTIFIERS_UNDERSCORED
- else
- ASM = nasm
- EXE_EXT =
- DLL_EXT = .so
- STATICLIB_EXT = .a
- ASMOBJFMT = elf
- endif
- ifeq ($(strip $(build_dll)),true)
- LIB_EXT := $(DLL_EXT)
- SHAREDFLAGS += -shared
- else
- LIB_EXT := $(STATICLIB_EXT)
- endif
- #-----------------------------------------------------------------------------#
- # Version crapola.
- #-----------------------------------------------------------------------------#
- VERMAJOR := $(shell grep "define PHYSFS_VER_MAJOR" physfs.h | sed "s/\#define PHYSFS_VER_MAJOR //")
- VERMINOR := $(shell grep "define PHYSFS_VER_MINOR" physfs.h | sed "s/\#define PHYSFS_VER_MINOR //")
- VERPATCH := $(shell grep "define PHYSFS_VER_PATCH" physfs.h | sed "s/\#define PHYSFS_VER_PATCH //")
- VERMAJOR := $(strip $(VERMAJOR))
- VERMINOR := $(strip $(VERMINOR))
- VERPATCH := $(strip $(VERPATCH))
- VERFULL := $(VERMAJOR).$(VERMINOR).$(VERPATCH)
- #-----------------------------------------------------------------------------#
- # General compiler, assembler, and linker flags.
- #-----------------------------------------------------------------------------#
- BINDIR := bin
- SRCDIR := .
- CFLAGS += $(use_asm) -I$(SRCDIR) -I/usr/include/readline -D_REENTRANT -fsigned-char -DPLATFORM_UNIX
- CFLAGS += -Wall -Werror -fno-exceptions -fno-rtti -ansi
- #-pedantic
- LDFLAGS += -lm
- ifeq ($(strip $(debugging)),true)
- CFLAGS += -DDEBUG -g -fno-omit-frame-pointer
- LDFLAGS += -g -fno-omit-frame-pointer
- else
- CFLAGS += -DNDEBUG -O2 -fomit-frame-pointer
- LDFLAGS += -O2 -fomit-frame-pointer
- endif
- ASMFLAGS := -f $(ASMOBJFMT) $(ASMDEFS)
- TESTLDFLAGS := -lreadline
- #-----------------------------------------------------------------------------#
- # Source and target names.
- #-----------------------------------------------------------------------------#
- PUREBASELIBNAME := physfs
- ifeq ($(strip $(cygwin)),true)
- BASELIBNAME := $(strip $(PUREBASELIBNAME))
- else
- BASELIBNAME := lib$(strip $(PUREBASELIBNAME))
- endif
- MAINLIB := $(BINDIR)/$(strip $(BASELIBNAME))$(strip $(LIB_EXT))
- TESTSRCS := test/test_physfs.c
- MAINSRCS := physfs.c physfs_byteorder.c archivers/dir.c
- ifeq ($(strip $(use_archive_zip)),true)
- MAINSRCS += archivers/zip.c archivers/unzip.c
- CFLAGS += -DPHYSFS_SUPPORTS_ZIP
- LDFLAGS += -lz
- ifeq ($(strip $(cygwin)),true)
- EXTRABUILD += zlib114/zlib114.a
- CFLAGS += -Izlib114
- LDFLAGS += -Lzlib114
- endif
- endif
- ifeq ($(strip $(use_archive_grp)),true)
- MAINSRCS += archivers/grp.c
- CFLAGS += -DPHYSFS_SUPPORTS_GRP
- endif
- ifeq ($(strip $(cygwin)),true)
- MAINSRCS += platform/win32.c
- CFLAGS += -DWIN32
- else
- MAINSRCS += platform/unix.c
- endif
- TESTEXE := $(BINDIR)/test_physfs$(EXE_EXT)
- # Rule for getting list of objects from source
- MAINOBJS1 := $(MAINSRCS:.c=.o)
- MAINOBJS2 := $(MAINOBJS1:.cpp=.o)
- MAINOBJS3 := $(MAINOBJS2:.asm=.o)
- MAINOBJS := $(foreach f,$(MAINOBJS3),$(BINDIR)/$(f))
- MAINSRCS := $(foreach f,$(MAINSRCS),$(SRCDIR)/$(f))
- TESTOBJS1 := $(TESTSRCS:.c=.o)
- TESTOBJS2 := $(TESTOBJS1:.cpp=.o)
- TESTOBJS3 := $(TESTOBJS2:.asm=.o)
- TESTOBJS := $(foreach f,$(TESTOBJS3),$(BINDIR)/$(f))
- TESTSRCS := $(foreach f,$(TESTSRCS),$(SRCDIR)/$(f))
- CLEANUP = $(wildcard *.exe) $(wildcard *.obj) \
- $(wildcard $(BINDIR)/*.exe) $(wildcard $(BINDIR)/*.obj) \
- $(wildcard *~) $(wildcard *.err) \
- $(wildcard .\#*) core
- #-----------------------------------------------------------------------------#
- # Rules.
- #-----------------------------------------------------------------------------#
- # Rules for turning source files into .o files
- $(BINDIR)/%.o: $(SRCDIR)/%.cpp
- $(CC) -c -o $@ $< $(CFLAGS)
- $(BINDIR)/%.o: $(SRCDIR)/%.c
- $(CC) -c -o $@ $< $(CFLAGS)
- $(BINDIR)/%.o: $(SRCDIR)/%.asm
- $(ASM) $(ASMFLAGS) -o $@ $<
- .PHONY: all clean distclean listobjs install
- all: $(BINDIR) $(EXTRABUILD) $(MAINLIB) $(TESTEXE)
- $(MAINLIB) : $(BINDIR) $(MAINOBJS)
- $(LINKER) -o $(MAINLIB) $(SHAREDFLAGS) $(MAINOBJS) $(LDFLAGS)
- $(TESTEXE) : $(MAINLIB) $(TESTOBJS)
- $(LINKER) -o $(TESTEXE) $(TESTOBJS) -L$(BINDIR) -l$(strip $(PUREBASELIBNAME)) $(LDFLAGS) $(TESTLDFLAGS)
- install: all
- rm -f $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERMAJOR)).$(strip $(VERMINOR)).*
- mkdir -p $(install_prefix)/bin
- mkdir -p $(install_prefix)/lib
- mkdir -p $(install_prefix)/include
- cp $(SRCDIR)/physfs.h $(install_prefix)/include
- cp $(TESTEXE) $(install_prefix)/bin
- ifeq ($(strip $(cygwin)),true)
- cp $(MAINLIB) $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT))
- else
- cp $(MAINLIB) $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERFULL))
- ln -sf $(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERFULL)) $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT))
- ln -sf $(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERFULL)) $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERMAJOR))
- chmod 0755 $(install_prefix)/lib/$(strip $(BASELIBNAME))$(strip $(LIB_EXT)).$(strip $(VERFULL))
- chmod 0644 $(install_prefix)/include/physfs.h
- endif
- $(BINDIR):
- mkdir -p $(BINDIR)
- mkdir -p $(BINDIR)/archivers
- mkdir -p $(BINDIR)/platform
- mkdir -p $(BINDIR)/test
- ifeq ($(strip $(cygwin)),true)
- zlib114/zlib114.a:
- cd zlib114 ; $(MAKE) CC=$(CC)
- endif
- distclean: clean
- clean:
- rm -f $(CLEANUP)
- rm -rf $(BINDIR)
- ifeq ($(strip $(cygwin)),true)
- cd zlib114 ; $(MAKE) clean
- endif
- listobjs:
- @echo SOURCES:
- @echo $(MAINSRCS)
- @echo
- @echo OBJECTS:
- @echo $(MAINOBJS)
- @echo
- @echo BINARIES:
- @echo $(MAINLIB)
- showcfg:
- @echo "Using CygWin : $(cygwin)"
- @echo "Debugging : $(debugging)"
- @echo "ASM flag : $(use_asm)"
- @echo "Building DLLs : $(build_dll)"
- @echo "Install prefix : $(install_prefix)"
- @echo "PhysFS version : $(VERFULL)"
- @echo "Supports .GRP : $(use_archive_grp)"
- @echo "Supports .ZIP : $(use_archive_zip)"
- #-----------------------------------------------------------------------------#
- # This section is pretty much just for Ryan's use to make distributions.
- # You Probably Should Not Touch.
- #-----------------------------------------------------------------------------#
- # These are the files needed in a binary distribution, regardless of what
- # platform is being used.
- BINSCOMMON := LICENSE.TXT physfs.h
- .PHONY: package msbins win32bins nocygwin
- package: clean
- cd .. ; mv physfs physfs-$(VERFULL) ; tar -cyvvf ./physfs-$(VERFULL).tar.bz2 --exclude="*CVS*" physfs-$(VERFULL) ; mv physfs-$(VERFULL) physfs
- ifeq ($(strip $(cygwin)),true)
- msbins: win32bins
- win32bins: clean all
- echo -e "\r\n\r\n\r\nHEY YOU.\r\n\r\n\r\nTake a look at README-win32bins.txt FIRST.\r\n\r\n\r\n--ryan. (icculus@clutteredmind.org)\r\n\r\n" |zip -9rz ../physfs-win32bins-$(shell date +%m%d%Y).zip $(MAINLIB) $(EXTRAPACKAGELIBS) README-win32bins.txt
- else
- msbins: nocygwin
- win32bins: nocygwin
- nocygwin:
- @echo This must be done on a Windows box in the Cygwin environment.
- endif
- #-----------------------------------------------------------------------------#
- # That's all, folks.
- #-----------------------------------------------------------------------------#
- # end of Makefile ...
|