# Copyright 2001 David Abrahams. # Copyright 2004, 2005 Markus Schoepflin. # Copyright 2011, John Maddock # Copyright 2013, Cray, Inc. # 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) # # Cray C++ Compiler # See http://docs.cray.com/books/S-2179-50/html-S-2179-50/S-2179-50-toc.html # import feature generators common ; import toolset : flags ; feature.extend toolset : cray ; # Inherit from Unix toolset to get library ordering magic. toolset.inherit cray : unix ; generators.override cray.prebuilt : builtin.lib-generator ; generators.override cray.prebuilt : builtin.prebuilt ; generators.override cray.searched-lib-generator : searched-lib-generator ; rule init ( version ? : command * : options * ) { local condition = [ common.check-init-parameters cray : version $(version) ] ; local command = [ common.get-invocation-command cray : CC : $(command) ] ; if $(command) { local root = [ common.get-absolute-tool-path $(command[-1]) ] ; if $(root) { flags cray .root $(condition) : "\"$(root)\"/" ; } } # If we can't find 'CC' anyway, at least show 'CC' in the commands command ?= CC ; common.handle-options cray : $(condition) : $(command) : $(options) ; } generators.register-c-compiler cray.compile.c++ : CPP : OBJ : cray ; generators.register-c-compiler cray.compile.c : C : OBJ : cray ; # unlike most compliers, Cray defaults to static linking. # flags cxx LINKFLAGS static : -bstatic ; # flags cray.compile OPTIONS on : -G0 ; flags cray.compile OPTIONS on : -g ; # flags cray.link OPTIONS on : -G0 ; flags cray.link OPTIONS on : -g ; flags cray.compile OPTIONS off : -O0 ; flags cray.compile OPTIONS speed : -O2 ; flags cray.compile OPTIONS space : -O1 ; # flags cray.compile OPTIONS off : -hipa0 ; # flags cray.compile OPTIONS on : ; # flags cray.compile OPTIONS full : -hipa5 ; flags cray.compile OPTIONS ; flags cray.compile.c++ OPTIONS ; flags cray.compile DEFINES ; flags cray.compile INCLUDES ; flags cray.link OPTIONS ; flags cray.compile OPTIONS : -hgnu -fPIC -h system_alloc -h tolerant -h ipa0 ; flags cray.compile OPTIONS shared : -dynamic ; flags cray.compile OPTIONS static : -static ; flags cray.link OPTIONS static : -static ; flags cray.link OPTIONS shared ; flags cray.link LOPTIONS shared : -dynamic ; flags cray.link LIBPATH ; flags cray.link LIBRARIES ; flags cray.link FINDLIBS-ST ; flags cray.link FINDLIBS-SA ; actions link bind LIBRARIES { $(CONFIG_COMMAND) $(OPTIONS) $(LOPTIONS) -o "$(<)" -L$(LIBPATH) "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) } # When creating dynamic libraries, we don't want to be warned about unresolved # symbols, therefore all unresolved symbols are marked as expected by # '-expect_unresolved *'. This also mirrors the behaviour of the GNU tool # chain. actions link.dll bind LIBRARIES { $(CONFIG_COMMAND) -o "$(<[1])" -Wl,-h -Wl,$(<[-1]:D=) -shared -L$(LIBPATH) "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) $(OPTIONS) } # Note: Relaxed ANSI mode (-std) is used for compilation because in strict ANSI # C89 mode (-std1) the compiler doesn't accept C++ comments in C files. As -std # is the default, no special flag is needed. actions compile.c { $(.root:E=)cc -c $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" } # Note: The compiler is forced to compile the files as C++ (-x cxx) because # otherwise it will silently ignore files with no file extension. # # Note: We deliberately don't suppress any warnings on the compiler command # line, the user can always do this in a customized toolset later on. actions compile.c++ { $(CONFIG_COMMAND) -c $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -o "$(<)" "$(>)" } # Always create archive from scratch. See the gcc toolet for rationale. RM = [ common.rm-command ] ; actions together piecemeal archive { $(RM) "$(<)" ar rc $(<) $(>) }