1751ea9d9SOscar Fuentesinclude(AddFileDependencies) 2db2a4af3SNAKAMURA Takumiinclude(CMakeParseArguments) 3751ea9d9SOscar Fuentes 477c4f701SOscar Fuentesfunction(llvm_replace_compiler_option var old new) 59bf25958SOscar Fuentes # Replaces a compiler option or switch `old' in `var' by `new'. 69bf25958SOscar Fuentes # If `old' is not in `var', appends `new' to `var'. 79bf25958SOscar Fuentes # Example: llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2") 877c4f701SOscar Fuentes # If the option already is on the variable, don't add it: 977c4f701SOscar Fuentes if( "${${var}}" MATCHES "(^| )${new}($| )" ) 1077c4f701SOscar Fuentes set(n "") 119bf25958SOscar Fuentes else() 1277c4f701SOscar Fuentes set(n "${new}") 139bf25958SOscar Fuentes endif() 1477c4f701SOscar Fuentes if( "${${var}}" MATCHES "(^| )${old}($| )" ) 1577c4f701SOscar Fuentes string( REGEX REPLACE "(^| )${old}($| )" " ${n} " ${var} "${${var}}" ) 1677c4f701SOscar Fuentes else() 1777c4f701SOscar Fuentes set( ${var} "${${var}} ${n}" ) 1877c4f701SOscar Fuentes endif() 1977c4f701SOscar Fuentes set( ${var} "${${var}}" PARENT_SCOPE ) 2077c4f701SOscar Fuentesendfunction(llvm_replace_compiler_option) 212c10b22bSOscar Fuentes 222c10b22bSOscar Fuentesmacro(add_td_sources srcs) 232c10b22bSOscar Fuentes file(GLOB tds *.td) 242c10b22bSOscar Fuentes if( tds ) 252c10b22bSOscar Fuentes source_group("TableGen descriptions" FILES ${tds}) 262c10b22bSOscar Fuentes set_source_files_properties(${tds} PROPERTIES HEADER_FILE_ONLY ON) 272c10b22bSOscar Fuentes list(APPEND ${srcs} ${tds}) 282c10b22bSOscar Fuentes endif() 292c10b22bSOscar Fuentesendmacro(add_td_sources) 302c10b22bSOscar Fuentes 31aeedd65cSZachary Turnerfunction(add_header_files_for_glob hdrs_out glob) 32aeedd65cSZachary Turner file(GLOB hds ${glob}) 331f68002cSMichal Gorny set(filtered) 341f68002cSMichal Gorny foreach(file ${hds}) 351f68002cSMichal Gorny # Explicit existence check is necessary to filter dangling symlinks 361f68002cSMichal Gorny # out. See https://bugs.gentoo.org/674662. 371f68002cSMichal Gorny if(EXISTS ${file}) 381f68002cSMichal Gorny list(APPEND filtered ${file}) 391f68002cSMichal Gorny endif() 401f68002cSMichal Gorny endforeach() 411f68002cSMichal Gorny set(${hdrs_out} ${filtered} PARENT_SCOPE) 42aeedd65cSZachary Turnerendfunction(add_header_files_for_glob) 432c10b22bSOscar Fuentes 44aeedd65cSZachary Turnerfunction(find_all_header_files hdrs_out additional_headerdirs) 45aeedd65cSZachary Turner add_header_files_for_glob(hds *.h) 46aeedd65cSZachary Turner list(APPEND all_headers ${hds}) 47aeedd65cSZachary Turner 48aeedd65cSZachary Turner foreach(additional_dir ${additional_headerdirs}) 49aeedd65cSZachary Turner add_header_files_for_glob(hds "${additional_dir}/*.h") 50aeedd65cSZachary Turner list(APPEND all_headers ${hds}) 51aeedd65cSZachary Turner add_header_files_for_glob(hds "${additional_dir}/*.inc") 52aeedd65cSZachary Turner list(APPEND all_headers ${hds}) 53aeedd65cSZachary Turner endforeach(additional_dir) 54aeedd65cSZachary Turner 55aeedd65cSZachary Turner set( ${hdrs_out} ${all_headers} PARENT_SCOPE ) 56aeedd65cSZachary Turnerendfunction(find_all_header_files) 572c10b22bSOscar Fuentes 582c10b22bSOscar Fuentes 592c10b22bSOscar Fuentesfunction(llvm_process_sources OUT_VAR) 60*9ff3f339SKirill Bobyrev cmake_parse_arguments(ARG "PARTIAL_SOURCES_INTENDED" "" "ADDITIONAL_HEADERS;ADDITIONAL_HEADER_DIRS" ${ARGN}) 616acf320aSNAKAMURA Takumi set(sources ${ARG_UNPARSED_ARGUMENTS}) 62*9ff3f339SKirill Bobyrev if (NOT ARG_PARTIAL_SOURCES_INTENDED) 63c710219dSOscar Fuentes llvm_check_source_file_list(${sources}) 64*9ff3f339SKirill Bobyrev endif() 653a389bd4SChris Bieneman 662c10b22bSOscar Fuentes # This adds .td and .h files to the Visual Studio solution: 672c10b22bSOscar Fuentes add_td_sources(sources) 68aeedd65cSZachary Turner find_all_header_files(hdrs "${ARG_ADDITIONAL_HEADER_DIRS}") 69aeedd65cSZachary Turner if (hdrs) 70aeedd65cSZachary Turner set_source_files_properties(${hdrs} PROPERTIES HEADER_FILE_ONLY ON) 71aeedd65cSZachary Turner endif() 726acf320aSNAKAMURA Takumi set_source_files_properties(${ARG_ADDITIONAL_HEADERS} PROPERTIES HEADER_FILE_ONLY ON) 73aeedd65cSZachary Turner list(APPEND sources ${ARG_ADDITIONAL_HEADERS} ${hdrs}) 74889c1e7dSOscar Fuentes 752c10b22bSOscar Fuentes set( ${OUT_VAR} ${sources} PARENT_SCOPE ) 76751ea9d9SOscar Fuentesendfunction(llvm_process_sources) 77c710219dSOscar Fuentes 78c710219dSOscar Fuentes 79c710219dSOscar Fuentesfunction(llvm_check_source_file_list) 80d650a8cfSShoaib Meenai cmake_parse_arguments(ARG "" "SOURCE_DIR" "" ${ARGN}) 811447c979SSerge Guelton foreach(l ${ARG_UNPARSED_ARGUMENTS}) 821447c979SSerge Guelton get_filename_component(fp ${l} REALPATH) 831447c979SSerge Guelton list(APPEND listed ${fp}) 841447c979SSerge Guelton endforeach() 851447c979SSerge Guelton 86d650a8cfSShoaib Meenai if(ARG_SOURCE_DIR) 87d650a8cfSShoaib Meenai file(GLOB globbed 88d650a8cfSShoaib Meenai "${ARG_SOURCE_DIR}/*.c" "${ARG_SOURCE_DIR}/*.cpp") 89d650a8cfSShoaib Meenai else() 90db441f68SNAKAMURA Takumi file(GLOB globbed *.c *.cpp) 91d650a8cfSShoaib Meenai endif() 921447c979SSerge Guelton 93c710219dSOscar Fuentes foreach(g ${globbed}) 94c710219dSOscar Fuentes get_filename_component(fn ${g} NAME) 95d650a8cfSShoaib Meenai if(ARG_SOURCE_DIR) 96d650a8cfSShoaib Meenai set(entry "${g}") 97d650a8cfSShoaib Meenai else() 98d650a8cfSShoaib Meenai set(entry "${fn}") 99d650a8cfSShoaib Meenai endif() 1001447c979SSerge Guelton get_filename_component(gp ${g} REALPATH) 101a3fc9238SMatt Arsenault 102a3fc9238SMatt Arsenault # Don't reject hidden files. Some editors create backups in the 103a3fc9238SMatt Arsenault # same directory as the file. 104a3fc9238SMatt Arsenault if (NOT "${fn}" MATCHES "^\\.") 105d650a8cfSShoaib Meenai list(FIND LLVM_OPTIONAL_SOURCES ${entry} idx) 10694d02518SChandler Carruth if( idx LESS 0 ) 1071447c979SSerge Guelton list(FIND listed ${gp} idx) 108c710219dSOscar Fuentes if( idx LESS 0 ) 1091447c979SSerge Guelton if(ARG_SOURCE_DIR) 1101447c979SSerge Guelton set(fn_relative "${ARG_SOURCE_DIR}/${fn}") 1111447c979SSerge Guelton else() 1121447c979SSerge Guelton set(fn_relative "${fn}") 1131447c979SSerge Guelton endif() 1141447c979SSerge Guelton message(SEND_ERROR "Found unknown source file ${fn_relative} 115db441f68SNAKAMURA TakumiPlease update ${CMAKE_CURRENT_LIST_FILE}\n") 116c710219dSOscar Fuentes endif() 11794d02518SChandler Carruth endif() 118a3fc9238SMatt Arsenault endif() 119c710219dSOscar Fuentes endforeach() 120c710219dSOscar Fuentesendfunction(llvm_check_source_file_list) 121