- #
- # * px *
- # Copyright (c) 2008 Shawn Hladky
- #
- # Permission is hereby granted, free of charge, to any person obtaining a copy of this software
- # and associated documentation files (the "Software"), to deal in the Software without
- # restriction, including without limitation the rights to use, copy, modify, merge, publish,
- # distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
- # Software is furnished to do so, subject to the following conditions:
- #
- # The above copyright notice and this permission notice shall be included in all copies or
- # substantial portions of the Software.
- #
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- # BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- #
- #
- # For Linux 2.6: export OSVER=26 (or the appropriate number for your system)
- #
- # These Jamrules mostly copied from the P4API distribution.
- rule SetLibName
- {
- $(1) = $(2:S=$(SUFLIB)) ;
- LOCATE on $($(1)) = $(EXEC) ;
- }
- #####################################################################
- # P4API libs and includes.
- #####################################################################
- rule IncludeP4API
- {
- # Add includes for building P4API apps.
- if ! $(P4APIDIR)
- {
- Exit Please set P4APIDIR to the path of the P4API distribution. ;
- }
- P4INCLUDE = $(P4APIDIR)$(SLASH)include$(SLASH)p4 ;
- P4LIBS = $(P4APIDIR)$(SLASH)lib ;
- SubDirHdrs $(P4INCLUDE) ;
- SetLibName CLIENTLIB : libclient ;
- SetLibName RPCLIB : librpc ;
- SetLibName SUPPORTLIB : libsupp ;
- CLIENTLIB = $(P4LIBS)$(SLASH)$(CLIENTLIB) ;
- RPCLIB = $(P4LIBS)$(SLASH)$(RPCLIB) ;
- SUPPORTLIB = $(P4LIBS)$(SLASH)$(SUPPORTLIB) ;
- }
- ###################################################################
- # OS settings.
- ###################################################################
- if $(OS) = NT
- {
- JAMSHELL = cmd.exe /c ;
- }
- GENFLAGS = CCFLAGS C++FLAGS ;
- switch $(OS)$(OSVER) $(OS)
- {
- case CYGWIN :
- STRIP = ;
- CC = gcc ;
- C++ = gcc ;
- LINK = g++ ;
- C++FLAGS += -DUSE_CRLF ;
- case FREEBSD :
- Exit Set OSVER to 4, 5, or 6 for FreeBSD ;
- case FREEBSD4 :
- CC = gcc ;
- C++ = g++ ;
- LINK = gcc ;
- switch $(OSCOMP)
- {
- case GCC3 : LINKLIBS += -lsupc++ ;
- }
- if $(OSPLAT) != AXP { LINKFLAGS += -static ; }
- $(GENFLAGS) += -pipe ;
- case FREEBSD[56789]* :
- CC = gcc ;
- C++ = g++ ;
- LINK = gcc ;
- # supc++ library on freebsd5.x and later is missing some
- # modules (this is a bug), so we can't use it.
- # But we still do not want to link stdc++ dynamically.
- #LINKLIBS += -lsupc++ ;
- LINKLIBS += -Wl,-dn,-lstdc++,-dy ;
- _mflags = ;
- switch $(OSPLAT)
- {
- case X86 : _mflags = -m32 ;
- case X86_64 : _mflags = -m64 ;
- }
- $(GENFLAGS) += $(_mflags) -pipe ;
- LINKFLAGS += $(_mflags) ;
- QTOPENGL ?= no ;
- case LINUX :
- Exit Set OSVER to 24 or 26 ;
- case LINUX24 :
- CC = gcc ;
- C++ = g++ ;
- LINK = gcc ;
- LINKLIBS += -lsupc++ ; # Assumes gcc 3.x or later
- # be explicit about submodel since we may be compiling x86 code on
- # an x86/x86_64 biarch system, and the default may be uncertain.
- _mflags = ;
- switch $(OSPLAT)
- {
- case X86 : _mflags = -m32 ;
- case X86_64 : _mflags = -m64 ;
- }
- LINKLIBS on p4d += $(LINKLIBS) -ldl ;
- LINKLIBS on p4p += $(LINKLIBS) -ldl ;
- LINKLIBS on p4web += $(LINKLIBS) -ldl ;
- if $(SMARTHEAP) = yes { $(GENFLAGS) += -DUSE_SMARTHEAP ; }
- $(GENFLAGS) += $(_mflags) -D_GNU_SOURCE ;
- LINKFLAGS += $(_mflags) ;
- QTOPENGL ?= no ;
- case LINUX26 :
- CC = gcc ;
- C++ = g++ ;
- LINK = g++ ; #gcc didn't work for me... switch to g++
- LINKLIBS += -lsupc++ ;
- LINKLIBS on p4d += $(LINKLIBS) -ldl ;
- LINKLIBS on p4p += $(LINKLIBS) -ldl ;
- LINKLIBS on p4web += $(LINKLIBS) -ldl ;
- # be explicit about submodel since we may be compiling x86 code on
- # an x86/x86_64 biarch system, and the default may be uncertain.
- _mflags = ;
- switch $(OSPLAT)
- {
- case X86 : _mflags = -m32 ;
- case X86_64 : _mflags = -m64 ;
- case AXP : LINKFLAGS += -static ;
- }
- if $(SMARTHEAP) = yes { $(GENFLAGS) += -DUSE_SMARTHEAP ; }
- $(GENFLAGS) += $(_mflags) -D_GNU_SOURCE ;
- LINKFLAGS += $(_mflags) ;
- QTOPENGL ?= no ;
- case MACOSX :
- CC = cc ;
- C++ = cc ;
- $(GENFLAGS) += -DCASE_INSENSITIVE ;
- $(GENFLAGS) += -fpascal-strings ;
- # This looks like a flag but it is really a library macro
- # kind of thing and causes link problems if it at the front
- # of the link command so we make it a LIB
- LINKLIBS += -framework Carbon ;
- case MACOSX104 : # assumes using gcc 4.0.1 or newer
- CC = gcc ;
- C++ = g++ ;
- LINK = g++ ;
- MACOSX_SDK ?= /Developer/SDKs/MacOSX10.4u.sdk ;
- # The -fvisibility-inlines-hidden option is a C++-only
- # option, needed because Qt4 is built with it and all
- # statically-compiled objects need to use it consistently.
- C++FLAGS += -fvisibility-inlines-hidden ;
- $(GENFLAGS) += -DCASE_INSENSITIVE
- -fpascal-strings
- -isysroot$(MACOSX_SDK) ;
- #LINKFLAGS += -Wl,-syslibroot,$(MACOSX_SDK) ;
- # This looks like a flag but it is really a library macro
- # and causes link problems if it's at the front of the link
- # command, so we make it a LIB.
- #LINKLIBS += /Developer/SDKs/MacOSX10.5.sdk/usr/lib/crt1.10.5.o ;
- LINKLIBS += -framework Carbon ;
- switch $(OSPLAT)
- {
- # Note: we may elect at some point to generate universal
- # binaries, in which case just add multiple -arch [arch]
- # flags here.
- #case X86 : _arch = -arch i386 -arch ppc ;
- case X86 : _arch = -arch i386 ;
- case X86_64 : _arch = -arch x86_64 ;
- case * : _arch = -arch ppc ;
- }
- $(GENFLAGS) += $(_arch) -DCASE_INSENSITIVE ;
- LINKFLAGS += $(_arch) ;
- # This adds $(QTDIR)/lib as a frameworks directory, in case
- # Qt is built as frameworks. On the mac, it can be built
- # either as frameworks, regular unix-style shared
- # libraries, or unix-style static libaries.
- $(GENFLAGS) += -F$(QTDIR)/lib ;
- case NT* :
- # Use setargv.obj to get wildcard expansion.
- # The "rc" tool needs MS headers:
- BINDIR = e:\\perforce ;
- JAMSHELL ?= $(P4)\\Jamsh.bat $(OSPLAT) % "!" ;
- C++FLAGS += /DCASE_INSENSITIVE /DUSE_CRLF /wd4996 /wd4530 /DOS_NT ;
- if $(SMARTHEAP) = yes { $(GENFLAGS) += /DUSE_SMARTHEAP ; }
- LINKLIBS = setargv.obj advapi32.lib oldnames.lib
- kernel32.lib ws2_32.lib ;
- STDHDRS = $(MSVCNT)\\include $(MSVCNT)\\atlmfc\\include ;
- STRIP = ;
- # Now, unset STDHDRS so Jam doesn't scan system headers (takes
- # too long when using compiler on networked machine):
- STDHDRS = ;
- if $(BCCROOT)
- {
- # Jeff Anton compiles with borland.
- OPTIM = -O2 ;
- RCFLAGS = /d NDEBUG /r ;
- AR = tlib /C /P128 ;
- LINKLIBS = $(BCCROOT)/lib/wildargs.obj ;
- }
- else if $(TYPE) = g
- {
- # Debugging build
- OPTIM = /Zi /Gm ;
- RCFLAGS = /d DEBUG /r ;
- LINKFLAGS += /DEBUG ;
- $(GENFLAGS) += /MTd ;
- }
- else if $(TYPE) = dyn
- {
- # Dynamic link version, for qt products
- if $(JAMFAST)
- {
- OPTIM = /Z7 /O2 ;
- }
- else
- {
- OPTIM = /Zi /O2 ;
- actions Cc
- {
- $(CC) /c /Fo$(<) /Fd$(EXEC)\ $(CCFLAGS) $(CCDEFS) $(CCHDRS) /I"$(STDHDRS)" $(>)
- }
- actions C++
- {
- $(C++) /c /Fo$(<) /Fd$(EXEC)\ $(C++FLAGS) $(CCDEFS) $(CCHDRS) /I"$(STDHDRS)" /Tp$(>)
- }
- }
- RCFLAGS = /d NDEBUG /r ;
- $(GENFLAGS) += /MD ;
- LINKFLAGS += /MAP /OPT:REF /OPT:ICF /DEBUG ;
- }
- else if $(TYPE) = dyng
- {
- # Dynamic Debugging build
- if $(JAMFAST)
- {
- OPTIM = /Z7 ;
- }
- else
- {
- OPTIM = /Zi /Gm ;
- actions Cc
- {
- $(CC) /c /Fo$(<) /Fd$(EXEC)\ $(CCFLAGS) $(CCDEFS) $(CCHDRS) /I"$(STDHDRS)" $(>)
- }
- actions C++
- {
- $(C++) /c /Fo$(<) /Fd$(EXEC)\ $(C++FLAGS) $(CCDEFS) $(CCHDRS) /I"$(STDHDRS)" /Tp$(>)
- }
- }
- RCFLAGS = /d DEBUG /r ;
- $(GENFLAGS) += /MDd ;
- LINKFLAGS += /DEBUG /NODEFAULTLIB:msvcrt.lib /fixed:no ;
- }
- else if $(TYPE) = vsdebug
- {
- # Static link with Visual Studio debug libraries.
- # This does not enable debugging our own code, just sets
- # linker dependencies for VS libraries.
- # This is intended for customer use.
- OPTIM = /O2 ;
- RCFLAGS = /d NDEBUG /r ;
- $(GENFLAGS) += /MTd ;
- LINKFLAGS += /MAP ;
- }
- else if $(TYPE) = dyn_vsdebug
- {
- # Dynamic link with Visual Studio debug libraries.
- # This does not enable debugging our own code, just sets
- # linker dependencies for VS libraries.
- # This is intended for customer use.
- OPTIM = /O2 ;
- RCFLAGS = /d NDEBUG /r ;
- $(GENFLAGS) += /MDd ;
- LINKFLAGS += /MAP /OPT:REF /OPT:ICF ;
- }
- else if $(OSVER) = 98
- {
- # Dynamic link version for win98 version of p4win
- # Goes into bin.win98 -- oddity.
- EXEC = [ FSubDirPath P4BIN bin.win98 ] ;
- ALL_LOCATE_TARGET = $(EXEC) ;
- OPTIM = /O2 ;
- if $(TYPE_DEBUG) = true { OPTIM += /Zi ; }
- RCFLAGS = /d NDEBUG /r ;
- $(GENFLAGS) += /MD ;
- LINKFLAGS = /MAP ;
- }
- else
- {
- # Static link version, for command line products
- OPTIM = /O2 ;
- RCFLAGS = /d NDEBUG /r ;
- $(GENFLAGS) += /MT ;
- LINKFLAGS += /MAP ;
- }
- case * :
- Exit Don't know "$(OS)$(OSVER) or " $(OS) ;
- }
- #####################################################################
- # Set up output directory.
- # Jamfile should use "SubDir BIN ;" to specify the current directory
- # as the root where the bin.* subdirectories will live.
- #####################################################################
- EXEC_LIB_TOKENS =
- BIN
- lib.$(OS:L)$(OSVER:EL)$(OSPLAT:EL)
- ;
- EXEC_LIB ?= [ FSubDirPath $(EXEC_LIB_TOKENS) ] ;
- EXEC_LIBEXEC_TOKENS =
- BIN
- libexec.$(OS:L)$(OSVER:EL)$(OSPLAT:EL)
- ;
- EXEC_LIBEXEC ?= [ FSubDirPath $(EXEC_LIBEXEC_TOKENS) ] ;
- # Build dir: p4-bin/bin.xxx[/build][/type]
- EXEC_TOKENS =
- TOP
- bin
- bin.$(OS:L)$(OSVER:EL)$(OSPLAT:EL)
- $(BUILD)
- $(TYPE:L)
- ;
- EXEC ?= [ FSubDirPath $(EXEC_TOKENS) ] ;
- ALL_LOCATE_TARGET = $(EXEC) ;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 7205 | Shawn Hladky |
px: Binary and build script for Mac OSX x86. Built on 10.5 |
16 years ago | |
#1 | 6308 | Shawn Hladky | px: Initial submit | 17 years ago |