| ... | @@ -7,7 +7,119 @@ | ... | @@ -7,7 +7,119 @@ |
| 7 | # LLVM_LIBRARIES | 7 | # LLVM_LIBRARIES |
| 8 | # LLVM_LIBDIRS | 8 | # LLVM_LIBDIRS |
| 9 | | 9 | |
| 10 | if(ZIG_CROSSCOMPILING) | 10 | if("${ZIG_TARGET_TRIPLE}" STREQUAL "native") |
| | 11 | find_program(LLVM_CONFIG_EXE |
| | 12 | NAMES llvm-config-10 llvm-config-10.0 llvm-config100 llvm-config |
| | 13 | PATHS |
| | 14 | "/mingw64/bin" |
| | 15 | "/c/msys64/mingw64/bin" |
| | 16 | "c:/msys64/mingw64/bin" |
| | 17 | "C:/Libraries/llvm-10.0.0/bin") |
| | 18 | |
| | 19 | if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND") |
| | 20 | message(FATAL_ERROR "unable to find llvm-config") |
| | 21 | endif() |
| | 22 | |
| | 23 | if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND") |
| | 24 | message(FATAL_ERROR "unable to find llvm-config") |
| | 25 | endif() |
| | 26 | |
| | 27 | execute_process( |
| | 28 | COMMAND ${LLVM_CONFIG_EXE} --version |
| | 29 | OUTPUT_VARIABLE LLVM_CONFIG_VERSION |
| | 30 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 31 | |
| | 32 | if("${LLVM_CONFIG_VERSION}" VERSION_LESS 10) |
| | 33 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") |
| | 34 | endif() |
| | 35 | if("${LLVM_CONFIG_VERSION}" VERSION_EQUAL 11) |
| | 36 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") |
| | 37 | endif() |
| | 38 | if("${LLVM_CONFIG_VERSION}" VERSION_GREATER 11) |
| | 39 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") |
| | 40 | endif() |
| | 41 | |
| | 42 | execute_process( |
| | 43 | COMMAND ${LLVM_CONFIG_EXE} --targets-built |
| | 44 | OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES |
| | 45 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 46 | string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}") |
| | 47 | function(NEED_TARGET TARGET_NAME) |
| | 48 | list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index) |
| | 49 | if (${_index} EQUAL -1) |
| | 50 | message(FATAL_ERROR "LLVM is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.") |
| | 51 | endif() |
| | 52 | endfunction(NEED_TARGET) |
| | 53 | NEED_TARGET("AArch64") |
| | 54 | NEED_TARGET("AMDGPU") |
| | 55 | NEED_TARGET("ARM") |
| | 56 | NEED_TARGET("BPF") |
| | 57 | NEED_TARGET("Hexagon") |
| | 58 | NEED_TARGET("Lanai") |
| | 59 | NEED_TARGET("Mips") |
| | 60 | NEED_TARGET("MSP430") |
| | 61 | NEED_TARGET("NVPTX") |
| | 62 | NEED_TARGET("PowerPC") |
| | 63 | NEED_TARGET("RISCV") |
| | 64 | NEED_TARGET("Sparc") |
| | 65 | NEED_TARGET("SystemZ") |
| | 66 | NEED_TARGET("WebAssembly") |
| | 67 | NEED_TARGET("X86") |
| | 68 | NEED_TARGET("XCore") |
| | 69 | |
| | 70 | if(ZIG_STATIC_LLVM) |
| | 71 | execute_process( |
| | 72 | COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static |
| | 73 | OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES |
| | 74 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 75 | string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}") |
| | 76 | |
| | 77 | execute_process( |
| | 78 | COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static |
| | 79 | OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES |
| | 80 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 81 | string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") |
| | 82 | |
| | 83 | execute_process( |
| | 84 | COMMAND ${LLVM_CONFIG_EXE} --libdir --link-static |
| | 85 | OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES |
| | 86 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 87 | string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") |
| | 88 | endif() |
| | 89 | if(NOT LLVM_LIBRARIES) |
| | 90 | execute_process( |
| | 91 | COMMAND ${LLVM_CONFIG_EXE} --libs |
| | 92 | OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES |
| | 93 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 94 | string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}") |
| | 95 | |
| | 96 | execute_process( |
| | 97 | COMMAND ${LLVM_CONFIG_EXE} --system-libs |
| | 98 | OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES |
| | 99 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 100 | string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") |
| | 101 | |
| | 102 | execute_process( |
| | 103 | COMMAND ${LLVM_CONFIG_EXE} --libdir |
| | 104 | OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES |
| | 105 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 106 | string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") |
| | 107 | endif() |
| | 108 | |
| | 109 | execute_process( |
| | 110 | COMMAND ${LLVM_CONFIG_EXE} --includedir |
| | 111 | OUTPUT_VARIABLE LLVM_INCLUDE_DIRS |
| | 112 | OUTPUT_STRIP_TRAILING_WHITESPACE) |
| | 113 | |
| | 114 | set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) |
| | 115 | |
| | 116 | if(NOT LLVM_LIBRARIES) |
| | 117 | find_library(LLVM_LIBRARIES NAMES LLVM LLVM-10 LLVM-10.0) |
| | 118 | endif() |
| | 119 | |
| | 120 | link_directories("${CMAKE_PREFIX_PATH}/lib") |
| | 121 | link_directories("${LLVM_LIBDIRS}") |
| | 122 | else() |
| 11 | # Here we assume that we're cross compiling with Zig, of course. No reason | 123 | # Here we assume that we're cross compiling with Zig, of course. No reason |
| 12 | # to support more complicated setups. We also assume the experimental target | 124 | # to support more complicated setups. We also assume the experimental target |
| 13 | # AVR is enabled. | 125 | # AVR is enabled. |
| ... | @@ -189,118 +301,6 @@ if(ZIG_CROSSCOMPILING) | ... | @@ -189,118 +301,6 @@ if(ZIG_CROSSCOMPILING) |
| 189 | FIND_AND_ADD_LLVM_LIB(LLVMAArch64Info) | 301 | FIND_AND_ADD_LLVM_LIB(LLVMAArch64Info) |
| 190 | FIND_AND_ADD_LLVM_LIB(LLVMSupport) | 302 | FIND_AND_ADD_LLVM_LIB(LLVMSupport) |
| 191 | FIND_AND_ADD_LLVM_LIB(LLVMDemangle) | 303 | FIND_AND_ADD_LLVM_LIB(LLVMDemangle) |
| 192 | else() | | |
| 193 | find_program(LLVM_CONFIG_EXE | | |
| 194 | NAMES llvm-config-10 llvm-config-10.0 llvm-config100 llvm-config | | |
| 195 | PATHS | | |
| 196 | "/mingw64/bin" | | |
| 197 | "/c/msys64/mingw64/bin" | | |
| 198 | "c:/msys64/mingw64/bin" | | |
| 199 | "C:/Libraries/llvm-10.0.0/bin") | | |
| 200 | | | |
| 201 | if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND") | | |
| 202 | message(FATAL_ERROR "unable to find llvm-config") | | |
| 203 | endif() | | |
| 204 | | | |
| 205 | if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND") | | |
| 206 | message(FATAL_ERROR "unable to find llvm-config") | | |
| 207 | endif() | | |
| 208 | | | |
| 209 | execute_process( | | |
| 210 | 	COMMAND ${LLVM_CONFIG_EXE} --version | | |
| 211 | 	OUTPUT_VARIABLE LLVM_CONFIG_VERSION | | |
| 212 | 	OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 213 | | | |
| 214 | if("${LLVM_CONFIG_VERSION}" VERSION_LESS 10) | | |
| 215 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") | | |
| 216 | endif() | | |
| 217 | if("${LLVM_CONFIG_VERSION}" VERSION_EQUAL 11) | | |
| 218 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") | | |
| 219 | endif() | | |
| 220 | if("${LLVM_CONFIG_VERSION}" VERSION_GREATER 11) | | |
| 221 | message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}") | | |
| 222 | endif() | | |
| 223 | | | |
| 224 | execute_process( | | |
| 225 | 	COMMAND ${LLVM_CONFIG_EXE} --targets-built | | |
| 226 | OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES | | |
| 227 | 	OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 228 | string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}") | | |
| 229 | function(NEED_TARGET TARGET_NAME) | | |
| 230 | list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index) | | |
| 231 | if (${_index} EQUAL -1) | | |
| 232 | message(FATAL_ERROR "LLVM is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.") | | |
| 233 | endif() | | |
| 234 | endfunction(NEED_TARGET) | | |
| 235 | NEED_TARGET("AArch64") | | |
| 236 | NEED_TARGET("AMDGPU") | | |
| 237 | NEED_TARGET("ARM") | | |
| 238 | NEED_TARGET("BPF") | | |
| 239 | NEED_TARGET("Hexagon") | | |
| 240 | NEED_TARGET("Lanai") | | |
| 241 | NEED_TARGET("Mips") | | |
| 242 | NEED_TARGET("MSP430") | | |
| 243 | NEED_TARGET("NVPTX") | | |
| 244 | NEED_TARGET("PowerPC") | | |
| 245 | NEED_TARGET("RISCV") | | |
| 246 | NEED_TARGET("Sparc") | | |
| 247 | NEED_TARGET("SystemZ") | | |
| 248 | NEED_TARGET("WebAssembly") | | |
| 249 | NEED_TARGET("X86") | | |
| 250 | NEED_TARGET("XCore") | | |
| 251 | | | |
| 252 | if(ZIG_STATIC_LLVM) | | |
| 253 | execute_process( | | |
| 254 | COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static | | |
| 255 | OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES | | |
| 256 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 257 | string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}") | | |
| 258 | | | |
| 259 | execute_process( | | |
| 260 | COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static | | |
| 261 | OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES | | |
| 262 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 263 | string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") | | |
| 264 | | | |
| 265 | execute_process( | | |
| 266 | COMMAND ${LLVM_CONFIG_EXE} --libdir --link-static | | |
| 267 | OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES | | |
| 268 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 269 | string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") | | |
| 270 | endif() | | |
| 271 | if(NOT LLVM_LIBRARIES) | | |
| 272 | execute_process( | | |
| 273 | COMMAND ${LLVM_CONFIG_EXE} --libs | | |
| 274 | OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES | | |
| 275 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 276 | string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}") | | |
| 277 | | | |
| 278 | execute_process( | | |
| 279 | COMMAND ${LLVM_CONFIG_EXE} --system-libs | | |
| 280 | OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES | | |
| 281 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 282 | string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}") | | |
| 283 | | | |
| 284 | execute_process( | | |
| 285 | COMMAND ${LLVM_CONFIG_EXE} --libdir | | |
| 286 | OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES | | |
| 287 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 288 | string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}") | | |
| 289 | endif() | | |
| 290 | | | |
| 291 | execute_process( | | |
| 292 | COMMAND ${LLVM_CONFIG_EXE} --includedir | | |
| 293 | OUTPUT_VARIABLE LLVM_INCLUDE_DIRS | | |
| 294 | OUTPUT_STRIP_TRAILING_WHITESPACE) | | |
| 295 | | | |
| 296 | set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) | | |
| 297 | | | |
| 298 | if(NOT LLVM_LIBRARIES) | | |
| 299 | find_library(LLVM_LIBRARIES NAMES LLVM LLVM-10 LLVM-10.0) | | |
| 300 | endif() | | |
| 301 | | | |
| 302 | link_directories("${CMAKE_PREFIX_PATH}/lib") | | |
| 303 | link_directories("${LLVM_LIBDIRS}") | | |
| 304 | endif() | 304 | endif() |
| 305 | | 305 | |
| 306 | include(FindPackageHandleStandardArgs) | 306 | include(FindPackageHandleStandardArgs) |