diff options
-rw-r--r-- | Jamrules.jam | 831 |
1 files changed, 430 insertions, 401 deletions
diff --git a/Jamrules.jam b/Jamrules.jam index d4109d3..54806a6 100644 --- a/Jamrules.jam +++ b/Jamrules.jam @@ -1,401 +1,430 @@ -# Rules for Jamfile.jam
-
-if ( $(toolset:I=^mingw) )
-{
- CCFLAGS += -D$(defines) ;
-
- if ( $(configuration) = "debug" )
- {
- CCFLAGS += -D_DEBUG ;
- }
- else
- {
- CCFLAGS += -DNDEBUG -O3 ;
- }
-
- if ( PUGIXML_NO_EXCEPTIONS in $(defines) )
- {
- CCFLAGS += -fno-exceptions ;
- }
-
- actions ObjectAction
- {
- "%$(toolset)_PATH%\bin\gcc" -W -Wall -Wextra -Werror -pedantic -c $(>) -o $(<) $(CCFLAGS)
- }
-
- actions LibraryAction
- {
- "%$(toolset)_PATH%\bin\ar" rc $(<) $(>)
- }
-
- actions LinkAction
- {
- "%$(toolset)_PATH%\bin\g++" $(>) -o $(<) -static-libgcc $(LDFLAGS)
- }
-
- actions CoverageAction
- {
- "%$(toolset)_PATH%\bin\gcov" $(>:\\) $(GCOVFLAGS) | perl tests/gcov-filter.pl
- }
-}
-else if ( $(toolset:I=^msvc) )
-{
- CCFLAGS += /D$(defines) ;
-
- if ( $(configuration) = "debug" )
- {
- CCFLAGS += /D_DEBUG /MTd ;
- }
- else
- {
- CCFLAGS += /DNDEBUG /Ox /MT ;
- }
-
- if ( $(toolset) != msvc6 )
- {
- CCFLAGS += /Wp64 /W4 ;
- }
- else
- {
- CCFLAGS += /W3 ; # lots of warnings at W4 in standard library
- }
-
- 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:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib$(postfix)" /LIBPATH:"%$(toolset)_PATH%\PlatformSDK\lib" /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,177 /I"%$(msvc)_PATH%\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:\\)
- }
-
- 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
-{
- exit "Unknown toolset $(toolset)!" ;
-}
-
-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) ;
-
- 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) ;
-}
+# Rules for Jamfile.jam + +if ( $(toolset:I=^mingw) || $(toolset) = "gcc" ) +{ + if ( $(toolset) = "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 ; + } + + actions ObjectAction + { + "$(GCCPATH)gcc" -W -Wall -Wextra -Werror -pedantic -c $(>) -o $(<) $(CCFLAGS) + } + + actions LibraryAction + { + "$(GCCPATH)ar" rc $(<) $(>) + } + + actions LinkAction + { + "$(GCCPATH)g++" $(>) -o $(<) -static-libgcc $(LDFLAGS) + } + + actions CoverageAction + { + "$(GCCPATH)gcov" $(>:\\) $(GCOVFLAGS) | perl tests/gcov-filter.pl + } +} +else if ( $(toolset:I=^msvc) ) +{ + CCFLAGS += /D$(defines) ; + + if ( $(configuration) = "debug" ) + { + CCFLAGS += /D_DEBUG /MTd ; + } + else + { + CCFLAGS += /DNDEBUG /Ox /MT ; + } + + if ( $(toolset) != msvc6 ) + { + CCFLAGS += /Wp64 /W4 ; + } + else + { + CCFLAGS += /W3 ; # lots of warnings at W4 in standard library + } + + 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:$(<) $(>) /LIBPATH:"%$(toolset)_PATH%\lib$(postfix)" /LIBPATH:"%$(toolset)_PATH%\PlatformSDK\lib" /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,177 /I"%$(msvc)_PATH%\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:\\) + } + + 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 +{ + 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) ; + + 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) ; +} |