diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f8d4580f7..613fc5e0f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,13 +26,86 @@ option(ZIG_TEST_COVERAGE "Build Zig with test coverage instrumentation" OFF) # git log -p -- deps/lld option(ZIG_FORCE_EXTERNAL_LLD "If your system has the LLD patches use it instead of the embedded LLD" OFF) +find_package(LLVM REQUIRED CONFIG) +include_directories(${LLVM_INCLUDE_DIRS}) -find_package(llvm) -include_directories(${LLVM_INCLUDE_DIR}) -link_directories(${LLVM_LIBDIRS}) +# TODO: this currently doesn't work, it currently defines UNICODE but zig +# uses MBCS +#add_definitions(${LLVM_DEFINITIONS}) -find_package(clang) +link_directories(${LLVM_LIBRARY_DIRS}) +llvm_map_components_to_libnames(LLVM_LIBRARIES + LTO + Symbolize + XCoreDisassembler + XCoreCodeGen + XCoreAsmPrinter + SystemZDisassembler + SystemZCodeGen + SystemZAsmParser + SystemZAsmPrinter + SparcDisassembler + SparcCodeGen + SparcAsmParser + SparcAsmPrinter + PowerPCDisassembler + PowerPCCodeGen + PowerPCAsmParser + PowerPCAsmPrinter + NVPTXCodeGen + NVPTXAsmPrinter + MSP430CodeGen + MSP430AsmPrinter + MipsDisassembler + MipsCodeGen + MipsAsmParser + MipsAsmPrinter + LanaiDisassembler + LanaiCodeGen + LanaiAsmParser + LanaiAsmPrinter + HexagonDisassembler + HexagonCodeGen + HexagonAsmParser + BPFDisassembler + BPFCodeGen + BPFAsmPrinter + ARMDisassembler + ARMCodeGen + ARMAsmParser + ARMAsmPrinter + AMDGPUDisassembler + AMDGPUCodeGen + AMDGPUAsmParser + AMDGPUAsmPrinter + AArch64Disassembler + AArch64CodeGen + AArch64AsmParser + AArch64AsmPrinter + LibDriver + X86Disassembler + X86AsmParser + X86CodeGen + X86AsmPrinter + Core +) + +find_package(CLANG REQUIRED CONFIG) include_directories(${CLANG_INCLUDE_DIRS}) +set(CLANG_LIBRARIES + clangFrontend + clangDriver + clangSerialization + clangSema + clangAnalysis + clangAST + clangParse + clangSema + clangBasic + clangEdit + clangLex +) + if(ZIG_FORCE_EXTERNAL_LLD) find_package(lld) diff --git a/cmake/Findclang.cmake b/cmake/Findclang.cmake deleted file mode 100644 index 486999b530..0000000000 --- a/cmake/Findclang.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2016 Andrew Kelley -# This file is MIT licensed. -# See http://opensource.org/licenses/MIT - -# CLANG_FOUND -# CLANG_INCLUDE_DIRS -# CLANG_LIBRARIES - -find_path(CLANG_INCLUDE_DIRS NAMES clang/Frontend/ASTUnit.h - PATHS - ${LLVM_INSTALL_PREFIX}/include - /usr/lib/llvm/5/include - /usr/lib/llvm-5.0/include - /mingw64/include) - -if(NOT CLANG_INCLUDE_DIRS) - message(FATAL_ERROR "Failed to find CLANG header files") -endif() - -macro(FIND_AND_ADD_CLANG_LIB _libname_) - string(TOUPPER ${_libname_} _prettylibname_) - find_library(CLANG_${_prettylibname_}_LIB NAMES ${_libname_} - PATHS - ${LLVM_INSTALL_PREFIX}/lib - /usr/lib/llvm/5/lib - /usr/lib/llvm-5.0/lib - /mingw64/lib - /c/msys64/mingw64/lib - c:\\msys64\\mingw64\\lib) - if(CLANG_${_prettylibname_}_LIB) - set(CLANG_LIBRARIES ${CLANG_LIBRARIES} ${CLANG_${_prettylibname_}_LIB}) - endif() -endmacro(FIND_AND_ADD_CLANG_LIB) - -FIND_AND_ADD_CLANG_LIB(clangFrontend) -FIND_AND_ADD_CLANG_LIB(clangDriver) -FIND_AND_ADD_CLANG_LIB(clangSerialization) -FIND_AND_ADD_CLANG_LIB(clangSema) -FIND_AND_ADD_CLANG_LIB(clangAnalysis) -FIND_AND_ADD_CLANG_LIB(clangAST) -FIND_AND_ADD_CLANG_LIB(clangParse) -FIND_AND_ADD_CLANG_LIB(clangSema) -FIND_AND_ADD_CLANG_LIB(clangBasic) -FIND_AND_ADD_CLANG_LIB(clangEdit) -FIND_AND_ADD_CLANG_LIB(clangLex) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(CLANG DEFAULT_MSG CLANG_LIBRARIES CLANG_INCLUDE_DIRS) - -mark_as_advanced(CLANG_INCLUDE_DIRS CLANG_LIBRARIES) diff --git a/cmake/Findllvm.cmake b/cmake/Findllvm.cmake deleted file mode 100644 index 480bd17ce8..0000000000 --- a/cmake/Findllvm.cmake +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (c) 2014 Andrew Kelley -# This file is MIT licensed. -# See http://opensource.org/licenses/MIT - -# LLVM_INCLUDE_DIR -# LLVM_LIBRARIES -# LLVM_LIBDIRS - -if(LLVM_INSTALL_PREFIX) - find_program(LLVM_CONFIG_EXE - NAMES llvm-config-5.0 llvm-config - PATHS ${LLVM_INSTALL_PREFIX}/bin - NO_DEFAULT_PATH) - if(NOT LLVM_CONFIG_EXE) - message(FATAL_ERROR "Invalid LLVM_INSTALL_PREFIX \"${LLVM_INSTALL_PREFIX}\", could not find llvm-config") - endif() -else() - find_program(LLVM_CONFIG_EXE - NAMES llvm-config-5.0 llvm-config - PATHS - "/mingw64/bin" - "/c/msys64/mingw64/bin" - "c:/msys64/mingw64/bin" - "C:/Libraries/llvm-5.0.0/bin") - if(NOT LLVM_CONFIG_EXE) - message(FATAL_ERROR "Could not find llvm-config, use -DLLVM_INSTALL_PREFIX to specify the install path") - endif() - execute_process( - COMMAND ${LLVM_CONFIG_EXE} --prefix - OUTPUT_VARIABLE LLVM_INSTALL_PREFIX - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() - -if(${LLVM_INSTALL_PREFIX} MATCHES "^.* ") - # NOTE: this is a limitation due to llvm-config. If the path contains spaces then there's - # no way to tell from the output of llvm-config whether a space is seperating a filename, or - # just a space in the path name. - message(FATAL_ERROR "The LLVM install path \"${LLVM_INSTALL_PREFIX}\" cannot contain spaces") -endif() - -execute_process( - COMMAND ${LLVM_CONFIG_EXE} --libs - OUTPUT_VARIABLE LLVM_LIBRARIES_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE) -string(REPLACE " " ";" LLVM_LIBRARIES ${LLVM_LIBRARIES_STRING}) - -execute_process( - COMMAND ${LLVM_CONFIG_EXE} --system-libs - OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_STRING - OUTPUT_STRIP_TRAILING_WHITESPACE) -string(REPLACE " " ";" LLVM_SYSTEM_LIBS ${LLVM_SYSTEM_LIBS_STRING}) - -execute_process( - COMMAND ${LLVM_CONFIG_EXE} --libdir - OUTPUT_VARIABLE LLVM_LIBDIRS - OUTPUT_STRIP_TRAILING_WHITESPACE) - -execute_process( - COMMAND ${LLVM_CONFIG_EXE} --includedir - OUTPUT_VARIABLE LLVM_INCLUDE_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - -find_library(LLVM_LIBRARY NAMES LLVM) - -set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS}) - -if(LLVM_LIBRARY) - set(LLVM_LIBRARIES ${LLVM_LIBRARY}) -endif() - - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LLVM DEFAULT_MSG LLVM_LIBRARIES LLVM_INCLUDE_DIR) - -mark_as_advanced(LLVM_INCLUDE_DIR LLVM_LIBRARIES LLVM_LIBDIRS)