| # Copyright 2023 The SwiftShader Authors. All Rights Reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| %$%generated_file_comment | |
| set(LLVM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/llvm) | |
| set(LLVM_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/configs) | |
| set(LLVM_LIST | |
| %$%files_llvm | |
| ) | |
| if(ARCH STREQUAL "x86" OR ARCH STREQUAL "x86_64") | |
| list(APPEND LLVM_LIST | |
| %$%files_x86 | |
| ) | |
| elseif(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el") | |
| list(APPEND LLVM_LIST | |
| %$%files_Mips | |
| ) | |
| elseif(ARCH STREQUAL "aarch64") | |
| list(APPEND LLVM_LIST | |
| %$%files_AArch64 | |
| ) | |
| elseif(ARCH STREQUAL "arm") | |
| list(APPEND LLVM_LIST | |
| %$%files_ARM | |
| ) | |
| elseif(ARCH STREQUAL "ppc64le") | |
| list(APPEND LLVM_LIST | |
| %$%files_PowerPC | |
| ) | |
| elseif(ARCH STREQUAL "riscv64") | |
| list(APPEND LLVM_LIST | |
| %$%files_RISCV | |
| ) | |
| endif() | |
| if(REACTOR_EMIT_DEBUG_INFO) | |
| list(APPEND LLVM_LIST | |
| ${LLVM_DIR}/lib/Demangle/ItaniumDemangle.cpp | |
| ) | |
| endif() | |
| set(LLVM_INCLUDE_DIR "") | |
| if(WIN32) | |
| list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/windows/include) | |
| elseif(LINUX) | |
| list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/linux/include) | |
| list(APPEND LIBBACKTRACE_INCLUDE_DIR ${LIBBACKTRACE_CONFIG_DIR}/linux/include) | |
| elseif(APPLE) | |
| list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/darwin/include) | |
| list(APPEND LIBBACKTRACE_INCLUDE_DIR ${LIBBACKTRACE_CONFIG_DIR}/darwin/include) | |
| elseif(ANDROID) | |
| list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/android/include) | |
| list(APPEND LIBBACKTRACE_INCLUDE_DIR ${LIBBACKTRACE_CONFIG_DIR}/android/include) | |
| elseif(FUCHSIA) | |
| list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/fuchsia/include) | |
| endif() | |
| list(APPEND LLVM_INCLUDE_DIR | |
| ${LLVM_DIR}/include | |
| ${LLVM_DIR}/lib/Target/AArch64 | |
| ${LLVM_DIR}/lib/Target/ARM | |
| ${LLVM_DIR}/lib/Target/Mips | |
| ${LLVM_DIR}/lib/Target/PowerPC | |
| ${LLVM_DIR}/lib/Target/RISCV | |
| ${LLVM_DIR}/lib/Target/X86 | |
| ${LLVM_CONFIG_DIR}/common/include | |
| ${LLVM_CONFIG_DIR}/common/lib/IR | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/AArch64 | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/ARM | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/Mips | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/PowerPC | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/RISCV | |
| ${LLVM_CONFIG_DIR}/common/lib/Target/X86 | |
| ${LLVM_CONFIG_DIR}/common/lib/Transforms/InstCombine | |
| ${LLVM_CONFIG_DIR}/common/lib/ExecutionEngine/JITLink | |
| ) | |
| # Suppress known LLVM warnings | |
| set(LLVM_COMPILE_OPTIONS "") | |
| if(FUCHSIA) | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-Wno-cpp" # Ignore #warning for unimplemented features in Process.inc. | |
| ) | |
| elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-Wno-deprecated-declarations" | |
| ) | |
| elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-Wno-noexcept-type" # mangled name for ‘X’ will change in C++17 because the exception specification is part of a function type | |
| "-Wno-maybe-uninitialized" # ‘X’ may be used uninitialized in this function | |
| "-Wno-deprecated-declarations" | |
| "-Wno-missing-template-keyword" | |
| "-Wno-missing-braces" | |
| ) | |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8) | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-Wno-class-memaccess" # memset/memcmp used on non-trivial class object | |
| "-Wno-attributes" # declared inline but not inline | |
| ) | |
| endif() | |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9) | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-Wno-init-list-lifetime" # assignment from temporary initializer_list does not extend the lifetime of the underlying array | |
| ) | |
| endif() | |
| elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "/wd4141" # 'inline': used more than once | |
| "/wd4146" # unary minus operator applied to unsigned type, result still unsigned | |
| "/wd4244" # 'X': conversion from 'uint64_t' to 'const unsigned int', possible loss of data | |
| "/wd4267" # 'X': conversion from 'size_t' to 'unsigned int', possible loss of data | |
| "/wd4291" # 'void X new(size_t,unsigned int,unsigned int)': no matching operator delete found; memory will not be freed if initialization throws an exception | |
| "/wd4319" # 'X': zero extending 'unsigned int' to 'uint64_t' of greater size | |
| "/wd4624" # 'X': destructor was implicitly defined as deleted | |
| "/wd4805" # 'X': unsafe mix of type 'unsigned int' and type 'bool' in operation | |
| "/wd4996" # 'X': Call to 'Y' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. | |
| ) | |
| endif() | |
| # Disable SIMD in Blake3 | |
| list(APPEND LLVM_COMPILE_OPTIONS | |
| "-DBLAKE3_NO_AVX512" | |
| "-DBLAKE3_NO_AVX2" | |
| "-DBLAKE3_NO_SSE41" | |
| "-DBLAKE3_NO_SSE2" | |
| "-DBLAKE3_USE_NEON=0" | |
| ) | |
| add_library(llvm STATIC EXCLUDE_FROM_ALL ${LLVM_LIST}) | |
| set_target_properties(llvm PROPERTIES | |
| POSITION_INDEPENDENT_CODE 1 | |
| ) | |
| target_include_directories(llvm | |
| PUBLIC | |
| "${LLVM_INCLUDE_DIR}" | |
| ) | |
| target_compile_options(llvm | |
| PUBLIC | |
| "${LLVM_COMPILE_OPTIONS}" | |
| ) | |
| target_compile_definitions(llvm | |
| PUBLIC | |
| "__STDC_CONSTANT_MACROS" | |
| "__STDC_LIMIT_MACROS" | |
| ) | |
| # Add required libraries for LLVM | |
| if(LINUX OR APPLE) | |
| target_link_libraries(llvm dl) | |
| endif() | |
| if(SWIFTSHADER_EMIT_COVERAGE) | |
| # llvm-with-cov is an llvm target with additional coverage library | |
| # functionality. This is used to build 'turbo-cov', a custom and faster | |
| # reimplementation of llvm-cov. | |
| add_library(llvm-with-cov STATIC EXCLUDE_FROM_ALL | |
| ${LLVM_DIR}/lib/ProfileData/InstrProfReader.cpp | |
| ${LLVM_DIR}/lib/ProfileData/ProfileSummaryBuilder.cpp | |
| ${LLVM_DIR}/lib/ProfileData/Coverage/CoverageMapping.cpp | |
| ${LLVM_DIR}/lib/ProfileData/Coverage/CoverageMappingReader.cpp | |
| ${LLVM_DIR}/lib/Support/Compression.cpp | |
| ) | |
| set_target_properties(llvm-with-cov PROPERTIES | |
| POSITION_INDEPENDENT_CODE 1 | |
| FOLDER "LLVM" | |
| ) | |
| target_include_directories(llvm-with-cov | |
| PUBLIC | |
| ${LLVM_INCLUDE_DIR} | |
| ) | |
| target_compile_definitions(llvm-with-cov | |
| PUBLIC | |
| "__STDC_CONSTANT_MACROS" | |
| "__STDC_LIMIT_MACROS" | |
| ) | |
| if(LINUX OR APPLE) | |
| target_link_libraries(llvm-with-cov llvm pthread) | |
| endif() | |
| endif() |