Suppress warning "switch statement contains 'default' but no 'case' labels" on MSVC.
[oota-llvm.git] / CMakeLists.txt
1 # See docs/CMake.html for instructions about how to build LLVM with CMake.
2
3 project(LLVM)
4 cmake_minimum_required(VERSION 2.8)
5
6 # Add path for custom modules
7 set(CMAKE_MODULE_PATH
8   ${CMAKE_MODULE_PATH}
9   "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
10   "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
11   )
12
13 set(PACKAGE_VERSION "2.9")
14
15 include(VersionFromVCS)
16
17 option(LLVM_APPEND_VC_REV
18   "Append the version control system revision id to LLVM version" OFF)
19
20 if( LLVM_APPEND_VC_REV )
21   add_version_info_from_vcs(PACKAGE_VERSION)
22 endif()
23
24 set(PACKAGE_NAME llvm)
25 set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
26 set(PACKAGE_BUGREPORT "llvmbugs@cs.uiuc.edu")
27
28 if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
29   message(FATAL_ERROR "In-source builds are not allowed.
30 CMake would overwrite the makefiles distributed with LLVM.
31 Please create a directory and run cmake from there, passing the path
32 to this source directory as the last argument.
33 This process created the file `CMakeCache.txt' and the directory `CMakeFiles'.
34 Please delete them.")
35 endif()
36
37 # Run-time build mode; It is used for unittests.
38 if(MSVC_IDE)
39   # Expect "$(Configuration)", "$(OutDir)", etc.
40   # It is expanded by msbuild or similar.
41   set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
42 elseif(NOT CMAKE_BUILD_TYPE STREQUAL "")
43   # Expect "Release" "Debug", etc.
44   # Or unittests could not run.
45   set(RUNTIME_BUILD_MODE ${CMAKE_BUILD_TYPE})
46 else()
47   # It might be "."
48   set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}")
49 endif()
50
51 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
52
53 set(LLVM_MAIN_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR})
54 set(LLVM_MAIN_INCLUDE_DIR ${LLVM_MAIN_SRC_DIR}/include)
55 set(LLVM_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
56 set(LLVM_TOOLS_BINARY_DIR ${LLVM_BINARY_DIR}/bin)
57 set(LLVM_EXAMPLES_BINARY_DIR ${LLVM_BINARY_DIR}/examples)
58 set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
59
60 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
61   file(GLOB_RECURSE
62     tablegenned_files_on_include_dir
63     "${LLVM_MAIN_SRC_DIR}/include/llvm/*.gen")
64   file(GLOB_RECURSE
65     tablegenned_files_on_lib_dir
66     "${LLVM_MAIN_SRC_DIR}/lib/Target/*.inc")
67   if( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir)
68     message(FATAL_ERROR "Apparently there is a previous in-source build,
69 probably as the result of running `configure' and `make' on
70 ${LLVM_MAIN_SRC_DIR}.
71 This may cause problems. The suspicious files are:
72 ${tablegenned_files_on_lib_dir}
73 ${tablegenned_files_on_include_dir}
74 Please clean the source directory.")
75   endif()
76 endif()
77
78 set(LLVM_ALL_TARGETS
79   Alpha
80   ARM
81   Blackfin
82   CBackend
83   CellSPU
84   CppBackend
85   Mips
86   MBlaze
87   MSP430
88   PowerPC
89   PTX
90   Sparc
91   SystemZ
92   X86
93   XCore
94   )
95
96 if( MSVC )
97   set(LLVM_TARGETS_TO_BUILD X86
98     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
99 else( MSVC )
100   set(LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS}
101     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
102 endif( MSVC )
103
104 set(CLANG_RESOURCE_DIR "" CACHE STRING
105   "Relative directory from the Clang binary to its resource files.")
106
107 option(LLVM_ENABLE_CBE_PRINTF_A "Set to ON if CBE is enabled for printf %a output" ON)
108 if(LLVM_ENABLE_CBE_PRINTF_A)
109   set(ENABLE_CBE_PRINTF_A 1)
110 endif()
111
112 option(LLVM_ENABLE_TIMESTAMPS "Enable embedding timestamp information in build" ON)
113 if(LLVM_ENABLE_TIMESTAMPS)
114   set(ENABLE_TIMESTAMPS 1)
115 endif()
116
117 set(C_INCLUDE_DIRS "" CACHE STRING
118   "Colon separated list of directories clang will search for headers.")
119
120 set(LLVM_TARGET_ARCH "host"
121   CACHE STRING "Set target to use for LLVM JIT or use \"host\" for automatic detection.")
122
123 set(LIT_ARGS_DEFAULT "-sv")
124 if (MSVC OR XCODE)
125   set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar")
126 endif()
127 set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}"
128     CACHE STRING "Default options for lit")
129
130 option(LLVM_ENABLE_THREADS "Use threads if available." ON)
131
132 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
133   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF)
134 else()
135   option(LLVM_ENABLE_ASSERTIONS "Enable assertions" ON)
136 endif()
137
138 if( LLVM_ENABLE_ASSERTIONS )
139   # MSVC doesn't like _DEBUG on release builds. See PR 4379.
140   if( NOT MSVC )
141     add_definitions( -D_DEBUG )
142   endif()
143   # On Release builds cmake automatically defines NDEBUG, so we
144   # explicitly undefine it:
145   if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
146     add_definitions( -UNDEBUG )
147   endif()
148 else()
149   if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
150     add_definitions( -DNDEBUG )
151   endif()
152 endif()
153
154 if( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
155   set( LLVM_TARGETS_TO_BUILD ${LLVM_ALL_TARGETS} )
156 endif()
157
158 set(LLVM_ENUM_TARGETS "")
159 foreach(c ${LLVM_TARGETS_TO_BUILD})
160   list(FIND LLVM_ALL_TARGETS ${c} idx)
161   if( idx LESS 0 )
162     message(FATAL_ERROR "The target `${c}' does not exist.
163     It should be one of\n${LLVM_ALL_TARGETS}")
164   else()
165     set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${c})\n")
166   endif()
167 endforeach(c)
168
169 # Produce llvm/Config/Targets.def
170 configure_file(
171   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Targets.def.in
172   ${LLVM_BINARY_DIR}/include/llvm/Config/Targets.def
173   )
174
175 set(llvm_builded_incs_dir ${LLVM_BINARY_DIR}/include/llvm)
176
177 include(AddLLVMDefinitions)
178
179 if(WIN32)
180   if(CYGWIN)
181     set(LLVM_ON_WIN32 0)
182     set(LLVM_ON_UNIX 1)
183   else(CYGWIN)
184     set(LLVM_ON_WIN32 1)
185     set(LLVM_ON_UNIX 0)
186   endif(CYGWIN)
187   set(LTDL_SHLIB_EXT ".dll")
188   set(EXEEXT ".exe")
189   # Maximum path length is 160 for non-unicode paths
190   set(MAXPATHLEN 160)
191 else(WIN32)
192   if(UNIX)
193     set(LLVM_ON_WIN32 0)
194     set(LLVM_ON_UNIX 1)
195     if(APPLE)
196       set(LTDL_SHLIB_EXT ".dylib")
197     else(APPLE)
198       set(LTDL_SHLIB_EXT ".so")
199     endif(APPLE)
200     set(EXEEXT "")
201     # FIXME: Maximum path length is currently set to 'safe' fixed value
202     set(MAXPATHLEN 2024)
203   else(UNIX)
204     MESSAGE(SEND_ERROR "Unable to determine platform")
205   endif(UNIX)
206 endif(WIN32)
207
208 option(LLVM_ENABLE_PIC "Build Position-Independent Code" ON)
209
210 if( LLVM_ENABLE_PIC )
211   if( XCODE )
212     # Xcode has -mdynamic-no-pic on by default, which overrides -fPIC. I don't
213     # know how to disable this, so just force ENABLE_PIC off for now.
214     message(WARNING "-fPIC not supported with Xcode.")
215   elseif( WIN32 )
216     # On Windows all code is PIC. MinGW warns if -fPIC is used.
217   else()
218     include(CheckCXXCompilerFlag)
219     check_cxx_compiler_flag("-fPIC" SUPPORTS_FPIC_FLAG)
220     if( SUPPORTS_FPIC_FLAG )
221       message(STATUS "Building with -fPIC")
222       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
223       set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
224     else( SUPPORTS_FPIC_FLAG )
225       message(WARNING "-fPIC not supported.")
226     endif()
227   endif()
228 endif()
229
230 include(config-ix)
231
232 set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR} )
233 set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
234 set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LLVM_BINARY_DIR}/lib )
235
236 # set(CMAKE_VERBOSE_MAKEFILE true)
237
238 add_llvm_definitions( -D__STDC_LIMIT_MACROS )
239 add_llvm_definitions( -D__STDC_CONSTANT_MACROS )
240
241 # MSVC has a gazillion warnings with this.
242 if( MSVC )
243   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." OFF)
244 else( MSVC )
245   option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON)
246 endif()
247
248 option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
249 option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF)
250
251 if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
252   # TODO: support other platforms and toolchains.
253   option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF)
254   if( LLVM_BUILD_32_BITS )
255     message(STATUS "Building 32 bits executables and libraries.")
256     add_llvm_definitions( -m32 )
257     list(APPEND CMAKE_EXE_LINKER_FLAGS -m32)
258     list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32)
259   endif( LLVM_BUILD_32_BITS )
260 endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
261
262 if( MSVC )
263   include(ChooseMSVCCRT)
264
265   # Add definitions that make MSVC much less annoying.
266   add_llvm_definitions(
267     # For some reason MS wants to deprecate a bunch of standard functions...
268     -D_CRT_SECURE_NO_DEPRECATE
269     -D_CRT_SECURE_NO_WARNINGS
270     -D_CRT_NONSTDC_NO_DEPRECATE
271     -D_CRT_NONSTDC_NO_WARNINGS
272     -D_SCL_SECURE_NO_DEPRECATE
273     -D_SCL_SECURE_NO_WARNINGS
274
275     -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned'
276     -wd4180 # Suppress 'qualifier applied to function type has no meaning; ignored'
277     -wd4224 # Suppress 'nonstandard extension used : formal parameter 'identifier' was previously defined as a type'
278     -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data'
279     -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data'
280     -wd4275 # Suppress 'An exported class was derived from a class that was not exported.'
281     -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception'
282     -wd4345 # Suppress 'behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized'
283     -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized'
284     -wd4355 # Suppress ''this' : used in base member initializer list'
285     -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated'
286     -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible'
287     -wd4715 # Suppress ''function' : not all control paths return a value'
288     -wd4800 # Suppress ''type' : forcing value to bool 'true' or 'false' (performance warning)'
289     -wd4065 # Suppress 'switch statement contains 'default' but no 'case' labels'
290
291     -w14062 # Promote "enumerator in switch of enum is not handled" to level 1 warning.
292     )
293
294   # Enable warnings
295   if (LLVM_ENABLE_WARNINGS)
296     add_llvm_definitions( /W4 /Wall )
297     if (LLVM_ENABLE_PEDANTIC)
298       # No MSVC equivalent available
299     endif (LLVM_ENABLE_PEDANTIC)
300   endif (LLVM_ENABLE_WARNINGS)
301   if (LLVM_ENABLE_WERROR)
302     add_llvm_definitions( /WX )
303   endif (LLVM_ENABLE_WERROR)
304 elseif( CMAKE_COMPILER_IS_GNUCXX )
305   if (LLVM_ENABLE_WARNINGS)
306     add_llvm_definitions( -Wall -W -Wno-unused-parameter -Wwrite-strings )
307     if (LLVM_ENABLE_PEDANTIC)
308       add_llvm_definitions( -pedantic -Wno-long-long )
309     endif (LLVM_ENABLE_PEDANTIC)
310   endif (LLVM_ENABLE_WARNINGS)
311   if (LLVM_ENABLE_WERROR)
312     add_llvm_definitions( -Werror )
313   endif (LLVM_ENABLE_WERROR)
314 endif( MSVC )
315
316 include_directories( ${LLVM_BINARY_DIR}/include ${LLVM_MAIN_INCLUDE_DIR})
317
318 if( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
319    SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-include llvm/Support/Solaris.h")
320 endif( ${CMAKE_SYSTEM_NAME} MATCHES SunOS )
321
322 include(AddLLVM)
323 include(TableGen)
324
325 if( MINGW )
326   get_system_libs(LLVM_SYSTEM_LIBS_LIST)
327   foreach(l ${LLVM_SYSTEM_LIBS_LIST})
328     set(LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS} -l${l}")
329   endforeach()
330   set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
331   set(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}${LLVM_SYSTEM_LIBS}")
332 endif()
333
334 if( MINGW )
335   # People report that -O3 is unreliable on MinGW. The traditional
336   # build also uses -O2 for that reason:
337   llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2")
338 endif()
339
340 add_subdirectory(lib/Support)
341
342 # Everything else depends on Support:
343 set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} ${LLVM_LIBS} )
344
345 set(LLVM_TABLEGEN "tblgen" CACHE
346   STRING "Native TableGen executable. Saves building one when cross-compiling.")
347 # Effective tblgen executable to be used:
348 set(LLVM_TABLEGEN_EXE ${LLVM_TABLEGEN})
349
350 add_subdirectory(utils/TableGen)
351
352 if( CMAKE_CROSSCOMPILING )
353   # This adds a dependency on target `tblgen', so must go after utils/TableGen
354   include( CrossCompileLLVM )
355 endif( CMAKE_CROSSCOMPILING )
356
357 add_subdirectory(include/llvm)
358
359 add_subdirectory(lib/VMCore)
360 add_subdirectory(lib/CodeGen)
361 add_subdirectory(lib/CodeGen/SelectionDAG)
362 add_subdirectory(lib/CodeGen/AsmPrinter)
363 add_subdirectory(lib/Bitcode/Reader)
364 add_subdirectory(lib/Bitcode/Writer)
365 add_subdirectory(lib/Transforms/Utils)
366 add_subdirectory(lib/Transforms/Instrumentation)
367 add_subdirectory(lib/Transforms/InstCombine)
368 add_subdirectory(lib/Transforms/Scalar)
369 add_subdirectory(lib/Transforms/IPO)
370 add_subdirectory(lib/Transforms/Hello)
371 add_subdirectory(lib/Linker)
372 add_subdirectory(lib/Analysis)
373 add_subdirectory(lib/Analysis/IPA)
374 add_subdirectory(lib/MC)
375 add_subdirectory(lib/MC/MCParser)
376 add_subdirectory(lib/MC/MCDisassembler)
377 add_subdirectory(lib/Object)
378
379 add_subdirectory(utils/FileCheck)
380 add_subdirectory(utils/FileUpdate)
381 add_subdirectory(utils/count)
382 add_subdirectory(utils/not)
383 add_subdirectory(utils/llvm-lit)
384
385 set(LLVM_ENUM_ASM_PRINTERS "")
386 set(LLVM_ENUM_ASM_PARSERS "")
387 set(LLVM_ENUM_DISASSEMBLERS "")
388 foreach(t ${LLVM_TARGETS_TO_BUILD})
389   message(STATUS "Targeting ${t}")
390   add_subdirectory(lib/Target/${t})
391   add_subdirectory(lib/Target/${t}/TargetInfo)
392   set( td ${LLVM_MAIN_SRC_DIR}/lib/Target/${t} )
393   file(GLOB asmp_file "${td}/*AsmPrinter.cpp")
394   if( asmp_file )
395     set(LLVM_ENUM_ASM_PRINTERS
396       "${LLVM_ENUM_ASM_PRINTERS}LLVM_ASM_PRINTER(${t})\n")
397   endif()
398   if( EXISTS ${td}/InstPrinter/CMakeLists.txt )
399     add_subdirectory(lib/Target/${t}/InstPrinter)
400   endif()
401   if( EXISTS ${td}/AsmParser/CMakeLists.txt )
402     add_subdirectory(lib/Target/${t}/AsmParser)
403     set(LLVM_ENUM_ASM_PARSERS
404       "${LLVM_ENUM_ASM_PARSERS}LLVM_ASM_PARSER(${t})\n")
405   endif()
406   if( EXISTS ${td}/Disassembler/CMakeLists.txt )
407     add_subdirectory(lib/Target/${t}/Disassembler)
408     set(LLVM_ENUM_DISASSEMBLERS
409       "${LLVM_ENUM_DISASSEMBLERS}LLVM_DISASSEMBLER(${t})\n")
410   endif()
411   set(CURRENT_LLVM_TARGET)
412 endforeach(t)
413
414 # Produce llvm/Config/AsmPrinters.def
415 configure_file(
416   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmPrinters.def.in
417   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmPrinters.def
418   )
419
420 # Produce llvm/Config/AsmParsers.def
421 configure_file(
422   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/AsmParsers.def.in
423   ${LLVM_BINARY_DIR}/include/llvm/Config/AsmParsers.def
424   )
425
426 # Produce llvm/Config/Disassemblers.def
427 configure_file(
428   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Config/Disassemblers.def.in
429   ${LLVM_BINARY_DIR}/include/llvm/Config/Disassemblers.def
430   )
431
432 add_subdirectory(lib/ExecutionEngine)
433 add_subdirectory(lib/ExecutionEngine/Interpreter)
434 add_subdirectory(lib/ExecutionEngine/JIT)
435 add_subdirectory(lib/ExecutionEngine/MCJIT)
436 add_subdirectory(lib/Target)
437 add_subdirectory(lib/AsmParser)
438 add_subdirectory(lib/Archive)
439
440 add_subdirectory(projects)
441
442 option(LLVM_BUILD_TOOLS
443   "Build the LLVM tools. If OFF, just generate build targets." ON)
444 option(LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON)
445 if( LLVM_INCLUDE_TOOLS )
446   add_subdirectory(tools)
447 endif()
448
449 option(LLVM_BUILD_EXAMPLES
450   "Build the LLVM example programs. If OFF, just generate build targets." OFF)
451 option(LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON)
452 if( LLVM_INCLUDE_EXAMPLES )
453   add_subdirectory(examples)
454 endif()
455
456 option(LLVM_BUILD_TESTS
457   "Build LLVM unit tests. If OFF, just generate build targes." OFF)
458 option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON)
459 if( LLVM_INCLUDE_TESTS )
460   add_subdirectory(test)
461   add_subdirectory(utils/unittest)
462   add_subdirectory(unittests)
463   if (MSVC)
464     # This utility is used to prevent chrashing tests from calling Dr. Watson on
465     # Windows.
466     add_subdirectory(utils/KillTheDoctor)
467   endif()
468 endif()
469
470 add_subdirectory(cmake/modules)
471
472 install(DIRECTORY include/
473   DESTINATION include
474   FILES_MATCHING
475   PATTERN "*.def"
476   PATTERN "*.h"
477   PATTERN "*.td"
478   PATTERN "*.inc"
479   PATTERN ".svn" EXCLUDE
480   )
481
482 install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/
483   DESTINATION include
484   FILES_MATCHING
485   PATTERN "*.def"
486   PATTERN "*.h"
487   PATTERN "*.gen"
488   PATTERN "*.inc"
489   # Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def"
490   PATTERN "CMakeFiles" EXCLUDE
491   PATTERN ".svn" EXCLUDE
492   )
493
494 # TODO: make and install documentation.
495
496 set(CPACK_PACKAGE_VENDOR "LLVM")
497 set(CPACK_PACKAGE_VERSION_MAJOR 2)
498 set(CPACK_PACKAGE_VERSION_MINOR 9)
499 add_version_info_from_vcs(CPACK_PACKAGE_VERSION_PATCH)
500 include(CPack)
501
502 # Workaround for MSVS10 to avoid the Dialog Hell
503 # FIXME: This could be removed with future version of CMake.
504 if(MSVC_VERSION EQUAL 1600)
505   set(LLVM_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/LLVM.sln")
506   if( EXISTS "${LLVM_SLN_FILENAME}" )
507     file(APPEND "${LLVM_SLN_FILENAME}" "\n# This should be regenerated!\n")
508   endif()
509 endif()