mirror of
https://github.com/boostorg/build.git
synced 2026-02-16 13:22:11 +00:00
378 lines
13 KiB
Plaintext
378 lines
13 KiB
Plaintext
#~ Copyright 2004-2005 Rene Rivera.
|
|
#~ Distributed under the Boost Software License, Version 1.0.
|
|
#~ (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
# The following #// line will be used by the regression test table generation
|
|
# program as the column heading for HTML tables. Must not include version number.
|
|
#//<a href="http://www.metrowerks.com/MW/Develop/Desktop/default.htm">Metrowerks<br>CodeWarrior</a>
|
|
|
|
# For adding framwork libraries; like <framework>Python, <framework>Carbon, etc.
|
|
free-feature framework ;
|
|
|
|
# singleton variables...
|
|
set-as-singleton CW_ROOT CWFOLDER CWFolder CWINSTALL ;
|
|
|
|
flags cw cw-version : $(CW_VERSION) ;
|
|
flags cw cw-root : $(CW_ROOT) ;
|
|
|
|
cw-root ?= $(CWFolder) ;
|
|
cw-root ?= $(CWFOLDER) ;
|
|
|
|
if $(NT)
|
|
{
|
|
for local v in 9.0 8.0 7.0 6.0
|
|
{
|
|
cw-root-$(v) ?= [ W32_GETREG "HKEY_LOCAL_MACHINE\\SOFTWARE\\Metrowerks\\CodeWarrior for Windows\\$(v)" : "PATH" ] ;
|
|
cw-version ?= [ conditional $(cw-root-$(v)) : $(v) ] ;
|
|
}
|
|
}
|
|
|
|
cw-root ?= $(cw-root-$(cw-version)) ;
|
|
|
|
flags cw CFLAGS <cflags> ;
|
|
flags cw C++FLAGS <cxxflags> ;
|
|
flags cw DEFINES <define> ;
|
|
flags cw UNDEFS <undef> ;
|
|
flags cw HDRS <include> ;
|
|
flags cw SYSHDRS <sysinclude> ;
|
|
flags cw LINKFLAGS <linkflags> ;
|
|
flags cw ARFLAGS <arflags> ;
|
|
flags cw LIBPATH <library-path> ;
|
|
flags cw NEEDLIBS <library-file> ;
|
|
flags cw FINDLIBS <find-library> ;
|
|
flags cw PREFIX <prefix> ;
|
|
if $(OS) = MACOSX
|
|
{
|
|
flags cw FRAMEWORKS <framework> ;
|
|
}
|
|
|
|
flags cw cw-errors <errors> ;
|
|
flags cw cw-warnings <warnings> ;
|
|
|
|
# Debug information
|
|
flags cw CFLAGS <debug-symbols>on : -g ;
|
|
flags cw LINKFLAGS <debug-symbols>on : -g ;
|
|
|
|
# Optimizations
|
|
flags cw CFLAGS <optimization>off : -O0 ;
|
|
flags cw CFLAGS <optimization>speed : -opt full ;
|
|
flags cw CFLAGS <optimization>space : -O4,s "-opt intrinsics" ;
|
|
|
|
flags cw CFLAGS <inlining>off : -inline off ;
|
|
flags cw CFLAGS <inlining>on : -inline on ;
|
|
flags cw CFLAGS <inlining>full : -inline auto -inline level=8 ;
|
|
|
|
# Target type
|
|
flags cw LINKFLAGS <target-type>$(SHARED_TYPES) : -shared ;
|
|
if $(NT)
|
|
{
|
|
flags cw LINKFLAGS <target-type>$(SHARED_TYPES) : "-export dllexport" ;
|
|
}
|
|
|
|
# Some language related options
|
|
flags cw CFLAGS <eh-model>msvc : -exc ms ;
|
|
flags cw CFLAGS <include-search>directory : "-cwd proj" ;
|
|
flags cw CFLAGS <include-search>source : "-cwd source" ;
|
|
flags cw CFLAGS <include-search>paths : "-cwd explicit" ;
|
|
flags cw CFLAGS <include-search>relative : "-cwd include" ;
|
|
flags cw C++FLAGS <rtti>off : "-RTTI off" ;
|
|
flags cw C++FLAGS <rtti>on : "-RTTI on" ;
|
|
# CodeWarrior on MacOS defaults to wchar_t support off, contrary
|
|
# to what it does on Windows. So "fix" this discrepancy. Don't
|
|
# bother with OS type just set this to on for all. After all it's
|
|
# standard!
|
|
flags cw CFLAGS : "-wchar_t on" ;
|
|
|
|
# OS subsystem target
|
|
if $(NT)
|
|
{
|
|
flags cw LINKFLAGS <user-interface>console : "-subsystem console" ;
|
|
flags cw LINKFLAGS <user-interface>gui : "-subsystem windows" ;
|
|
flags cw LINKFLAGS <user-interface>wince : "-subsystem wince" ;
|
|
flags cw LINKFLAGS <user-interface>native : "-subsystem native" ;
|
|
flags cw LINKFLAGS <user-interface>auto : "-subsystem auto" ;
|
|
}
|
|
|
|
# Errors, default to maximum 5 errors
|
|
flags cw FLAGS : [ conditional $(cw-errors) : "-maxerrors $(cw-errors[1])" : "-maxerrors 5" ] ;
|
|
|
|
# Warnings, default to maximum 20 warnings
|
|
if off in $(cw-warnings)
|
|
{
|
|
flags cw FLAGS : "-warnings off" ;
|
|
}
|
|
else if error in $(cw-warnings)
|
|
{
|
|
flags cw FLAGS : "-warnings error" ;
|
|
}
|
|
else
|
|
{
|
|
flags cw FLAGS : "-warnings on" ;
|
|
}
|
|
if ! ( off in $(cw-warnings) )
|
|
{
|
|
if [ MATCH "^([0-9]+)" : $(cw-warnings) ]
|
|
{
|
|
local cw-maxwarnings = [ MATCH "^([0-9]+)" : $(cw-warnings) ] ;
|
|
cw-warnings = [ difference $(cw-warnings) : $(cw-maxwarnings) ] ;
|
|
flags cw FLAGS : "-maxwarnings $(cw-maxwarnings[1])" ;
|
|
}
|
|
else
|
|
{
|
|
flags cw FLAGS : "-maxwarnings 20" ;
|
|
}
|
|
}
|
|
cw-warnings = [ difference $(cw-warnings) : on off error ] ;
|
|
if $(cw-warnings)
|
|
{
|
|
flags cw CFLAGS <warnings>no-illegal-pragmas : "-warnings nopragmas" ;
|
|
flags cw CFLAGS <warnings>illegal-pragmas : "-warnings pragmas" ;
|
|
flags cw CFLAGS <warnings>no-empty-declarations : "-warnings noempty" ;
|
|
flags cw CFLAGS <warnings>empty-declarations : "-warnings empty" ;
|
|
flags cw CFLAGS <warnings>no-empty-declarations : "-warnings noempty" ;
|
|
flags cw CFLAGS <warnings>empty-declarations : "-warnings empty" ;
|
|
flags cw CFLAGS <warnings>no-unwanted-effect : "-warnings nounwanted" ;
|
|
flags cw CFLAGS <warnings>unwanted-effect : "-warnings unwanted" ;
|
|
flags cw CFLAGS <warnings>no-unused-arg : "-warnings nounusedarg" ;
|
|
flags cw CFLAGS <warnings>unused-arg : "-warnings unsedarg" ;
|
|
flags cw CFLAGS <warnings>no-unused-var : "-warnings nounusedvar" ;
|
|
flags cw CFLAGS <warnings>unused-var : "-warnings unsedvar" ;
|
|
flags cw CFLAGS <warnings>no-extra-comma : "-warnings nocomma" ;
|
|
flags cw CFLAGS <warnings>extra-comma : "-warnings comma" ;
|
|
flags cw CFLAGS <warnings>no-pedantic : "-warnings nopedantic" ;
|
|
flags cw CFLAGS <warnings>pedantic : "-warnings pedantic" ;
|
|
flags cw CFLAGS <warnings>no-hidden-virtual : "-warnings nohidden" ;
|
|
flags cw CFLAGS <warnings>hidden-virtual : "-warnings hidden" ;
|
|
flags cw CFLAGS <warnings>no-implicit-convert : "-warnings noimplicit" ;
|
|
flags cw CFLAGS <warnings>implicit-convert : "-warnings implicit" ;
|
|
flags cw CFLAGS <warnings>no-not-inlined : "-warnings nonotinlined" ;
|
|
flags cw CFLAGS <warnings>not-inlined : "-warnings notinlined" ;
|
|
flags cw CFLAGS <warnings>no-inconsistent-class : "-warnings nostructclass" ;
|
|
flags cw CFLAGS <warnings>inconsistent-class : "-warnings structclass" ;
|
|
if $(NT)
|
|
{
|
|
flags cw CFLAGS <warnings>no-unused-expresssion : "-warnings nounusedexpr" ;
|
|
flags cw CFLAGS <warnings>unused-expresssion : "-warnings unsedexpr" ;
|
|
flags cw CFLAGS <warnings>no-structure-pad : "-warnings nopadding" ;
|
|
flags cw CFLAGS <warnings>structure-pad : "-warnings padding" ;
|
|
flags cw CFLAGS <warnings>no-unused-return : "-warnings nonotused" ;
|
|
flags cw CFLAGS <warnings>unused-return : "-warnings notused" ;
|
|
flags cw CFLAGS <warnings>no-pointer-conversion : "-warnings noptrintconv" ;
|
|
flags cw CFLAGS <warnings>pointer-conversion : "-warnings ptrintconv" ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if $(NT)
|
|
{
|
|
flags cw CFLAGS : "-warnings nounusedexpr,nounused" ;
|
|
}
|
|
else
|
|
{
|
|
flags cw CFLAGS : "-warnings nounused" ;
|
|
}
|
|
}
|
|
|
|
# Search for files in search paths
|
|
flags cw LINKFLAGS : -search ;
|
|
flags cw ARFLAGS : -search ;
|
|
|
|
# Version specific options
|
|
if $(cw-version) in 8.0 9.0
|
|
{
|
|
# Use latest ISO conforming templates
|
|
flags cw C++FLAGS : -iso_templates on ;
|
|
|
|
if $(NT)
|
|
{
|
|
# The runtime libraries
|
|
flags cw CFLAGS <runtime-link>static/<threading>single/<runtime-build>release : -runtime ss ;
|
|
flags cw CFLAGS <runtime-link>static/<threading>single/<runtime-build>debug : -runtime ssd ;
|
|
|
|
flags cw CFLAGS <runtime-link>static/<threading>multi/<runtime-build>release : -runtime sm ;
|
|
flags cw CFLAGS <runtime-link>static/<threading>multi/<runtime-build>debug : -runtime smd ;
|
|
|
|
flags cw CFLAGS <runtime-link>dynamic/<runtime-build>release : -runtime dm ;
|
|
flags cw CFLAGS <runtime-link>dynamic/<runtime-build>debug : -runtime dmd ;
|
|
}
|
|
}
|
|
if $(NT) && $(cw-version) in 6.0 7.0 8.0
|
|
{
|
|
flags cw PREFIX <user-interface>console/<runtime-link>dynamic : UseDLLPrefix.h ;
|
|
}
|
|
if $(NT) && $(cw-version) in 7.0
|
|
{
|
|
# The runtime libraries
|
|
flags cw STDLIBS <runtime-link>static/<runtime-build>release :
|
|
MSL_C_x86.lib MSL_Runtime_x86.lib msl_c++_x86.lib gdi32.lib user32.lib kernel32.lib ;
|
|
flags cw STDLIBS <runtime-link>dynamic/<runtime-build>release :
|
|
MSL_All-DLL_x86.lib gdi32.lib user32.lib kernel32.lib ;
|
|
flags cw STDLIBS <runtime-link>static/<runtime-build>debug :
|
|
MSL_C_x86_D.lib MSL_Runtime_x86_D.lib msl_c++_x86_D.lib gdi32.lib user32.lib kernel32.lib ;
|
|
flags cw STDLIBS <runtime-link>dynamic/<runtime-build>debug :
|
|
MSL_All-DLL_x86_D.lib gdi32.lib user32.lib kernel32.lib ;
|
|
}
|
|
if $(NT) && $(cw-version) in 6.0
|
|
{
|
|
# The runtime libraries
|
|
flags cw STDLIBS <runtime-link>static :
|
|
ansicx86.lib mwcrtl.lib ansicppx86.lib gdi32.lib user32.lib kernel32.lib ;
|
|
flags cw STDLIBS <runtime-link>dynamic :
|
|
mwcrtldll.lib gdi32.lib user32.lib kernel32.lib ;
|
|
}
|
|
|
|
# The paths to system and runtime libraries
|
|
if $(NT)
|
|
{
|
|
flags cw CW_SETUP : "call \"$(cw-root)\\Other Metrowerks Tools\\Command Line Tools\\cwenv.bat\" -quiet" ;
|
|
# This is needed after the setup because the CW-9 setup erronously sets the
|
|
# ERRORLEVEL pseudo-var directly overriding the real value. The aregument is
|
|
# quoted to prevent the value from getting set to " " because bjam insertes
|
|
# extra spaces at the end of action commands.
|
|
flags cw CW_CLEAR_ERROR : "set \"ERRORLEVEL=\"" ;
|
|
flags cw CW_LINK_SETUP : "set MWWinx86LibraryFiles=" ;
|
|
flags cw CW_IMPLIB_COMMAND : "-implib " ;
|
|
flags cw CW_RUN_PATH :
|
|
"$(cw-root)\\Win32-x86 Support\\Libraries\\Runtime"
|
|
"$(cw-root)\\Win32-x86 Support\\Libraries\\Runtime\\Libs\\MSL_All-DLLs" ;
|
|
|
|
flags cw STDLIBPATH : "$(cw-root)\\Win32-x86 Support\\Libraries\\Win32 SDK" ;
|
|
flags cw STDLIBPATH <runtime-link>static : "$(cw-root)\\Win32-x86 Support\\Libraries\\Runtime\\Libs" ;
|
|
flags cw STDLIBPATH <runtime-link>dynamic : "$(cw-root)\\Win32-x86 Support\\Libraries\\Runtime\\Libs\\MSL_All-DLLs" ;
|
|
}
|
|
|
|
# Don't wrap tool messages, they just confuse everyone :-)
|
|
flags cw FLAGS : -nowraplines ;
|
|
|
|
flags cw CW_PREFIX : "-prefix " ;
|
|
|
|
# CodeWarrior has it's own set of standard headers, so ignore the default.
|
|
flags cw STDHDRS : ;
|
|
|
|
# MacOSX.. only the MSL/Carbon/Mach-O combination is working.
|
|
if $(OS) = MACOSX
|
|
{
|
|
# We use the compiler for both compiles and link, because we may need
|
|
# to compile the console stubs source. The compiler passes all options
|
|
# down to the linker anyway.
|
|
flags cw MWCC : mwcc ;
|
|
flags cw MWLD : mwcc ;
|
|
# For Carbon we need this prefix file to tell CW that's what we are targetting.
|
|
flags cw PREFIX : MSLCarbonPrefix.h ;
|
|
# We need to add the framework, as it's not added automatically.
|
|
flags cw FRAMEWORKS : Carbon ;
|
|
# For comsole apps we need to compile in the MSL functions that will
|
|
# talk to the MacOSX console.
|
|
flags cw LINKFLAGS <user-interface>console :
|
|
"-prefix MSLCarbonPrefix.h"
|
|
"\"$(CWINSTALL)/MSL/MSL_C/MSL_MacOS/Src/console_OS_X.c\"" ;
|
|
}
|
|
|
|
if $(NT)
|
|
{
|
|
flags cw MWCC : mwcc ;
|
|
flags cw MWLD : mwld ;
|
|
}
|
|
|
|
#~ flags cw CFLAGS : -verbose ;
|
|
#~ flags cw LINKFLAGS : -verbose ;
|
|
|
|
#### Link ####
|
|
rule Link-action
|
|
{
|
|
_ on $(<) = " " ;
|
|
gRUN_PATH($(<)) += $(CW_RUN_PATH) ;
|
|
if $(NT)
|
|
{
|
|
# We can't have the mixture of the same libs going in NEEDLIBS and FINDLIBS.
|
|
# So remove the extras from FINDLIBS.
|
|
local find-libs =
|
|
[ difference
|
|
[ on $(<[1]) return $(FINDLIBS) ] :
|
|
$(gTARGET_BASENAME($(gTARGET_SUBVARIANT($(NEEDLIBS))))) ] ;
|
|
FINDLIBS on $(<) = $(find-libs)$(SUFLIB) ;
|
|
|
|
CMD on $(<) = "@" ;
|
|
with-command-file cw-Link-action $(<) : $(>) $(NEEDLIBS) $(NEEDIMPS) ;
|
|
}
|
|
else if $(OS) = MACOSX
|
|
{
|
|
local find-libs = [ on $(<[1]) return $(FINDLIBS) ] ;
|
|
FINDLIBS on $(<) = -l$(find-libs) ;
|
|
|
|
CMD on $(<) = "" ;
|
|
cw-Link-action $(<) : $(>) $(NEEDLIBS) $(NEEDIMPS) ;
|
|
}
|
|
}
|
|
|
|
actions cw-Link-action
|
|
{
|
|
$(CW_SETUP)
|
|
$(CW_CLEAR_ERROR)
|
|
$(CW_LINK_SETUP)$(STDLIBS:J=;)
|
|
$(MWLD) $(FLAGS) $(LINKFLAGS) "-L$(LIBPATH)" "-L$(STDLIBPATH)" -framework$(_)"$(FRAMEWORKS)" $(CW_IMPLIB_COMMAND)"$(<[2])" -o "$(<[1])" $(CMD)"$(>)" "$(FINDLIBS)"
|
|
}
|
|
|
|
#### Cc #####
|
|
rule Cc-action
|
|
{
|
|
_ on $(<) = " " ;
|
|
cw-Cc-action $(<) : $(>) ;
|
|
}
|
|
|
|
actions cw-Cc-action
|
|
{
|
|
$(CW_SETUP)
|
|
$(CW_CLEAR_ERROR)
|
|
$(MWCC) -c -lang c -U$(UNDEFS) -D$(DEFINES) $(FLAGS) $(CFLAGS) "-I$(HDRS)" -I-$(_)"-I$(STDHDRS)" -I-$(_)"-I$(SYSHDRS)" $(CW_PREFIX)"$(PREFIX)" -o "$(<)" "$(>)"
|
|
}
|
|
|
|
#### C++ ####
|
|
rule C++-action
|
|
{
|
|
_ on $(<) = " " ;
|
|
cw-C++-action $(<) : $(>) ;
|
|
}
|
|
|
|
actions cw-C++-action
|
|
{
|
|
$(CW_SETUP)
|
|
$(CW_CLEAR_ERROR)
|
|
$(MWCC) -c -lang c++ -U$(UNDEFS) -D$(DEFINES) $(FLAGS) $(CFLAGS) $(C++FLAGS) "-I$(HDRS)" -I-$(_)"-I$(STDHDRS)" -I-$(_)"-I$(SYSHDRS)" $(CW_PREFIX)"$(PREFIX)" -o "$(<)" "$(>)"
|
|
}
|
|
|
|
#### Archive ####
|
|
rule Archive-action
|
|
{
|
|
_ on $(<) = " " ;
|
|
if $(NT)
|
|
{
|
|
local find-libs = [ on $(<[1]) return $(FINDLIBS) ] ;
|
|
FINDLIBS on $(<) = $(find-libs)$(SUFLIB) ;
|
|
|
|
CMD on $(<) = "@" ;
|
|
with-command-file cw-Archive-action $(<) : $(>) [ on $(<) return $(NEEDLIBS) ] ;
|
|
}
|
|
else if $(OS) = MACOSX
|
|
{
|
|
local find-libs = [ on $(<[1]) return $(FINDLIBS) ] ;
|
|
FINDLIBS on $(<) = -l$(find-libs) ;
|
|
|
|
CMD on $(<) = "" ;
|
|
cw-Archive-action $(<) : $(>) [ on $(<) return $(NEEDLIBS) ] ;
|
|
}
|
|
}
|
|
|
|
## CW in general doesn't produce archive that ranlib is intereted in. So
|
|
## don't run ranlib.
|
|
rule Ranlib-action
|
|
{
|
|
}
|
|
|
|
actions together cw-Archive-action
|
|
{
|
|
$(CW_SETUP)
|
|
$(CW_CLEAR_ERROR)
|
|
$(MWLD) -library $(FLAGS) $(ARFLAGS) "-L$(LIBPATH)" "-L$(STDLIBPATH)" -o "$(<)" $(CMD)"$(>)" "$(FINDLIBS)"
|
|
}
|