rob@76: # oscpack makefile rob@76: rob@76: # the source code should auto-detect endianess for most systems rob@76: # (see osc/OscHostEndianness.h) rob@76: # otherwise you need to explicitly set ENDIANESS below rob@76: # to either OSC_HOST_BIG_ENDIAN or OSC_HOST_LITTLE_ENDIAN rob@76: # Apple Mac OS X (PowerPC): OSC_HOST_BIG_ENDIAN rob@76: # Apple Mac OS X (Intel): OSC_HOST_LITTLE_ENDIAN rob@76: # Win32: OSC_HOST_LITTLE_ENDIAN rob@76: # i386 GNU/Linux: OSC_HOST_LITTLE_ENDIAN rob@76: rob@76: ENDIANESS=OSC_DETECT_ENDIANESS #source code will detect using preprocessor rob@76: #ENDIANESS=OSC_HOST_LITTLE_ENDIAN rob@76: rob@76: UNAME := $(shell uname) rob@76: rob@76: CXX := g++ rob@76: INCLUDES := -I. rob@76: COPTS := -Wall -Wextra -O3 rob@76: CDEBUG := -Wall -Wextra -g rob@76: CXXFLAGS := $(COPTS) $(INCLUDES) -D$(ENDIANESS) rob@76: rob@76: BINDIR := bin rob@76: PREFIX := /usr/local rob@76: INSTALL := install -c rob@76: rob@76: #Name definitions rob@76: UNITTESTS := $(BINDIR)/OscUnitTests rob@76: SENDTESTS := $(BINDIR)/OscSendTests rob@76: RECEIVETEST := $(BINDIR)/OscReceiveTest rob@76: SIMPLESEND := $(BINDIR)/SimpleSend rob@76: SIMPLERECEIVE := $(BINDIR)/SimpleReceive rob@76: DUMP := $(BINDIR)/OscDump rob@76: rob@76: INCLUDEDIR := oscpack rob@76: LIBNAME := liboscpack rob@76: LIBSONAME := $(LIBNAME).so rob@76: LIBFILENAME := $(LIBSONAME).1.1.0 rob@76: rob@76: # Common source groups rob@76: rob@76: RECEIVESOURCES := osc/OscReceivedElements.cpp osc/OscPrintReceivedElements.cpp rob@76: SENDSOURCES := osc/OscOutboundPacketStream.cpp rob@76: NETSOURCES := ip/posix/UdpSocket.cpp ip/IpEndpointName.cpp ip/posix/NetworkingUtils.cpp rob@76: COMMONSOURCES := osc/OscTypes.cpp rob@76: rob@76: RECEIVEOBJECTS := $(RECEIVESOURCES:.cpp=.o) rob@76: SENDOBJECTS := $(SENDSOURCES:.cpp=.o) rob@76: NETOBJECTS := $(NETSOURCES:.cpp=.o) rob@76: COMMONOBJECTS := $(COMMONSOURCES:.cpp=.o) rob@76: rob@76: # Test source rob@76: rob@76: UNITTESTSOURCES := tests/OscUnitTests.cpp rob@76: UNITTESTOBJECTS := $(UNITTESTSOURCES:.cpp=.o) rob@76: rob@76: SENDTESTSSOURCES := tests/OscSendTests.cpp rob@76: SENDTESTSOBJECTS := $(SENDTESTSSOURCES:.cpp=.o) rob@76: rob@76: RECEIVETESTSOURCES := tests/OscReceiveTest.cpp rob@76: RECEIVETESTOBJECTS := $(RECEIVETESTSOURCES:.cpp=.o) rob@76: rob@76: # Example source rob@76: rob@76: SIMPLESENDSOURCES := examples/SimpleSend.cpp rob@76: SIMPLESENDOBJECTS := $(SIMPLESENDSOURCES:.cpp=.o) rob@76: rob@76: SIMPLERECEIVESOURCES := examples/SimpleReceive.cpp rob@76: SIMPLERECEIVEOBJECTS := $(SIMPLERECEIVESOURCES:.cpp=.o) rob@76: rob@76: DUMPSOURCES := examples/OscDump.cpp rob@76: DUMPOBJECTS := $(DUMPSOURCES:.cpp=.o) rob@76: rob@76: #Library objects rob@76: rob@76: LIBOBJECTS := $(COMMONOBJECTS) $(SENDOBJECTS) $(RECEIVEOBJECTS) $(NETOBJECTS) rob@76: rob@76: .PHONY: all unittests sendtests receivetest simplesend simplereceive dump library clean install install-local rob@76: rob@76: all: unittests sendtests receivetest simplesend simplereceive dump rob@76: rob@76: unittests : $(UNITTESTS) rob@76: sendtests: $(SENDTESTS) rob@76: receivetest : $(RECEIVETEST) rob@76: simplesend : $(SIMPLESEND) rob@76: simplereceive : $(SIMPLERECEIVE) rob@76: dump : $(DUMP) rob@76: rob@76: # Build rule and common dependencies for all programs rob@76: # | specifies an order-only dependency so changes to bin dir modified date don't trigger recompile rob@76: $(UNITTESTS) $(SENDTESTS) $(RECEIVETEST) $(SIMPLESEND) $(SIMPLERECEIVE) $(DUMP) : $(COMMONOBJECTS) | $(BINDIR) rob@76: $(CXX) -o $@ $^ rob@76: rob@76: # Additional dependencies for each program (make accumulates dependencies from multiple declarations) rob@76: $(UNITTESTS) : $(UNITTESTOBJECTS) $(SENDOBJECTS) $(RECEIVEOBJECTS) rob@76: $(SENDTESTS) : $(SENDTESTSOBJECTS) $(SENDOBJECTS) $(NETOBJECTS) rob@76: $(RECEIVETEST) : $(RECEIVETESTOBJECTS) $(RECEIVEOBJECTS) $(NETOBJECTS) rob@76: $(SIMPLESEND) : $(SIMPLESENDOBJECTS) $(SENDOBJECTS) $(NETOBJECTS) rob@76: $(SIMPLERECEIVE) : $(SIMPLERECEIVEOBJECTS) $(RECEIVEOBJECTS) $(NETOBJECTS) rob@76: $(DUMP) : $(DUMPOBJECTS) $(RECEIVEOBJECTS) $(NETOBJECTS) rob@76: rob@76: $(BINDIR): rob@76: mkdir $@ rob@76: rob@76: clean: rob@76: rm -rf $(BINDIR) $(UNITTESTOBJECTS) $(SENDTESTSOBJECTS) $(RECEIVETESTOBJECTS) $(DUMPOBJECTS) $(LIBOBJECTS) $(SIMPLESENDOBJECTS) $(SIMPLERECEIVEOBJECTS) $(LIBFILENAME) include lib oscpack &> /dev/null rob@76: rob@76: $(LIBFILENAME): $(LIBOBJECTS) rob@76: ifeq ($(UNAME), Darwin) rob@76: #Mac OS X case rob@76: $(CXX) -dynamiclib -Wl,-install_name,$(LIBSONAME) -o $(LIBFILENAME) $(LIBOBJECTS) -lc rob@76: else rob@76: #GNU/Linux case rob@76: $(CXX) -shared -Wl,-soname,$(LIBSONAME) -o $(LIBFILENAME) $(LIBOBJECTS) -lc rob@76: endif rob@76: rob@76: lib: $(LIBFILENAME) rob@76: rob@76: #Installs the library on a system global location rob@76: install: $(LIBFILENAME) rob@76: @$(INSTALL) -m 755 $(LIBFILENAME) $(PREFIX)/lib/$(LIBFILENAME) rob@76: @ln -s -f $(PREFIX)/lib/$(LIBFILENAME) $(PREFIX)/lib/$(LIBSONAME) rob@76: @mkdir -p $(PREFIX)/include/oscpack/ip $(PREFIX)/include/oscpack/osc rob@76: @$(INSTALL) -m 644 ip/*.h $(PREFIX)/include/oscpack/ip rob@76: @$(INSTALL) -m 644 osc/*.h $(PREFIX)/include/oscpack/osc rob@76: @echo "SUCCESS! oscpack has been installed in $(PREFIX)/lib and $(PREFIX)/include/ospack/" rob@76: ifneq ($(UNAME), Darwin) rob@76: @echo "now doing ldconfig..." rob@76: @ldconfig rob@76: endif rob@76: rob@76: #Installs the include/lib structure locally rob@76: install-local: $(LIBFILENAME) rob@76: @echo "" rob@76: @echo " Installing in local directory <$(INCLUDEDIR)>" rob@76: @echo " > Creating symbolic link" rob@76: @ln -s $(LIBFILENAME) $(LIBSONAME) rob@76: @echo " > Creating directories" rob@76: @mkdir -p oscpack/lib rob@76: @mkdir -p oscpack/include/ip rob@76: @mkdir -p oscpack/include/osc rob@76: @echo " > Copying files" rob@76: @mv $(LIBFILENAME) $(LIBSONAME) oscpack/lib rob@76: @cp ip/*.h oscpack/include/ip rob@76: @cp osc/*.h oscpack/include/osc rob@76: @echo "" rob@76: @echo " > Success!" rob@76: