mirror of
https://github.com/boostorg/build.git
synced 2026-02-15 13:02:11 +00:00
Patch from Spencer E. Olson. Here's the explanation from email: The version of pathscale that I have access to is 3.2 and there doesn't seem to be a pathf77 executable. The man pages do not reference it, and there is also not a -f77 option that specifies that the code is fortran 77. Rather, the man pages indicate that pathscale only recognizes the difference between free form and fixed form fortran instead of F77 vs F90 vs F95. Does anyone have an available installation that differs from this? If not, I'll submit another small patch for changing this to using pathf90 to compile f77 code--I've tested it and it appears to work well enough. [SVN r59508]
153 lines
5.5 KiB
Plaintext
153 lines
5.5 KiB
Plaintext
# Copyright 2006 Noel Belcourt
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
import property ;
|
|
import generators ;
|
|
import toolset : flags ;
|
|
import feature ;
|
|
import type ;
|
|
import common ;
|
|
import fortran ;
|
|
|
|
feature.extend toolset : pathscale ;
|
|
toolset.inherit pathscale : unix ;
|
|
generators.override pathscale.prebuilt : builtin.prebuilt ;
|
|
generators.override pathscale.searched-lib-generator : searched-lib-generator ;
|
|
|
|
# Documentation and toolchain description located
|
|
# http://www.pathscale.com/docs.html
|
|
|
|
rule init ( version ? : command * : options * )
|
|
{
|
|
local condition = [ common.check-init-parameters pathscale : version $(version) ] ;
|
|
|
|
command = [ common.get-invocation-command pathscale : pathCC : $(command) ] ;
|
|
|
|
common.handle-options pathscale : $(condition) : $(command) : $(options) ;
|
|
|
|
toolset.flags pathscale.compile.fortran90 OPTIONS $(condition) :
|
|
[ feature.get-values <fflags> : $(options) ] : unchecked ;
|
|
|
|
command_c = $(command_c[1--2]) $(command[-1]:B=pathcc) ;
|
|
|
|
toolset.flags pathscale CONFIG_C_COMMAND $(condition) : $(command_c) ;
|
|
|
|
# fortran support
|
|
local f-command = [ common.get-invocation-command pathscale : pathf90 : $(command) ] ;
|
|
local command_f = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
|
|
local command_f90 = $(command_f[1--2]) $(f-command[-1]:B=pathf90) ;
|
|
|
|
toolset.flags pathscale CONFIG_F_COMMAND $(condition) : $(command_f) ;
|
|
toolset.flags pathscale CONFIG_F90_COMMAND $(condition) : $(command_f90) ;
|
|
|
|
# always link lib rt to resolve clock_gettime()
|
|
flags pathscale.link FINDLIBS-SA : rt : unchecked ;
|
|
}
|
|
|
|
# Declare generators
|
|
generators.register-c-compiler pathscale.compile.c : C : OBJ : <toolset>pathscale ;
|
|
generators.register-c-compiler pathscale.compile.c++ : CPP : OBJ : <toolset>pathscale ;
|
|
generators.register-fortran-compiler pathscale.compile.fortran : FORTRAN : OBJ : <toolset>pathscale ;
|
|
generators.register-fortran90-compiler pathscale.compile.fortran90 : FORTRAN90 : OBJ : <toolset>pathscale ;
|
|
|
|
# Declare flags and actions for compilation
|
|
flags pathscale.compile OPTIONS <debug-symbols>on : -g ;
|
|
flags pathscale.compile OPTIONS <profiling>on : -pg ;
|
|
flags pathscale.compile OPTIONS <link>shared : -fPIC ;
|
|
flags pathscale.compile OPTIONS <optimization>speed : -O2 ;
|
|
flags pathscale.compile OPTIONS <optimization>space : -Os ;
|
|
flags pathscale.compile OPTIONS <address-model>32 : -m32 ;
|
|
flags pathscale.compile OPTIONS <address-model>64 : -m64 ;
|
|
|
|
flags pathscale.compile OPTIONS <warnings>off : -woffall ;
|
|
flags pathscale.compile OPTIONS <warnings>on : -Wall ;
|
|
flags pathscale.compile OPTIONS <warnings>all : -Wall ;
|
|
|
|
flags pathscale.compile.c++ OPTIONS <inlining>off : -noinline ;
|
|
|
|
flags pathscale.compile OPTIONS <cflags> ;
|
|
flags pathscale.compile.c++ OPTIONS <cxxflags> ;
|
|
flags pathscale.compile DEFINES <define> ;
|
|
flags pathscale.compile INCLUDES <include> ;
|
|
|
|
flags pathscale.compile.fortran OPTIONS <fflags> ;
|
|
flags pathscale.compile.fortran90 OPTIONS <fflags> ;
|
|
|
|
actions compile.c
|
|
{
|
|
"$(CONFIG_C_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
|
|
}
|
|
|
|
actions compile.c++
|
|
{
|
|
"$(CONFIG_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
|
|
}
|
|
|
|
actions compile.fortran
|
|
{
|
|
"$(CONFIG_F_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
|
|
}
|
|
|
|
rule compile.fortran90 ( targets * : sources * : properties * )
|
|
{
|
|
# the space rule inserts spaces between targets and it's necessary
|
|
SPACE on $(targets) = " " ;
|
|
# Serialize execution of the compile.fortran90 action
|
|
# F90 source must be compiled in a particular order so we
|
|
# serialize the build as a parallel F90 compile might fail
|
|
JAM_SEMAPHORE on $(targets) = <s>pathscale-f90-semaphore ;
|
|
}
|
|
|
|
actions compile.fortran90
|
|
{
|
|
"$(CONFIG_F90_COMMAND)" $(OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -module $(<[1]:D) -c -o "$(<)" "$(>)"
|
|
}
|
|
|
|
# Declare flags and actions for linking
|
|
flags pathscale.link OPTIONS <debug-symbols>on : -g ;
|
|
# Strip the binary when no debugging is needed
|
|
flags pathscale.link OPTIONS <debug-symbols>off : -g0 ;
|
|
flags pathscale.link OPTIONS <profiling>on : -pg ;
|
|
flags pathscale.link OPTIONS <linkflags> ;
|
|
flags pathscale.link LINKPATH <library-path> ;
|
|
flags pathscale.link FINDLIBS-ST <find-static-library> ;
|
|
flags pathscale.link FINDLIBS-SA <find-shared-library> ;
|
|
flags pathscale.link FINDLIBS-SA <threading>multi : pthread ;
|
|
flags pathscale.link LIBRARIES <library-file> ;
|
|
flags pathscale.link LINK-RUNTIME <runtime-link>static : static ;
|
|
flags pathscale.link LINK-RUNTIME <runtime-link>shared : dynamic ;
|
|
flags pathscale.link RPATH <dll-path> ;
|
|
# On gcc, there are separate options for dll path at runtime and
|
|
# link time. On Solaris, there's only one: -R, so we have to use
|
|
# it, even though it's bad idea.
|
|
flags pathscale.link RPATH <xdll-path> ;
|
|
|
|
rule link ( targets * : sources * : properties * )
|
|
{
|
|
SPACE on $(targets) = " " ;
|
|
}
|
|
|
|
actions link bind LIBRARIES
|
|
{
|
|
"$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST)
|
|
}
|
|
|
|
# Slight mods for dlls
|
|
rule link.dll ( targets * : sources * : properties * )
|
|
{
|
|
SPACE on $(targets) = " " ;
|
|
}
|
|
|
|
actions link.dll bind LIBRARIES
|
|
{
|
|
"$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" -o "$(<)" -Wl,-soname$(SPACE)-Wl,$(<[1]:D=) -shared "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST)
|
|
}
|
|
|
|
# Declare action for creating static libraries
|
|
actions piecemeal archive
|
|
{
|
|
"$(CONFIG_COMMAND)" -ar -o "$(<)" "$(>)"
|
|
}
|