0
0
mirror of https://github.com/zeux/pugixml.git synced 2024-12-28 06:10:55 +08:00
pugixml/Jamrules.jam
arseny.kapoulkine 77c9a23bfb Added build support for Sun C++
git-svn-id: http://pugixml.googlecode.com/svn/trunk@453 99668b35-9821-0410-8761-19e4c4f06640
2010-05-25 21:50:46 +00:00

496 lines
8.6 KiB
Plaintext

# Rules for Jamfile.jam
if ( $(toolset:I=^mingw) || $(toolset:I=^gcc) )
{
if ( $(toolset:I=^gcc) )
{
GCCPATH = "" ;
}
else
{
GCCPATH = "%$(toolset)_PATH%\\bin\\" ;
}
CCFLAGS += -D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += -D_DEBUG ;
}
else
{
CCFLAGS += -DNDEBUG -O3 ;
}
if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
{
CCFLAGS += -fno-exceptions ;
}
if ( $(OS) != MACOSX )
{
LDFLAGS += -static-libgcc -static ;
}
actions ObjectAction
{
"$(GCCPATH)gcc" -W -Wall -Wextra -Werror -pedantic -c $(>) -o $(<) $(CCFLAGS)
}
actions LibraryAction
{
"$(GCCPATH)ar" rcs $(<) $(>)
}
actions LinkAction
{
"$(GCCPATH)g++" $(>) -o $(<) $(LDFLAGS)
}
actions maxtargets 1 CoverageAction
{
"$(GCCPATH)gcov" $(>) $(GCOVFLAGS) | perl tests/gcov-filter.pl
}
}
else if ( $(toolset:I=^msvc) )
{
CCFLAGS += /D$(defines) ;
if ( $(fulldebug) )
{
CCFLAGS += /Z7 ;
LDFLAGS += /DEBUG ;
}
if ( $(configuration) = "debug" )
{
CCFLAGS += /D_DEBUG /MTd ;
}
else
{
CCFLAGS += /DNDEBUG /Ox /MT ;
}
if ( $(toolset) = msvc7 || $(toolset) = msvc71 || $(toolset) = msvc8 )
{
CCFLAGS += /Wp64 ; # Wp64 is deprecated from msvc9
}
if ( $(toolset) != msvc6 )
{
CCFLAGS += /W4 ;
}
else
{
CCFLAGS += /W3 ; # lots of warnings at W4 in standard library
}
if ( $(toolset) = msvc7 || $(toolset) = msvc71 || $(toolset) = msvc8 )
{
CCFLAGS += "/I\"%$(toolset)_PATH%\\PlatformSDK\\include\"" ;
}
else if ( $(toolset) != msvc6 )
{
CCFLAGS += "/I\"%WINSDK_PATH%\\Include\"" ;
}
if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
{
CCFLAGS += /EHsc ;
}
else if ( $(toolset) = "msvc6" || $(toolset) = "msvc71" )
{
# No no-exception STL in MSVC6, buggy no-exception STL in MSVC71
CCFLAGS += /EHsc ;
}
else
{
CCFLAGS += /D_HAS_EXCEPTIONS=0 ;
}
if ( $(toolset:I=x64$) )
{
postfix = "\\amd64" ;
sdk_postfix = "\\x64" ;
LDFLAGS += /MACHINE:X64 ;
}
else
{
postfix = "" ;
sdk_postfix = "" ;
}
actions ObjectAction
{
"%$(toolset)_PATH%\bin$(postfix)\cl.exe" /WX /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS)
}
actions LibraryAction
{
"%$(toolset)_PATH%\bin$(postfix)\lib.exe" /NOLOGO /OUT:$(<) $(>)
}
actions LinkAction
{
"%$(toolset)_PATH%\bin$(postfix)\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) /PDB:$(<:S=.pdb) $(>) /LIBPATH:"%$(toolset)_PATH%\lib$(postfix)" /LIBPATH:"%$(toolset)_PATH%\PlatformSDK\lib$(postfix)" /LIBPATH:"%WINSDK_PATH%\Lib$(sdk_postfix)" $(LDFLAGS)
}
actions CoverageAction
{
}
}
else if ( $(toolset) = "ic8" )
{
msvc = "msvc7" ;
CCFLAGS += /D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += /D_DEBUG /MTd ;
}
else
{
CCFLAGS += /DNDEBUG /Ox /MT ;
}
if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
{
CCFLAGS += /EHsc ;
}
actions ObjectAction
{
"%$(toolset)_PATH%\bin\icl.exe" /W4 /WX /Wport /Qwd981,444,280,383,909,304,167,171,177,1419 /I"%$(msvc)_PATH%\include" /I"%$(msvc)_PATH%\PlatformSDK\Include" /I"%$(toolset)_PATH%\include" /c $(>) /Fo$(<) /nologo $(CCFLAGS)
}
actions LibraryAction
{
"%$(msvc)_PATH%\bin\lib.exe" /NOLOGO /OUT:$(<) $(>)
}
actions LinkAction
{
"%$(msvc)_PATH%\bin\link.exe" /SUBSYSTEM:CONSOLE /NOLOGO /OUT:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\lib" /LIBPATH:"%$(msvc)_PATH%\PlatformSDK\lib" $(LDFLAGS)
}
actions CoverageAction
{
}
}
else if ( $(toolset:I=^dmc) )
{
CCFLAGS += -D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += -D_DEBUG ;
}
else
{
CCFLAGS += -DNDEBUG ;
}
if ( ! ( PUGIXML_NO_EXCEPTIONS in $(defines) ) )
{
CCFLAGS += -Ae ;
}
actions ObjectAction
{
"%$(toolset)_PATH%\bin\dmc.exe" -c -f -I%$(toolset)_PATH%\stlport\stlport -wx $(>) -o$(<) $(CCFLAGS)
}
actions LibraryAction
{
"%$(toolset)_PATH%\bin\lib.exe" -c $(<) $(>)
}
actions LinkAction
{
"%$(toolset)_PATH%\bin\link.exe" $(>:\\) , $(<:\\) , nul , $(LDFLAGS:\\) -L/co/ma
}
actions CoverageAction
{
}
}
else if ( $(toolset:I=^cw) )
{
cw_bin = "%$(toolset)_PATH%\\Other Metrowerks Tools\\Command Line Tools" ;
CCFLAGS += -D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += -D_DEBUG ;
}
else
{
CCFLAGS += -DNDEBUG -O4 ;
}
if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
{
CCFLAGS += -Cpp_exceptions off ;
}
actions ObjectAction
{
"$(cw_bin)\mwcc.exe" -c -cwd include -ansi strict -iso_templates on -msext off -w all,cmdline,iserror,nonotused,nonotinlined,noimplicitconv,nounwanted $(>) -o $(<) $(CCFLAGS)
}
actions LibraryAction
{
"$(cw_bin)\mwld.exe" -library -o $(<) $(>)
}
actions LinkAction
{
"$(cw_bin)\mwld.exe" -subsystem console -o $(<) $(>) $(LDFLAGS)
}
actions CoverageAction
{
}
}
else if ( $(toolset:I=^bcc) )
{
CCFLAGS += -D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += -D_DEBUG ;
}
else
{
CCFLAGS += -DNDEBUG -Ox ;
}
actions ObjectAction
{
"%$(toolset)_PATH%\bin\bcc32.exe" $(CCFLAGS) -c -q -Q -fp -w -w! -w-8026 -w-8027 -w-8091 -w-8004 -o $(<) $(>)
}
actions LibraryAction
{
"%$(toolset)_PATH%\bin\tlib.exe" /C $(<:\\) -+$(>:\\)
}
actions LinkAction
{
"%$(toolset)_PATH%\bin\ilink32.exe" -L"%$(toolset)_PATH%\lib" -Tpe -ap -Gn -x -c "%$(toolset)_PATH%\lib\c0x32.obj" $(>:\\) , $(<:\\) , , $(LDFLAGS:\\) cw32 import32
}
actions CoverageAction
{
}
}
else if ( $(toolset:I=^suncc) )
{
CCFLAGS += -D$(defines) ;
if ( $(configuration) = "debug" )
{
CCFLAGS += -D_DEBUG ;
}
else
{
CCFLAGS += -DNDEBUG -O ;
}
if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
{
CCFLAGS += -noex ;
}
actions ObjectAction
{
sunCC $(CCFLAGS) +w -xwe -c -o $(<) $(>)
}
actions LibraryAction
{
ar rcs $(<) $(>)
}
actions LinkAction
{
sunCC $(>) -o $(<) $(LDFLAGS)
}
actions CoverageAction
{
}
}
else
{
exit "Unknown toolset $(toolset)!" ;
}
if ( $(UNIX) )
{
actions screenoutput RunAction
{
$(>)
}
actions quietly ignore MakeDirAction
{
mkdir -p $(<)
}
actions quietly ignore DeleteAction
{
rm -f $(>)
}
}
else
{
actions screenoutput RunAction
{
$(>:\\)
}
actions quietly ignore MakeDirAction
{
mkdir $(<:\\) >nul 2>&1
}
actions quietly ignore DeleteAction
{
del /F $(>:\\) >nul 2>&1
}
}
rule MakeFileDir TARGET
{
local DIR = $(TARGET:D) ;
MakeDirAction $(DIR) ;
Needs $(TARGET) : $(DIR) ;
}
rule Alias TARGET : SOURCE
{
NotFile $(TARGET) ;
Always $(TARGET) ;
Depends $(TARGET) : $(SOURCE) ;
}
rule Object TARGET : SOURCE
{
HDRRULE on $(SOURCE) = C.HdrRule ;
HDRSCAN on $(SOURCE) = $(C.HDRPATTERN) ;
MakeFileDir $(TARGET) ;
ObjectAction $(TARGET) : $(SOURCE) ;
Depends $(TARGET) : $(SOURCE) ;
}
rule Objects SOURCES
{
local OBJECTS ;
for SOURCE in $(SOURCES)
{
local OBJECT = $(BUILD)/$(SOURCE:S=.o) ;
Object $(OBJECT) : $(SOURCE) ;
OBJECTS += $(OBJECT) ;
}
return $(OBJECTS) ;
}
rule Library TARGET : SOURCES
{
# build object files
local OBJECTS = [ Objects $(SOURCES) ] ;
# build library
local LIBRARY = $(BUILD)/$(TARGET).a ;
MakeFileDir $(LIBRARY) ;
LibraryAction $(LIBRARY) : $(OBJECTS) ;
Depends $(LIBRARY) : $(OBJECTS) ;
# make alias
Alias $(TARGET) : $(LIBRARY) ;
# remember library path for linking
$(TARGET)_path = $(LIBRARY) ;
# remember library objects for coverage
$(TARGET)_objects = $(OBJECTS) ;
}
rule Application TARGET : SOURCES : LIBRARIES
{
# build object files
local OBJECTS = [ Objects $(SOURCES) ] ;
# get binary path
local EXECUTABLE = $(BUILD)/$(TARGET).exe ;
# set libraries
LDFLAGS on $(EXECUTABLE) = $(LDFLAGS) $($(LIBRARIES)_path) ;
# build application
MakeFileDir $(EXECUTABLE) ;
LinkAction $(EXECUTABLE) : $(OBJECTS) ;
Depends $(EXECUTABLE) : $(OBJECTS) $($(LIBRARIES)_path) ;
# make alias
Alias $(TARGET) : $(EXECUTABLE) ;
# remember executable path for running
$(TARGET)_path = $(EXECUTABLE) ;
# remember executable objects for coverage
$(TARGET)_objects = $(OBJECTS) $($(LIBRARIES)_objects) ;
}
rule CleanCoverage TARGET
{
# make target
local CLEAN_TARGET = $(TARGET)_clean_coverage ;
NotFile $(CLEAN_TARGET) ;
Always $(CLEAN_TARGET) ;
Depends $(TARGET) : $(CLEAN_TARGET) ;
# clean object files
local FILES = $($(SOURCE)_objects:S=.gcda) ;
# disable "independent target" warnings
NotFile $(FILES) ;
DeleteAction $(CLEAN_TARGET) : $(FILES) ;
}
rule Test TARGET : SOURCE
{
# make alias
Alias $(TARGET) : $(SOURCE) ;
# run tests
RunAction $(TARGET) : $($(SOURCE)_path) ;
# remember executable objects for coverage
$(TARGET)_objects = $($(SOURCE)_objects) ;
# clean coverage files before run
CleanCoverage $(TARGET) ;
}
rule Coverage TARGET : SOURCE
{
local FILES = $($(SOURCE)_objects:S=.gcda) ;
# disable "independent target" warnings
NotFile $(FILES) ;
CoverageAction $(TARGET) : $(FILES) ;
Depends $(TARGET) : $(SOURCE) ;
}