# Copyright (C) Christopher Currie 2003. Permission to copy, use, # modify, sell and distribute this software is granted provided this # copyright notice appears in all copies. This software is provided # "as is" without express or implied warranty, and with no claim as # to its suitability for any purpose. import property ; import generators ; import os ; import toolset : flags ; import feature ; import type ; feature.extend toolset : sun ; toolset.inherit sun : unix ; feature.subfeature toolset sun : version ; # Installation root to use for versionless toolset .root = "/opt/SUNWspro/bin/" ; rule init ( version ? : root ? ) { # If version is not provided, change the global variable if ! $(version) { if ! $(root) { # versionless and rootless, we assume that user has CC # in the path, so we try and find it, and set up the # paths accordingly import regex ; import modules ; local SUNCC = [ GLOB [ modules.peek : Path ] [ modules.peek : PATH ] : CC ] ; root = $(SUNCC[1]:D) ; root = $(root:P) ; } if $(root) { toolset.flags sun .root sun : $(root)/bin/ ; } } else { feature exetend-subfeature toolset sun : version : $(version) ; local condition = sun-$(version) ; root = $(root)/bin/ ; root ?= "" ; toolset.flags sun .root $(condition) : $(root) ; } # this return is needed, because if absent the unversion/unrooted # case doesn't work at all return ; } # Declare generators generators.register-c-compiler sun.compile.c : C : OBJ : sun ; generators.register-c-compiler sun.compile.c++ : CPP : OBJ : sun ; # Declare flags and actions for compilation flags sun.compile OPTIONS on : -g ; flags sun.compile OPTIONS on : -xprofile=tcov ; flags sun.compile OPTIONS speed : -fast -xarch=generic ; flags sun.compile OPTIONS space : -xO2 -xspace ; flags sun.compile OPTIONS multi : -mt ; flags sun.compile.c++ OPTIONS off : +d ; flags sun.compile OPTIONS ; flags sun.compile.c++ OPTIONS ; flags sun.compile DEFINES ; flags sun.compile INCLUDES ; actions compile.c { "$(.root)cc" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" } actions compile.c++ { "$(.root)CC" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)" } # Declare flags and actions for linking flags sun.link OPTIONS on : -g ; # Strip the binary when no debugging is needed flags sun.link OPTIONS off : -s ; flags sun.link OPTIONS on : -xprofile=tcov ; flags sun.link OPTIONS multi : -mt ; flags sun.link OPTIONS ; flags sun.link LINKPATH ; flags sun.link FINDLIBS-ST ; flags sun.link FINDLIBS-SA ; flags sun.link LIBRARIES ; flags sun.link LINK-RUNTIME static : static ; flags sun.link LINK-RUNTIME shared : dynamic ; flags sun.link RPATH ; rule link ( targets * : sources * : properties * ) { SPACE on $(targets) = " " ; } actions link bind LIBRARIES { "$(.root)CC" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME) } # Slight mods for dlls rule link.dll ( targets * : sources * : properties * ) { SPACE on $(targets) = " " ; } actions link.dll bind LIBRARIES { "$(.root)CC" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" -h$(<[1]:D=) -G "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME) } # Declare action for creating static libraries actions piecemeal archive { "$(.root)CC" -xar -o "$(<)" "$(>)" }