| # 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 "loongarch64") |
| list(APPEND LLVM_LIST |
| %$%files_LoongArch |
| ) |
| 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/LoongArch |
| ${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/LoongArch |
| ${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() |