@@ -15,41 +15,55 @@ import sys
15
15
import subprocess
16
16
17
17
# ADT types.
18
- ADT_imports = ['EpochTracker' , 'iterator' , 'iterator_range' , 'Hashing' , 'None' , 'Optional' ,
19
- 'Statistic' , 'StringExtras' , 'STLExtras' , 'AllocatorList' , 'Triple' ]
18
+ ADT_imports = ['iterator' , 'iterator_range' , 'APFloat' , 'APInt' , 'APSInt' ,
19
+ 'AllocatorList' , 'EpochTracker' , 'Hashing' , 'None' , 'Optional' ,
20
+ 'Statistic' , 'StringExtras' , 'STLExtras' ]
20
21
21
22
# ADT basic data structures.
22
- ADT_imports += ['APFloat' , 'APInt' , 'APSInt' , 'ArrayRef' , 'PointerIntPair' , 'SetVector' , 'StringRef' , 'StringSwitch' ,
23
- 'Twine' , 'IntrusiveRefCntPtr' , 'ilist' , 'ilist_base' , 'ilist_node' , 'ilist_node_base' ,
24
- 'ilist_node_options' , 'ilist_iterator' , 'simple_ilist' , 'OptionSet' , 'PointerUnion' ]
23
+ ADT_imports += ['ArrayRef' , 'Bit' , 'PointerIntPair' , 'PointerUnion' , 'StringRef' ,
24
+ 'StringSwitch' , 'Triple' , 'Twine' , 'IntrusiveRefCntPtr' ,
25
+ 'ilist' , 'ilist_base' , 'ilist_node' , 'ilist_node_base' ,
26
+ 'ilist_node_options' , 'simple_ilist' , 'ilist_iterator' ]
25
27
26
28
# ADT Mapping structures.
27
- ADT_imports += ['DenseMap ' , 'DenseMapInfo ' , 'DenseSet ' , 'FoldingSet' , 'StringMap' , 'StringSet' ]
29
+ ADT_imports += ['DenseSet ' , 'DenseMap ' , 'DenseMapInfo ' , 'FoldingSet' , 'StringMap' , 'StringSet' ]
28
30
29
31
# ADT "Small" structures.
30
32
ADT_imports += ['SmallPtrSet' , 'SmallSet' , 'SmallString' , 'SmallVector' ]
31
33
32
34
# ADT Algorithms.
33
35
ADT_imports += ['edit_distance' ]
34
36
37
+ Demangle_imports = ['Demangle' , 'ItaniumDemangle' , 'MicrosoftDemangle' ,
38
+ 'Compiler' , 'MicrosoftDemangleNodes' , 'StringView' ,
39
+ 'Utility' ]
40
+
35
41
# Support types and infrastructure.
36
- Support_imports = [
37
- 'AlignOf' , 'Allocator' , 'Atomic' , 'CBindingWrapping' , 'Casting' , 'Capacity' , 'CommandLine' , 'Compiler' ,
38
- 'Endian' , 'Errno' , 'ErrorHandling' , 'Errc' , 'ErrorOr' , 'Error' , 'Format' ,
39
- 'ManagedStatic' , 'MathExtras' , 'Mutex' , 'MutexGuard' , 'Memory' ,
40
- 'MemoryBuffer' , 'PointerLikeTypeTraits' , 'Recycler' , 'SwapByteOrder' ,
41
- 'Timer' , 'TimeValue' , 'Threading' , 'Unicode' , 'UniqueLock' , 'Unix' , 'WindowsError' ,
42
- 'Valgrind' , 'circular_raw_ostream' , 'raw_ostream' , 'type_traits' , 'JSON' ]
42
+ Support_imports = [ 'AlignOf' , 'Allocator' , 'Atomic' , 'CBindingWrapping' ,
43
+ 'Casting' , 'Compiler' , 'CommandLine' , 'ConvertUTF' ,
44
+ 'ConvertUTFWrapper' , 'DJB' , 'Endian' , 'Errno' , 'Error' ,
45
+ 'ErrorHandling' , 'Errc' , 'ErrorOr' , 'Format' ,
46
+ 'ManagedStatic' , 'MathExtras' , 'MD5' , 'Mutex' ,
47
+ 'MutexGuard' , 'Memory' , 'MemoryBuffer' ,
48
+ 'PointerLikeTypeTraits' , 'Regex' , 'Recycler' ,
49
+ 'ReverseIteration' , 'SmallVectorMemoryBuffer' ,
50
+ 'StringSaver' , 'SwapByteOrder' , 'Timer' ,
51
+ 'Threading' , 'Unicode' , 'UniqueLock' , 'Unix' ,
52
+ 'WindowsError' , 'WindowsSupport' , 'Valgrind' ,
53
+ 'circular_raw_ostream' , 'raw_ostream' , 'type_traits' ]
43
54
44
55
# Stuff we don't want, but have to pull in.
45
- Support_imports += [
46
- 'COFF' , 'ConvertUTF' , 'ConvertUTFWrapper' , 'Debug' , 'FileSystem' ,
47
- 'FileUtilities' , 'Host' , 'Locale' , 'MachO' , 'Path' , 'Process' , 'Program' , 'SMLoc' ,
48
- 'SourceMgr' , 'Signals' , 'StringSaver' , 'ToolOutputFile' , 'TrailingObjects' , 'Unicode' , 'UnicodeCharRanges' ,
49
- 'MemAlloc' , 'Chrono' , 'FormatProviders' , 'FormatVariadic' , 'FormatCommon' ,
50
- 'FormatVariadicDetails' , 'NativeFormatting' , 'DJB' , 'ReverseIteration' , 'MD5' ,
51
- 'SmallVectorMemoryBuffer' , 'WithColor' , 'Options' , 'PrettyStackTrace' , 'Watchdog' ,
52
- 'TargetParser' , 'ARMBuildAttributes' , 'ARMTargetParser.def' , 'AArch64TargetParser.def' , 'X86TargetParser.def' , 'LineIterator' ]
56
+ Support_imports += [ 'APFloat' , 'ARMTargetParser' , 'AArch64TargetParser' ,
57
+ 'ARMBuildAttributes' , 'Chrono' , 'DataTypes' , 'Debug' ,
58
+ 'FileSystem' , 'FileUtilities' , 'FormatAdapters' ,
59
+ 'FormatCommon' , 'FormatProviders' ,
60
+ 'FormatVariadic' ,'FormatVariadicDetails' , 'Host' ,
61
+ 'LineIterator' , 'Locale' , 'MemAlloc' , 'NativeFormatting' ,
62
+ 'Options' , 'Path' , 'Process' , 'Program' , 'SMLoc' ,
63
+ 'SourceMgr' , 'Signals' , 'Support' , 'TargetParser' ,
64
+ 'Types' , 'Unicode' , 'UnicodeCaseFold' ,
65
+ 'UnicodeCharRanges' , 'VersionTuple' , 'WithColor' , 'X86TargetParser' ,
66
+ 'regex_impl' , 'regcomp' , 'regutils' , 'regex2' , 'regerror' , 'regexec' , 'regfree' , 'regstrlcpy' , 'regengine' ]
53
67
54
68
# Dependencies from llvm-c needed by Support.
55
69
C_imports = ['Types' , 'DataTypes' , 'Support' , 'ErrorHandling' ]
@@ -58,7 +72,7 @@ C_imports = ['Types', 'DataTypes', 'Support', 'ErrorHandling']
58
72
Support_imports += ['YAMLParser' , 'YAMLTraits' ]
59
73
60
74
# Source files to exclude.
61
- Support_source_excludes = set (['Host' ])
75
+ Support_source_excludes = set ([])
62
76
63
77
llvm_srcroot = None
64
78
sourcekit_srcroot = None
@@ -137,12 +151,32 @@ def main():
137
151
llvm_srcroot , = args
138
152
sourcekit_srcroot = os .path .dirname (os .path .dirname (os .path .abspath (__file__ )))
139
153
154
+ # Remove the old llvm import
155
+ sourcekit_llvm_include = os .path .join (sourcekit_srcroot , 'include' , 'llvm' )
156
+ sourcekit_llvm_lib = os .path .join (sourcekit_srcroot , 'lib' , 'LLVMSupport' )
157
+ if os .path .exists (sourcekit_llvm_include ):
158
+ shutil .rmtree (sourcekit_llvm_include )
159
+ if os .path .exists (sourcekit_llvm_lib ):
160
+ shutil .rmtree (sourcekit_llvm_lib )
161
+
162
+ # Add the platform specific config files
163
+ #
164
+ # NOTE: If you're updating to a newer llvm, you may have to manually merge
165
+ # these with the newer version produced by the llvm build
166
+ sourcekit_llvm_config = os .path .join (sourcekit_srcroot , 'Utilities' , 'import-llvm.d' , 'include' , 'llvm' , 'Config' )
167
+ shutil .copytree (sourcekit_llvm_config , os .path .join (sourcekit_llvm_include , 'Config' ))
168
+
140
169
def import_header (dir , name ):
141
170
src = os .path .join (llvm_srcroot , 'include' , 'llvm' , dir , name )
171
+ c_src = os .path .join (llvm_srcroot , 'include' , 'llvm-c' , name )
142
172
if os .path .exists (src ):
143
173
dst = os .path .join (sourcekit_srcroot , 'include' , 'llvm' , dir , name )
144
174
mkdir_p (os .path .dirname (dst ))
145
175
copyfile (src , dst )
176
+ if os .path .exists (c_src ):
177
+ dst = os .path .join (sourcekit_srcroot , 'include' , 'llvm-c' , name )
178
+ mkdir_p (os .path .dirname (dst ))
179
+ copyfile (c_src , dst )
146
180
147
181
def import_c_header (name ):
148
182
src = os .path .join (llvm_srcroot , 'include' , 'llvm-c' , name )
@@ -166,15 +200,26 @@ def main():
166
200
import_source ('Support' , name + '.c' )
167
201
import_source ('Support' , name + '.cpp' )
168
202
for name in Support_imports :
169
- if name .endswith ('.def' ):
170
- import_header ('Support' , name )
171
- continue
172
203
import_header ('Support' , name + '.h' )
204
+ import_header ('Support' , name + '.def' )
173
205
if name not in Support_source_excludes :
174
206
import_source ('Support' , name + '.c' )
207
+ import_source ('Support' , name + '.h' )
175
208
import_source ('Support' , name + '.cpp' )
209
+ import_source ('Support' , name + '.def' )
210
+ import_source ('Support' , name + '.inc' )
176
211
import_source ('Support' , os .path .join ('Unix' , name + '.h' ))
177
212
import_source ('Support' , os .path .join ('Unix' , name + '.inc' ))
213
+ import_source ('Support' , os .path .join ('Windows' , name + '.h' ))
214
+ import_source ('Support' , os .path .join ('Windows' , name + '.inc' ))
215
+ for name in Demangle_imports :
216
+ import_header ('Demangle' , name + '.h' )
217
+ import_source ('Demangle' , name + '.cpp' )
218
+
219
+ # Copy over all of demangle
220
+ demangle_src = os .path .join (llvm_srcroot , 'lib' , 'Demangle' )
221
+ demangle_dest = os .path .join (sourcekit_srcroot , 'lib' , 'LLVMSupport' , 'Demangle' )
222
+ #shutil.copytree(demangle_src, demangle_dest)
178
223
179
224
for name in C_imports :
180
225
import_c_header (name + '.h' )
@@ -190,6 +235,51 @@ def main():
190
235
191
236
include_dir = os .path .join (sourcekit_srcroot , 'include' )
192
237
238
+ # Create Symlinks for SwiftPM include directory resolution
239
+ os .makedirs (os .path .join (sourcekit_llvm_lib , 'Support' , 'include' , 'llvm' ))
240
+ os .makedirs (os .path .join (sourcekit_llvm_lib , 'Demangle' , 'include' ))
241
+ os .makedirs (os .path .join (sourcekit_llvm_lib , 'include' ))
242
+ os .makedirs (os .path .join (sourcekit_llvm_include , 'Demangle' , 'include' ))
243
+ os .symlink (os .path .join ('..' , '..' , '..' , '..' , '..' , 'include' , 'llvm' , 'ADT' ),
244
+ os .path .join (sourcekit_llvm_lib , 'Support' , 'include' , 'llvm' , 'ADT' ))
245
+ os .symlink (os .path .join ('..' , '..' , '..' , '..' , '..' , 'include' , 'llvm' , 'Config' ),
246
+ os .path .join (sourcekit_llvm_lib , 'Support' , 'include' , 'llvm' , 'Config' ))
247
+ os .symlink (os .path .join ('..' , '..' , '..' , '..' , '..' , 'include' , 'llvm' , 'Support' ),
248
+ os .path .join (sourcekit_llvm_lib , 'Support' , 'include' , 'llvm' , 'Support' ))
249
+ os .symlink (os .path .join ('..' , '..' , '..' , '..' , 'include' , 'llvm-c' ),
250
+ os .path .join (sourcekit_llvm_lib , 'Support' , 'include' , 'llvm-c' ))
251
+ os .symlink (os .path .join ('..' , '..' , '..' , '..' , 'include' , 'llvm' ),
252
+ os .path .join (sourcekit_llvm_lib , 'Demangle' , 'include' , 'llvm' ))
253
+ os .symlink (os .path .join ('..' , '..' , '..' , 'llvm' ),
254
+ os .path .join (sourcekit_llvm_include , 'Demangle' , 'include' , 'llvm' ))
255
+ os .symlink (os .path .join ('..' , '..' , '..' , 'include' , 'llvm' ),
256
+ os .path .join (sourcekit_llvm_lib , 'include' , 'llvm' ))
257
+ os .symlink (os .path .join ('..' , '..' , '..' , 'include' , 'llvm-c' ),
258
+ os .path .join (sourcekit_llvm_lib , 'include' , 'llvm-c' ))
259
+
260
+ copyfile (os .path .join (sourcekit_srcroot , 'Utilities' , 'import-llvm.d' , 'lib' , 'LLVMSupport' , 'include' , 'module.modulemap' ),
261
+ os .path .join (sourcekit_srcroot , 'lib' , 'LLVMSupport' , 'include' , 'module.modulemap' ))
262
+
263
+ copyfile (os .path .join (sourcekit_srcroot , 'Utilities' , 'import-llvm.d' , 'include' , 'llvm' , 'ADT' , 'OptionSet.h' ),
264
+ os .path .join (sourcekit_srcroot , 'include' , 'llvm' , 'ADT' , 'OptionSet.h' ))
265
+
266
+ # AArch64TargetParser uses a relative path to find the .def file, so we
267
+ # copy this one to the expected location :(
268
+ def_location = os .path .join (sourcekit_srcroot , 'lib' , 'include' , 'llvm' , 'Support' )
269
+ if os .path .exists (def_location ):
270
+ shutil .rmtree (def_location )
271
+ os .makedirs (def_location )
272
+ copyfile (os .path .join (sourcekit_srcroot , 'include' , 'llvm' , 'Support' , 'AArch64TargetParser.def' ),
273
+ os .path .join (def_location , 'AArch64TargetParser.def' ))
274
+
275
+ # Process.cpp uses LLVM_ENABLE_CRASH_DUMPS which is usually set in CMake.
276
+ # Since the Linux and Darwin builds use SwiftPM, this doesn't get set.
277
+ # We'll modify the file to set it via proprocessor
278
+ process_cpp = os .path .join (sourcekit_srcroot , 'lib' , 'LLVMSupport' , 'Support' , 'Process.cpp' )
279
+ with open (process_cpp , 'r+' ) as f :
280
+ content = f .read ()
281
+ f .seek (0 , 0 )
282
+ f .write ('#define LLVM_ENABLE_CRASH_DUMPS false\n ' + content )
193
283
for base in base_dirs :
194
284
for root , dirs , files in os .walk (base ):
195
285
for file in files :
0 commit comments