Fixed ninja binary location logic to use ninja.BIN_DIR. Previous logic no longer...
[scons.git] / SCons / Tool / ldc.py
blob6ee022aa3400e35b26180bab09049532dbe91f8d
1 # MIT License
3 # Copyright The SCons Foundation
5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 """SCons.Tool.ldc
27 Tool-specific initialization for the LDC compiler.
28 (https://github.com/ldc-developers/ldc)
30 Developed by Russel Winder (russel@winder.org.uk)
31 2012-05-09 onwards
33 Compiler variables:
34 DC - The name of the D compiler to use. Defaults to ldc2.
35 DPATH - List of paths to search for import modules.
36 DVERSIONS - List of version tags to enable when compiling.
37 DDEBUG - List of debug tags to enable when compiling.
39 Linker related variables:
40 LIBS - List of library files to link in.
41 DLINK - Name of the linker to use. Defaults to ldc2.
42 DLINKFLAGS - List of linker flags.
44 Lib tool variables:
45 DLIB - Name of the lib tool to use. Defaults to lib.
46 DLIBFLAGS - List of flags to pass to the lib tool.
47 LIBS - Same as for the linker. (libraries to pull into the .lib)
48 """
52 import SCons.Action
53 import SCons.Builder
54 import SCons.Defaults
55 import SCons.Scanner.D
56 import SCons.Tool
58 import SCons.Tool.DCommon as DCommon
61 def generate(env) -> None:
62 static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
64 static_obj.add_action('.d', SCons.Defaults.DAction)
65 shared_obj.add_action('.d', SCons.Defaults.ShDAction)
66 static_obj.add_emitter('.d', DCommon.DStaticObjectEmitter)
67 shared_obj.add_emitter('.d', DCommon.DSharedObjectEmitter)
69 env['DC'] = env.Detect('ldc2') or 'ldc2'
70 env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS $_DI_FLAGS -c -of=$TARGET $SOURCES'
71 env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}'
72 env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}'
73 env['_DDEBUGFLAGS'] = '${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)}'
75 env['_DI_FLAGS'] = "${DI_FILE_DIR and DI_FILE_DIR_PREFIX+DI_FILE_DIR+DI_FILE_DIR_SUFFFIX}"
77 env['_DFLAGS'] = '${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)}'
79 env['SHDC'] = '$DC'
80 env['SHDCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS $_DI_FLAGS -c -relocation-model=pic -of=$TARGET $SOURCES'
82 env['DPATH'] = ['#/']
83 env['DFLAGS'] = []
84 env['DVERSIONS'] = []
85 env['DDEBUG'] = []
87 if env['DC']:
88 DCommon.addDPATHToEnv(env, env['DC'])
90 env['DINCPREFIX'] = '-I='
91 env['DINCSUFFIX'] = ''
92 env['DVERPREFIX'] = '-version='
93 env['DVERSUFFIX'] = ''
94 env['DDEBUGPREFIX'] = '-debug='
95 env['DDEBUGSUFFIX'] = ''
96 env['DFLAGPREFIX'] = '-'
97 env['DFLAGSUFFIX'] = ''
98 env['DFILESUFFIX'] = '.d'
100 env['DI_FILE_DIR'] = ''
101 env['DI_FILE_SUFFIX'] = '.di'
103 env['DI_FILE_DIR_PREFIX'] = '-Hd='
104 env['DI_FILE_DIR_SUFFFIX'] = ''
106 env['DLINK'] = '$DC'
107 env['DLINKFLAGS'] = SCons.Util.CLVar('')
108 env['DLINKCOM'] = '$DLINK -of=$TARGET $DLINKFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS'
110 env['SHDLINK'] = '$DC'
111 env['SHDLINKFLAGS'] = SCons.Util.CLVar('$DLINKFLAGS -shared -defaultlib=phobos2-ldc')
113 env['SHDLINKCOM'] = '$DLINK -of=$TARGET $SHDLINKFLAGS $__SHDLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS -L-ldruntime-ldc'
115 env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l'
116 env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
117 # env['_DLIBFLAGS'] = '${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)}'
118 env['_DLIBFLAGS'] = '${_stripixes(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__, LIBLITERALPREFIX)}'
120 env['DLIBDIRPREFIX'] = '-L-L'
121 env['DLIBDIRSUFFIX'] = ''
122 env['_DLIBDIRFLAGS'] = '${_concat(DLIBDIRPREFIX, LIBPATH, DLIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)}'
124 env['DLIB'] = 'lib' if env['PLATFORM'] == 'win32' else 'ar cr'
125 env['DLIBCOM'] = '$DLIB $_DLIBFLAGS {}$TARGET $SOURCES $_DLIBFLAGS'.format('-c ' if env['PLATFORM'] == 'win32' else '')
127 # env['_DLIBFLAGS'] = '${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)}'
129 env['DLIBFLAGPREFIX'] = '-'
130 env['DLIBFLAGSUFFIX'] = ''
132 # __RPATH is set to $_RPATH in the platform specification if that
133 # platform supports it.
134 env['DRPATHPREFIX'] = '-L-Wl,-rpath,' if env['PLATFORM'] == 'darwin' else '-L-rpath='
135 env['DRPATHSUFFIX'] = ''
136 env['_DRPATH'] = '${_concat(DRPATHPREFIX, RPATH, DRPATHSUFFIX, __env__)}'
138 # Support for versioned libraries
139 env['_SHDLIBVERSIONFLAGS'] = '$SHDLIBVERSIONFLAGS -L-soname=$_SHLIBSONAME'
142 env['BUILDERS']['ProgramAllAtOnce'] = SCons.Builder.Builder(
143 action='$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -of=$TARGET $DLINKFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS',
144 emitter=DCommon.allAtOnceEmitter,
148 def exists(env):
149 return env.Detect('ldc2')
152 # Local Variables:
153 # tab-width:4
154 # indent-tabs-mode:nil
155 # End:
156 # vim: set expandtab tabstop=4 shiftwidth=4: