X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=CMakeLists.txt;h=1ddb0ffeb36ae483b66994c336659a84926197ee;hb=refs%2Fheads%2Fpie-x86;hp=04c9ab860d32129da4df941de26148624f3c03d9;hpb=d7a21ccd41ce4efab6cc0cbd9440a68301e0f708;p=android-x86%2Fexternal-swiftshader.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 04c9ab860..1ddb0ffeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,12 +2,25 @@ cmake_minimum_required(VERSION 2.8) project(SwiftShader C CXX) +# On Windows we use custom solution and project files, except for certain third- +# party projects which use CMake-generated ones. They are manually (re)generated +# and made path relative using build/cmake.sh, so they can be checked into the +# repository. Therefore they should not be auto-regenerated and left using +# absolute paths by CMake's ZERO_CHECK. +if(WIN32) + # Disable automatically regenerating project files on CMakeLists.txt changes. + set(CMAKE_SUPPRESS_REGENERATION true) +endif() + ########################################################### # Detect system ########################################################### if(CMAKE_SYSTEM_NAME MATCHES "Linux") set(LINUX ON) +elseif(CMAKE_SYSTEM_NAME MATCHES "Android") + set(ANDROID ON) + set(CMAKE_CXX_FLAGS "-DANDROID_NDK_BUILD") elseif(WIN32) elseif(APPLE) else() @@ -20,6 +33,12 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch else() set(ARCH "arm") endif() +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "mips*") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(ARCH "mips64el") + else() + set(ARCH "mipsel") + endif() else() if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(ARCH "x86_64") @@ -47,11 +66,9 @@ endif() set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo) option(BUILD_EGL "Build the EGL library" 1) -if(WIN32) - option(BUILD_GL32 "Build the OpenGL32 library" 1) -endif() option(BUILD_GLESv2 "Build the OpenGL ES 2 library" 1) option(BUILD_GLES_CM "Build the OpenGL ES 1.1 library" 1) +option(BUILD_VULKAN "Build the Vulkan library" 1) option(USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" 1) @@ -62,6 +79,8 @@ option (MSAN "Build with memory sanitizer" 0) option (ASAN "Build with address sanitizer" 0) option (TSAN "Build with thread sanitizer" 0) option (UBSAN "Build with undefined behavior sanitizer" 0) +option (WARNINGS_AS_ERRORS "Treat all warnings as errors" 0) +option (DCHECK_ALWAYS_ON "Check validation macros even in release builds" 0) if(ARCH STREQUAL "arm") set(DEFAULT_REACTOR_BACKEND "Subzero") @@ -69,21 +88,21 @@ else() set(DEFAULT_REACTOR_BACKEND "LLVM") endif() -set(REACTOR_BACKEND DEFAULT_REACTOR_BACKEND CACHE STRING "JIT compiler back-end used by Reactor") +set(REACTOR_BACKEND ${DEFAULT_REACTOR_BACKEND} CACHE STRING "JIT compiler back-end used by Reactor") set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero) -set(SWIFTSHADER_LLVM_VERSION "3" CACHE STRING "LLVM version used by Reactor") +set(REACTOR_LLVM_VERSION "7" CACHE STRING "LLVM version used by Reactor") # LLVM disallows calling cmake . from the main LLVM dir, the reason is that # it builds header files that could overwrite the orignal ones. Here we # want to include LLVM as a subdirectory and even though it wouldn't cause # the problem, if cmake . is called from the main dir, the condition that -# LLVM checkes, "CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR" will be true. So we +# LLVM checkes, "CMAKE_CURRENT_SOURCE_DIR == CMAKE_CURRENT_BINARY_DIR" will be true. So we # disallow it ourselves too to. In addition if there are remining CMakeFiles # and CMakeCache in the directory, cmake .. from a subdirectory will still # try to build from the main directory so we instruct users to delete these # files when they get the error. -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) +if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) message(FATAL_ERROR "In source builds are not allowed by LLVM, please create a build/ directory and build from there. You may have to delete the CMakeCache.txt file and CMakeFiles directory that are next to the CMakeLists.txt.") endif() @@ -93,13 +112,15 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Initialize submodules ########################################################### -if(NOT EXISTS ${CMAKE_SOURCE_DIR}/third_party/googletest) - message(WARNING " - third_party/googletest submodule missing. - Running 'git submodule update --init' to download it: - ") +if (NOT TARGET gtest) + if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/.git) + message(WARNING " + third_party/googletest submodule missing. + Running 'git submodule update --init' to download it: + ") - execute_process(COMMAND git submodule update --init) + execute_process(COMMAND git submodule update --init) + endif() endif() ########################################################### @@ -109,13 +130,13 @@ endif() # Recursively calls source_group on the files of the directory # so that Visual Studio has the files in a folder tree macro(group_all_sources directory) - file(GLOB files RELATIVE ${CMAKE_SOURCE_DIR}/${directory} ${CMAKE_SOURCE_DIR}/${directory}/*) + file(GLOB files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/${directory} ${CMAKE_CURRENT_SOURCE_DIR}/${directory}/*) foreach(file ${files}) - if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/${directory}/${file}) + if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${directory}/${file}) group_all_sources(${directory}/${file}) else() string(REPLACE "/" "\\" groupname ${directory}) - source_group(${groupname} FILES ${CMAKE_SOURCE_DIR}/${directory}/${file}) + source_group(${groupname} FILES ${CMAKE_CURRENT_SOURCE_DIR}/${directory}/${file}) endif() endforeach() endmacro() @@ -135,9 +156,14 @@ macro(set_shared_library_export_map TARGET DIR) # Don't allow symbols to be overridden by another module. set_property(TARGET ${TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -fvisibility=protected") - # Both hash-style are needed, because we want both gold and - # GNU ld to be able to read our libraries. - set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both") + if(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el") + # MIPS supports sysv hash-style only. + set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=sysv") + else() + # Both hash-style are needed, because we want both gold and + # GNU ld to be able to read our libraries. + set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--hash-style=both") + endif() # Gc sections is used in combination with each functions being # in its own section, to reduce the binary size. @@ -158,19 +184,20 @@ endif() # Directories ########################################################### -set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/src) +set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(OPENGL_DIR ${SOURCE_DIR}/OpenGL) set(OPENGL_COMPILER_DIR ${OPENGL_DIR}/compiler) -if(SWIFTSHADER_LLVM_VERSION EQUAL 3) - set(LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/LLVM) +set(VULKAN_DIR ${SOURCE_DIR}/Vulkan) +if(REACTOR_LLVM_VERSION EQUAL 3) + set(LLVM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/LLVM) else() - set(LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-7.0/llvm) - set(LLVM_CONFIG_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-7.0/configs) + set(LLVM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-7.0/llvm) + set(LLVM_CONFIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-7.0/configs) endif() -set(SUBZERO_DIR ${CMAKE_SOURCE_DIR}/third_party/subzero) -set(SUBZERO_LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-subzero) -set(TESTS_DIR ${CMAKE_SOURCE_DIR}/tests) -set(HELLO2_DIR ${CMAKE_SOURCE_DIR}/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2) +set(SUBZERO_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/subzero) +set(SUBZERO_LLVM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/llvm-subzero) +set(TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) +set(HELLO2_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2) ########################################################### # Compile flags @@ -187,6 +214,7 @@ endmacro() if(MSVC) set_cpp_flag("/MP") add_definitions(-D_CRT_SECURE_NO_WARNINGS) + add_definitions(-D_SBCS) # Single Byte Character Set (ASCII) else() set_cpp_flag("--std=c++11") set_cpp_flag("-Wall") @@ -195,6 +223,11 @@ else() set_cpp_flag("-Werror=missing-braces") set_cpp_flag("-fno-exceptions") + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND + CLANG_VERSION_STRING VERSION_GREATER_EQUAL 5) + set_cpp_flag("-Werror=unused-lambda-capture") + endif() + # Remove xor, and, or and friends from the list of keywords, they are used # by Reactor set_cpp_flag("-fno-operator-names") @@ -215,15 +248,48 @@ else() set_cpp_flag("-march=x86-64") set_cpp_flag("-mtune=generic") endif() + if(ARCH STREQUAL "mipsel") + set_cpp_flag("-march=mips32r2") + set_cpp_flag("-fPIC") + set_cpp_flag("-mhard-float") + set_cpp_flag("-mfp32") + endif() + if(ARCH STREQUAL "mips64el") + set_cpp_flag("-march=mips64r2") + set_cpp_flag("-mabi=64") + set_cpp_flag("-fPIC") + endif() if(LINUX) set_cpp_flag("-DUSE_X11=1") + set_cpp_flag("-DVK_USE_PLATFORM_XLIB_KHR") endif() # Use -g3 to have even more debug info set_cpp_flag("-g -g3" DEBUG) set_cpp_flag("-g -g3" RELWITHDEBINFO) - set_cpp_flag("-s" RELEASE) + if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # Treated as an unused argument with clang + set_cpp_flag("-s" RELEASE) + endif() + + if(WARNINGS_AS_ERRORS) + set_cpp_flag("-Werror") # Treat all warnings as errors + endif() + + if(DCHECK_ALWAYS_ON) + set_cpp_flag("-DDCHECK_ALWAYS_ON") + endif() + + # Disable pedanitc warnings + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + set_cpp_flag("-Wno-ignored-attributes") # ignoring attributes on template argument 'X' + set_cpp_flag("-Wno-attributes") # 'X' attribute ignored + set_cpp_flag("-Wno-strict-aliasing") # dereferencing type-punned pointer will break strict-aliasing rules + elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set_cpp_flag("-Wno-unneeded-internal-declaration") # function 'X' is not needed and will not be emitted + set_cpp_flag("-Wno-unused-private-field") # private field 'offset' is not used - TODO: Consider enabling this once Vulkan is further implemented. + endif() # For distribution it is more important to be slim than super optimized set_cpp_flag("-Os" RELEASE) @@ -248,7 +314,7 @@ else() elseif(TSAN) set_cpp_flag("-fsanitize=thread") elseif(UBSAN) - set_cpp_flag("-fsanitize=undefined -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/third_party/LLVM/ubsan_blacklist.txt") + set_cpp_flag("-fsanitize=undefined -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/third_party/LLVM/ubsan_blacklist.txt") endif() endif() endif() @@ -258,14 +324,13 @@ if(WIN32) set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib") endif() - ########################################################### # LLVM ########################################################### -add_definitions(-DSWIFTSHADER_LLVM_VERSION=${SWIFTSHADER_LLVM_VERSION}) +add_definitions(-DREACTOR_LLVM_VERSION=${REACTOR_LLVM_VERSION}) -if(SWIFTSHADER_LLVM_VERSION EQUAL 3) +if(REACTOR_LLVM_VERSION EQUAL 3) set(LLVM_LIST ${LLVM_DIR}/lib/Analysis/AliasAnalysis.cpp @@ -624,6 +689,8 @@ elseif(LINUX) set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include-linux) elseif(APPLE) set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include-osx) +elseif(ANDROID) + set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include-android) endif() list(APPEND LLVM_INCLUDE_DIR @@ -631,7 +698,7 @@ list(APPEND LLVM_INCLUDE_DIR ${LLVM_DIR}/lib/Target/X86 ) -elseif(SWIFTSHADER_LLVM_VERSION EQUAL 7) +elseif(REACTOR_LLVM_VERSION EQUAL 7) set(LLVM_LIST ${LLVM_DIR}/lib/Analysis/AliasAnalysis.cpp @@ -722,6 +789,9 @@ set(LLVM_LIST ${LLVM_DIR}/lib/Analysis/ValueLatticeUtils.cpp ${LLVM_DIR}/lib/Analysis/ValueTracking.cpp ${LLVM_DIR}/lib/Analysis/VectorUtils.cpp + ${LLVM_DIR}/lib/AsmParser/LLLexer.cpp + ${LLVM_DIR}/lib/AsmParser/LLParser.cpp + ${LLVM_DIR}/lib/AsmParser/Parser.cpp ${LLVM_DIR}/lib/BinaryFormat/Dwarf.cpp ${LLVM_DIR}/lib/BinaryFormat/Magic.cpp ${LLVM_DIR}/lib/BinaryFormat/Wasm.cpp @@ -1292,7 +1362,6 @@ set(LLVM_LIST ${LLVM_DIR}/lib/Support/raw_ostream.cpp ${LLVM_DIR}/lib/Support/regcomp.c ${LLVM_DIR}/lib/Support/regerror.c - ${LLVM_DIR}/lib/Support/regerror.c ${LLVM_DIR}/lib/Support/regexec.c ${LLVM_DIR}/lib/Support/regfree.c ${LLVM_DIR}/lib/Support/regstrlcpy.c @@ -1302,175 +1371,6 @@ set(LLVM_LIST ${LLVM_DIR}/lib/Target/TargetLoweringObjectFile.cpp ${LLVM_DIR}/lib/Target/TargetMachine.cpp ${LLVM_DIR}/lib/Target/TargetMachineC.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp - ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64ISelLowering.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64FastISel.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64InstrInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64PromoteConstant.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp - ${LLVM_DIR}/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64InstructionSelector.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64A53Fix835769.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetMachine.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64CallLowering.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64SIMDInstrOpt.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64Subtarget.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetObjectFile.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64RegisterInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64ConditionOptimizer.cpp - ${LLVM_DIR}/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp - ${LLVM_DIR}/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp - ${LLVM_DIR}/lib/Target/AArch64/TargetInfo/AArch64TargetInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64ConditionalCompares.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64DeadRegisterDefinitionsPass.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64LegalizerInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64StorePairSuppress.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp - ${LLVM_DIR}/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64CleanupLocalDynamicTLSPass.cpp - ${LLVM_DIR}/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64MCInstLower.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetTransformInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64RedundantCopyElimination.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64CollectLOH.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64AsmPrinter.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64RegisterBankInfo.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64CondBrTuning.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64FrameLowering.cpp - ${LLVM_DIR}/lib/Target/AArch64/AArch64MacroFusion.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMConstantIslandPass.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMachORelocationInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMWinCOFFStreamer.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp - ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMUnwindOpAsm.cpp - ${LLVM_DIR}/lib/Target/ARM/ThumbRegisterInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMMachineFunctionInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMFrameLowering.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMBaseRegisterInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMCallLowering.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMTargetMachine.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMBaseInstrInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/Thumb1FrameLowering.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMRegisterBankInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/Utils/ARMBaseInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMComputeBlockSize.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMSelectionDAGInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMInstructionSelector.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMLoadStoreOptimizer.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMTargetObjectFile.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMISelLowering.cpp - ${LLVM_DIR}/lib/Target/ARM/Disassembler/ARMDisassembler.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMExpandPseudoInsts.cpp - ${LLVM_DIR}/lib/Target/ARM/TargetInfo/ARMTargetInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMInstrInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/MLxExpansionPass.cpp - ${LLVM_DIR}/lib/Target/ARM/Thumb2SizeReduction.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMConstantPoolValue.cpp - ${LLVM_DIR}/lib/Target/ARM/Thumb2InstrInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMRegisterInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMSubtarget.cpp - ${LLVM_DIR}/lib/Target/ARM/AsmParser/ARMAsmParser.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMParallelDSP.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMISelDAGToDAG.cpp - ${LLVM_DIR}/lib/Target/ARM/A15SDOptimizer.cpp - ${LLVM_DIR}/lib/Target/ARM/Thumb2ITBlockPass.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMFastISel.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMMacroFusion.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMAsmPrinter.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMMCInstLower.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMHazardRecognizer.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMCodeGenPrepare.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMTargetTransformInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/Thumb1InstrInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMLegalizerInfo.cpp - ${LLVM_DIR}/lib/Target/ARM/ARMOptimizeBarriersPass.cpp - ${LLVM_DIR}/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp - ${LLVM_DIR}/lib/Target/X86/AsmParser/X86AsmParser.cpp - ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp - ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86InstComments.cpp - ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp - ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp - ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFTargetStreamer.cpp - ${LLVM_DIR}/lib/Target/X86/ShadowCallStack.cpp - ${LLVM_DIR}/lib/Target/X86/TargetInfo/X86TargetInfo.cpp - ${LLVM_DIR}/lib/Target/X86/Utils/X86ShuffleDecode.cpp - ${LLVM_DIR}/lib/Target/X86/X86AsmPrinter.cpp - ${LLVM_DIR}/lib/Target/X86/X86AvoidStoreForwardingBlocks.cpp - ${LLVM_DIR}/lib/Target/X86/X86CallFrameOptimization.cpp - ${LLVM_DIR}/lib/Target/X86/X86CallLowering.cpp - ${LLVM_DIR}/lib/Target/X86/X86CallingConv.cpp - ${LLVM_DIR}/lib/Target/X86/X86CmovConversion.cpp - ${LLVM_DIR}/lib/Target/X86/X86DomainReassignment.cpp - ${LLVM_DIR}/lib/Target/X86/X86EvexToVex.cpp - ${LLVM_DIR}/lib/Target/X86/X86ExpandPseudo.cpp - ${LLVM_DIR}/lib/Target/X86/X86FastISel.cpp - ${LLVM_DIR}/lib/Target/X86/X86FixupBWInsts.cpp - ${LLVM_DIR}/lib/Target/X86/X86FixupLEAs.cpp - ${LLVM_DIR}/lib/Target/X86/X86FixupSetCC.cpp - ${LLVM_DIR}/lib/Target/X86/X86FlagsCopyLowering.cpp - ${LLVM_DIR}/lib/Target/X86/X86FloatingPoint.cpp - ${LLVM_DIR}/lib/Target/X86/X86FrameLowering.cpp - ${LLVM_DIR}/lib/Target/X86/X86ISelDAGToDAG.cpp - ${LLVM_DIR}/lib/Target/X86/X86ISelLowering.cpp - ${LLVM_DIR}/lib/Target/X86/X86IndirectBranchTracking.cpp - ${LLVM_DIR}/lib/Target/X86/X86InstrFMA3Info.cpp - ${LLVM_DIR}/lib/Target/X86/X86InstrFoldTables.cpp - ${LLVM_DIR}/lib/Target/X86/X86InstrInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86InstructionSelector.cpp - ${LLVM_DIR}/lib/Target/X86/X86InterleavedAccess.cpp - ${LLVM_DIR}/lib/Target/X86/X86LegalizerInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86MCInstLower.cpp - ${LLVM_DIR}/lib/Target/X86/X86MachineFunctionInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86MacroFusion.cpp - ${LLVM_DIR}/lib/Target/X86/X86OptimizeLEAs.cpp - ${LLVM_DIR}/lib/Target/X86/X86PadShortFunction.cpp - ${LLVM_DIR}/lib/Target/X86/X86RegisterBankInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86RegisterInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86RetpolineThunks.cpp - ${LLVM_DIR}/lib/Target/X86/X86SelectionDAGInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp - ${LLVM_DIR}/lib/Target/X86/X86SpeculativeLoadHardening.cpp - ${LLVM_DIR}/lib/Target/X86/X86Subtarget.cpp - ${LLVM_DIR}/lib/Target/X86/X86TargetMachine.cpp - ${LLVM_DIR}/lib/Target/X86/X86TargetObjectFile.cpp - ${LLVM_DIR}/lib/Target/X86/X86TargetTransformInfo.cpp - ${LLVM_DIR}/lib/Target/X86/X86VZeroUpper.cpp - ${LLVM_DIR}/lib/Target/X86/X86WinAllocaExpander.cpp - ${LLVM_DIR}/lib/Target/X86/X86WinEHState.cpp ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineAddSub.cpp ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineCalls.cpp @@ -1613,6 +1513,242 @@ set(LLVM_LIST ${LLVM_DIR}/lib/Transforms/Utils/ValueMapper.cpp ) +if(ARCH STREQUAL "x86" OR ARCH STREQUAL "x86_64") + list(APPEND LLVM_LIST + ${LLVM_DIR}/lib/Target/X86/AsmParser/X86AsmInstrumentation.cpp + ${LLVM_DIR}/lib/Target/X86/AsmParser/X86AsmParser.cpp + ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp + ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86InstComments.cpp + ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86InstPrinterCommon.cpp + ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86ELFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp + ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86WinCOFFTargetStreamer.cpp + ${LLVM_DIR}/lib/Target/X86/ShadowCallStack.cpp + ${LLVM_DIR}/lib/Target/X86/TargetInfo/X86TargetInfo.cpp + ${LLVM_DIR}/lib/Target/X86/Utils/X86ShuffleDecode.cpp + ${LLVM_DIR}/lib/Target/X86/X86AsmPrinter.cpp + ${LLVM_DIR}/lib/Target/X86/X86AvoidStoreForwardingBlocks.cpp + ${LLVM_DIR}/lib/Target/X86/X86CallFrameOptimization.cpp + ${LLVM_DIR}/lib/Target/X86/X86CallLowering.cpp + ${LLVM_DIR}/lib/Target/X86/X86CallingConv.cpp + ${LLVM_DIR}/lib/Target/X86/X86CmovConversion.cpp + ${LLVM_DIR}/lib/Target/X86/X86DomainReassignment.cpp + ${LLVM_DIR}/lib/Target/X86/X86EvexToVex.cpp + ${LLVM_DIR}/lib/Target/X86/X86ExpandPseudo.cpp + ${LLVM_DIR}/lib/Target/X86/X86FastISel.cpp + ${LLVM_DIR}/lib/Target/X86/X86FixupBWInsts.cpp + ${LLVM_DIR}/lib/Target/X86/X86FixupLEAs.cpp + ${LLVM_DIR}/lib/Target/X86/X86FixupSetCC.cpp + ${LLVM_DIR}/lib/Target/X86/X86FlagsCopyLowering.cpp + ${LLVM_DIR}/lib/Target/X86/X86FloatingPoint.cpp + ${LLVM_DIR}/lib/Target/X86/X86FrameLowering.cpp + ${LLVM_DIR}/lib/Target/X86/X86ISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/X86/X86ISelLowering.cpp + ${LLVM_DIR}/lib/Target/X86/X86IndirectBranchTracking.cpp + ${LLVM_DIR}/lib/Target/X86/X86InstrFMA3Info.cpp + ${LLVM_DIR}/lib/Target/X86/X86InstrFoldTables.cpp + ${LLVM_DIR}/lib/Target/X86/X86InstrInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86InstructionSelector.cpp + ${LLVM_DIR}/lib/Target/X86/X86InterleavedAccess.cpp + ${LLVM_DIR}/lib/Target/X86/X86LegalizerInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86MCInstLower.cpp + ${LLVM_DIR}/lib/Target/X86/X86MachineFunctionInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86MacroFusion.cpp + ${LLVM_DIR}/lib/Target/X86/X86OptimizeLEAs.cpp + ${LLVM_DIR}/lib/Target/X86/X86PadShortFunction.cpp + ${LLVM_DIR}/lib/Target/X86/X86RegisterBankInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86RegisterInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86RetpolineThunks.cpp + ${LLVM_DIR}/lib/Target/X86/X86SelectionDAGInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp + ${LLVM_DIR}/lib/Target/X86/X86SpeculativeLoadHardening.cpp + ${LLVM_DIR}/lib/Target/X86/X86Subtarget.cpp + ${LLVM_DIR}/lib/Target/X86/X86TargetMachine.cpp + ${LLVM_DIR}/lib/Target/X86/X86TargetObjectFile.cpp + ${LLVM_DIR}/lib/Target/X86/X86TargetTransformInfo.cpp + ${LLVM_DIR}/lib/Target/X86/X86VZeroUpper.cpp + ${LLVM_DIR}/lib/Target/X86/X86WinAllocaExpander.cpp + ${LLVM_DIR}/lib/Target/X86/X86WinEHState.cpp + ) +elseif(ARCH STREQUAL "mipsel" OR ARCH STREQUAL "mips64el") + list(APPEND LLVM_LIST + ${LLVM_DIR}/lib/Target/Mips/AsmParser/MipsAsmParser.cpp + ${LLVM_DIR}/lib/Target/Mips/InstPrinter/MipsInstPrinter.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsABIFlagsSection.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsABIInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsELFStreamer.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsMCAsmInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsMCCodeEmitter.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsOptionRecord.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsTargetStreamer.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsMCExpr.cpp + ${LLVM_DIR}/lib/Target/Mips/MCTargetDesc/MipsNaClELFStreamer.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16FrameLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16HardFloat.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16HardFloatInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16InstrInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16ISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16ISelLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/Mips16RegisterInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsAnalyzeImmediate.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsAsmPrinter.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsCallLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsCCState.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsConstantIslandPass.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsDelaySlotFiller.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsExpandPseudo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsFastISel.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsInstrInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsInstructionSelector.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsISelLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsFrameLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsLegalizerInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsBranchExpansion.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsMCInstLower.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsMachineFunction.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsModuleISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsOptimizePICCall.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsOs16.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsRegisterBankInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsRegisterInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSEFrameLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSEInstrInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSEISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSEISelLowering.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSERegisterInfo.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsSubtarget.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsTargetMachine.cpp + ${LLVM_DIR}/lib/Target/Mips/MipsTargetObjectFile.cpp + ${LLVM_DIR}/lib/Target/Mips/MicroMipsSizeReduction.cpp + ${LLVM_DIR}/lib/Target/Mips/TargetInfo/MipsTargetInfo.cpp + ) +elseif(ARCH STREQUAL "aarch64") + list(APPEND LLVM_LIST + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFStreamer.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64WinCOFFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCCodeEmitter.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp + ${LLVM_DIR}/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64ISelLowering.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64FastISel.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64InstrInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64PromoteConstant.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp + ${LLVM_DIR}/lib/Target/AArch64/Utils/AArch64BaseInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64InstructionSelector.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64SelectionDAGInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64A53Fix835769.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetMachine.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64CallLowering.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64SIMDInstrOpt.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64Subtarget.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetObjectFile.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64RegisterInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64ConditionOptimizer.cpp + ${LLVM_DIR}/lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp + ${LLVM_DIR}/lib/Target/AArch64/Disassembler/AArch64ExternalSymbolizer.cpp + ${LLVM_DIR}/lib/Target/AArch64/TargetInfo/AArch64TargetInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64ConditionalCompares.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64DeadRegisterDefinitionsPass.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64LegalizerInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64StorePairSuppress.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64PBQPRegAlloc.cpp + ${LLVM_DIR}/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64CleanupLocalDynamicTLSPass.cpp + ${LLVM_DIR}/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64MCInstLower.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64TargetTransformInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64RedundantCopyElimination.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64CollectLOH.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64AsmPrinter.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64RegisterBankInfo.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64CondBrTuning.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64FrameLowering.cpp + ${LLVM_DIR}/lib/Target/AArch64/AArch64MacroFusion.cpp + ) +elseif(ARCH STREQUAL "arm") + list(APPEND LLVM_LIST + ${LLVM_DIR}/lib/Target/ARM/ARMConstantIslandPass.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMWinCOFFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCAsmInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMTargetStreamer.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMachORelocationInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMWinCOFFStreamer.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp + ${LLVM_DIR}/lib/Target/ARM/MCTargetDesc/ARMUnwindOpAsm.cpp + ${LLVM_DIR}/lib/Target/ARM/ThumbRegisterInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMMachineFunctionInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMFrameLowering.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMBaseRegisterInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMCallLowering.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMTargetMachine.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMBaseInstrInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/Thumb1FrameLowering.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMRegisterBankInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/Utils/ARMBaseInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMComputeBlockSize.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMSelectionDAGInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMInstructionSelector.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMLoadStoreOptimizer.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMTargetObjectFile.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMISelLowering.cpp + ${LLVM_DIR}/lib/Target/ARM/Disassembler/ARMDisassembler.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMExpandPseudoInsts.cpp + ${LLVM_DIR}/lib/Target/ARM/TargetInfo/ARMTargetInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMInstrInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/MLxExpansionPass.cpp + ${LLVM_DIR}/lib/Target/ARM/Thumb2SizeReduction.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMConstantPoolValue.cpp + ${LLVM_DIR}/lib/Target/ARM/Thumb2InstrInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMRegisterInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMSubtarget.cpp + ${LLVM_DIR}/lib/Target/ARM/AsmParser/ARMAsmParser.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMParallelDSP.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMISelDAGToDAG.cpp + ${LLVM_DIR}/lib/Target/ARM/A15SDOptimizer.cpp + ${LLVM_DIR}/lib/Target/ARM/Thumb2ITBlockPass.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMFastISel.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMMacroFusion.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMAsmPrinter.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMMCInstLower.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMHazardRecognizer.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMCodeGenPrepare.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMTargetTransformInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/Thumb1InstrInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMLegalizerInfo.cpp + ${LLVM_DIR}/lib/Target/ARM/ARMOptimizeBarriersPass.cpp + ) + endif() + set(LLVM_INCLUDE_DIR "") if(WIN32) @@ -1620,32 +1756,54 @@ if(WIN32) elseif(LINUX) list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/linux/include) elseif(APPLE) - # list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/include-osx) + list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/darwin/include) +elseif(ANDROID) + list(APPEND LLVM_INCLUDE_DIR ${LLVM_CONFIG_DIR}/android/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/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/X86 ${LLVM_CONFIG_DIR}/common/lib/Transforms/InstCombine ) -endif() # SWIFTSHADER_LLVM_VERSION +endif() # REACTOR_LLVM_VERSION + +# Suppress known LLVM warnings +set(LLVM_COMPILE_FLAGS) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") + list(APPEND LLVM_COMPILE_FLAGS + "-Wno-comment" # multi-line comment + "-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-unused-but-set-variable" # variable ‘X’ set but not used + ) +endif() +string (REPLACE ";" " " LLVM_COMPILE_FLAGS "${LLVM_COMPILE_FLAGS}") add_library(llvm STATIC ${LLVM_LIST}) set_target_properties(llvm PROPERTIES POSITION_INDEPENDENT_CODE 1 INCLUDE_DIRECTORIES "${LLVM_INCLUDE_DIR}" + COMPILE_FLAGS "${LLVM_COMPILE_FLAGS}" COMPILE_DEFINITIONS "__STDC_CONSTANT_MACROS; __STDC_LIMIT_MACROS;" FOLDER "LLVM" ) +# Add required libraries for LLVM +if(LINUX) + target_link_libraries(llvm dl) +endif(LINUX) + ########################################################### # Subzero ########################################################### @@ -1681,6 +1839,11 @@ if(${REACTOR_BACKEND} STREQUAL "Subzero") ${SUBZERO_DIR}/src/IceVariableSplitting.cpp ) + # FIXME: Shouldn't depend on external source files directly. + list(APPEND SUBZERO_LIST + ${SOURCE_DIR}/Common/Memory.cpp + ) + if(ARCH STREQUAL "x86_64") list(APPEND SUBZERO_LIST ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp @@ -1702,6 +1865,13 @@ if(${REACTOR_BACKEND} STREQUAL "Subzero") ${SUBZERO_DIR}/src/IceTargetLoweringARM32.cpp ) set(SUBZERO_TARGET ARM32) + elseif(ARCH STREQUAL "mipsel") + list(APPEND SUBZERO_LIST + ${SUBZERO_DIR}/src/IceAssemblerMIPS32.cpp + ${SUBZERO_DIR}/src/IceInstMIPS32.cpp + ${SUBZERO_DIR}/src/IceTargetLoweringMIPS32.cpp + ) + set(SUBZERO_TARGET MIPS32) else() message(FATAL_ERROR "Architecture '${ARCH}' not supported by Subzero") endif() @@ -1713,18 +1883,23 @@ if(${REACTOR_BACKEND} STREQUAL "Subzero") ) set(SUBZERO_REACTOR_LIST + ${SOURCE_DIR}/Reactor/Reactor.cpp ${SOURCE_DIR}/Reactor/SubzeroReactor.cpp ${SOURCE_DIR}/Reactor/Routine.cpp ${SOURCE_DIR}/Reactor/Optimizer.cpp ${SOURCE_DIR}/Reactor/Nucleus.hpp ${SOURCE_DIR}/Reactor/Routine.hpp + ${SOURCE_DIR}/Reactor/Debug.cpp + ${SOURCE_DIR}/Reactor/Debug.hpp + ${SOURCE_DIR}/Reactor/ExecutableMemory.cpp + ${SOURCE_DIR}/Reactor/ExecutableMemory.hpp ) set(SUBZERO_INCLUDE_DIR ${SUBZERO_DIR}/ ${SUBZERO_LLVM_DIR}/include/ ${SUBZERO_DIR}/pnacl-llvm/include/ - ) + ) if(WIN32) list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Windows/include/) @@ -1758,7 +1933,7 @@ endif() set(COMMON_INCLUDE_DIR ${SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/include ${LLVM_INCLUDE_DIR} ) set(OPENGL_INCLUDE_DIR @@ -1766,6 +1941,10 @@ set(OPENGL_INCLUDE_DIR ${COMMON_INCLUDE_DIR} ) +set(VULKAN_INCLUDE_DIR + ${COMMON_INCLUDE_DIR} +) + ########################################################### # File Lists ########################################################### @@ -1797,6 +1976,7 @@ list(REMOVE_ITEM SWIFTSHADER_LIST ) set(REACTOR_LLVM_LIST + ${SOURCE_DIR}/Reactor/Reactor.cpp ${SOURCE_DIR}/Reactor/LLVMReactor.cpp ${SOURCE_DIR}/Reactor/Nucleus.hpp ${SOURCE_DIR}/Reactor/Routine.cpp @@ -1805,6 +1985,12 @@ set(REACTOR_LLVM_LIST ${SOURCE_DIR}/Reactor/LLVMRoutine.hpp ${SOURCE_DIR}/Reactor/LLVMRoutineManager.cpp ${SOURCE_DIR}/Reactor/LLVMRoutineManager.hpp + ${SOURCE_DIR}/Reactor/CPUID.cpp + ${SOURCE_DIR}/Reactor/CPUID.hpp + ${SOURCE_DIR}/Reactor/Debug.cpp + ${SOURCE_DIR}/Reactor/Debug.hpp + ${SOURCE_DIR}/Reactor/ExecutableMemory.cpp + ${SOURCE_DIR}/Reactor/ExecutableMemory.hpp ) file(GLOB_RECURSE EGL_LIST @@ -1815,17 +2001,9 @@ file(GLOB_RECURSE EGL_LIST ${OPENGL_DIR}/common/Object.hpp ${OPENGL_DIR}/common/debug.cpp ${OPENGL_DIR}/common/debug.h - ${CMAKE_SOURCE_DIR}/include/*.h -) - -file(GLOB_RECURSE GL32_LIST - ${OPENGL_DIR}/libGL/*.cpp - ${OPENGL_DIR}/libGL/*.h - ${OPENGL_DIR}/libGL/*.hpp - ${OPENGL_DIR}/common/*.cpp - ${OPENGL_DIR}/common/*.h - ${OPENGL_DIR}/common/*.hpp - ${CMAKE_SOURCE_DIR}/include/GL/*.h + ${SOURCE_DIR}/Common/SharedLibrary.cpp + ${SOURCE_DIR}/Common/SharedLibrary.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h ) file(GLOB_RECURSE GLES2_LIST @@ -1835,9 +2013,11 @@ file(GLOB_RECURSE GLES2_LIST ${OPENGL_DIR}/common/*.cpp ${OPENGL_DIR}/common/*.h ${OPENGL_DIR}/common/*.hpp - ${CMAKE_SOURCE_DIR}/include/KHR/*.h - ${CMAKE_SOURCE_DIR}/include/GLES2/*.h - ${CMAKE_SOURCE_DIR}/include/GLES3/*.h + ${SOURCE_DIR}/Common/SharedLibrary.cpp + ${SOURCE_DIR}/Common/SharedLibrary.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/KHR/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES2/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES3/*.h ) file(GLOB_RECURSE GLES_CM_LIST @@ -1847,8 +2027,10 @@ file(GLOB_RECURSE GLES_CM_LIST ${OPENGL_DIR}/common/*.cpp ${OPENGL_DIR}/common/*.h ${OPENGL_DIR}/common/*.hpp - ${CMAKE_SOURCE_DIR}/include/KHR/*.h - ${CMAKE_SOURCE_DIR}/include/GLES/*.h + ${SOURCE_DIR}/Common/SharedLibrary.cpp + ${SOURCE_DIR}/Common/SharedLibrary.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/KHR/*.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/GLES/*.h ) file(GLOB_RECURSE OPENGL_COMPILER_LIST @@ -1863,6 +2045,41 @@ file(GLOB_RECURSE OPENGL_COMPILER_OS_SPECIFIC_LIST ) list(REMOVE_ITEM OPENGL_COMPILER_LIST ${OPENGL_COMPILER_OS_SPECIFIC_LIST}) +file(GLOB_RECURSE VULKAN_LIST + ${VULKAN_DIR}/*.cpp + ${VULKAN_DIR}/*.h + ${VULKAN_DIR}/*.hpp + ${SOURCE_DIR}/System/CPUID.cpp + ${SOURCE_DIR}/System/CPUID.hpp + ${SOURCE_DIR}/System/Configurator.cpp + ${SOURCE_DIR}/System/Configurator.hpp + ${SOURCE_DIR}/System/Debug.cpp + ${SOURCE_DIR}/System/Debug.hpp + ${SOURCE_DIR}/System/Half.cpp + ${SOURCE_DIR}/System/Half.hpp + ${SOURCE_DIR}/System/Math.cpp + ${SOURCE_DIR}/System/Math.hpp + ${SOURCE_DIR}/System/Memory.cpp + ${SOURCE_DIR}/System/Memory.hpp + ${SOURCE_DIR}/System/Resource.cpp + ${SOURCE_DIR}/System/Resource.hpp + ${SOURCE_DIR}/System/Socket.cpp + ${SOURCE_DIR}/System/Socket.hpp + ${SOURCE_DIR}/System/Thread.cpp + ${SOURCE_DIR}/System/Thread.hpp + ${SOURCE_DIR}/System/Timer.cpp + ${SOURCE_DIR}/System/Timer.hpp + ${SOURCE_DIR}/Device/*.cpp + ${SOURCE_DIR}/Device/*.hpp + ${SOURCE_DIR}/Pipeline/*.cpp + ${SOURCE_DIR}/Pipeline/*.hpp + ${SOURCE_DIR}/WSI/VkSurfaceKHR.cpp + ${SOURCE_DIR}/WSI/VkSurfaceKHR.hpp + ${SOURCE_DIR}/WSI/VkSwapchainKHR.cpp + ${SOURCE_DIR}/WSI/VkSwapchainKHR.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan/*.h} +) + ########################################################### # Append OS specific files to lists ########################################################### @@ -1878,7 +2095,6 @@ if(WIN32) ) list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_win.cpp) list(APPEND EGL_LIST ${OPENGL_DIR}/libEGL/libEGL.rc) - list(APPEND GL32_LIST ${OPENGL_DIR}/libGL/libGL.rc) list(APPEND GLES2_LIST ${OPENGL_DIR}/libGLESv2/libGLESv2.rc) list(APPEND GLES_CM_LIST ${OPENGL_DIR}/libGLES_CM/libGLES_CM.rc) elseif(LINUX) @@ -1897,6 +2113,13 @@ elseif(LINUX) list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_posix.cpp ) + + list(APPEND VULKAN_LIST + ${SOURCE_DIR}/WSI/libX11.cpp + ${SOURCE_DIR}/WSI/libX11.hpp + ${SOURCE_DIR}/WSI/XlibSurfaceKHR.cpp + ${SOURCE_DIR}/WSI/XlibSurfaceKHR.hpp + ) elseif(APPLE) list(APPEND SWIFTSHADER_LIST ${SOURCE_DIR}/Main/FrameBufferOSX.mm @@ -1909,6 +2132,14 @@ elseif(APPLE) list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_posix.cpp ) +elseif(ANDROID) + list(APPEND SWIFTSHADER_LIST + ${SOURCE_DIR}/Main/FrameBufferAndroid.cpp + ${SOURCE_DIR}/Main/FrameBufferAndroid.hpp + ) + list(APPEND OPENGL_COMPILER_LIST + ${OPENGL_COMPILER_DIR}/ossource_posix.cpp + ) endif() if(WIN32) @@ -1974,6 +2205,9 @@ if(BUILD_EGL) COMPILE_DEFINITIONS "EGL_EGLEXT_PROTOTYPES; EGLAPI=; NO_SANITIZE_FUNCTION=;" PREFIX "" ) + if (ANDROID) + set_target_properties(libEGL PROPERTIES SUFFIX "_swiftshader.so") + endif () set_shared_library_export_map(libEGL ${SOURCE_DIR}/OpenGL/libEGL) target_link_libraries(libEGL ${OS_LIBS}) add_custom_command( @@ -1981,21 +2215,9 @@ if(BUILD_EGL) POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory $/translator COMMAND ${CMAKE_COMMAND} -E copy $ $/translator/${LIB_PREFIX}EGL_translator${CMAKE_SHARED_LIBRARY_SUFFIX} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/ - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/ - ) -endif() - -if(BUILD_GL32) - add_library(libGL SHARED ${GL32_LIST}) - set_target_properties(libGL PROPERTIES - INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}" - FOLDER "OpenGL" - COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES" - PREFIX "" + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ ) - set_shared_library_export_map(libGL ${SOURCE_DIR}/OpenGL/libGL) - target_link_libraries(libGL SwiftShader ${Reactor} GLCompiler ${OS_LIBS}) endif() if(BUILD_GLESv2) @@ -2006,6 +2228,9 @@ if(BUILD_GLESv2) COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; GL_API=; GL_APICALL=; GLAPI=; NO_SANITIZE_FUNCTION=;" PREFIX "" ) + if (ANDROID) + set_target_properties(libGLESv2 PROPERTIES SUFFIX "_swiftshader.so") + endif () set_shared_library_export_map(libGLESv2 ${SOURCE_DIR}/OpenGL/libGLESv2) target_link_libraries(libGLESv2 SwiftShader ${Reactor} GLCompiler ${OS_LIBS}) add_custom_command( @@ -2013,8 +2238,8 @@ if(BUILD_GLESv2) POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory $/translator COMMAND ${CMAKE_COMMAND} -E copy $ $/translator/${LIB_PREFIX}GLES_V2_translator${CMAKE_SHARED_LIBRARY_SUFFIX} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/ - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/ + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ ) endif() @@ -2026,6 +2251,9 @@ if(BUILD_GLES_CM) COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; EGLAPI=; GL_API=; GL_APICALL=; GLAPI=;" PREFIX "" ) + if (ANDROID) + set_target_properties(libGLES_CM PROPERTIES SUFFIX "_swiftshader.so") + endif () set_shared_library_export_map(libGLES_CM ${SOURCE_DIR}/OpenGL/libGLES_CM) target_link_libraries(libGLES_CM SwiftShader ${Reactor} GLCompiler ${OS_LIBS}) add_custom_command( @@ -2036,6 +2264,37 @@ if(BUILD_GLES_CM) ) endif() +if(BUILD_VULKAN) + if (NOT TARGET SPIRV-Tools) + # This variable is also used by SPIRV-Tools to locate SPIRV-Headers + set(SPIRV-Headers_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/SPIRV-Headers") + list(APPEND VULKAN_INCLUDE_DIR "${SPIRV-Headers_SOURCE_DIR}/include") + + add_subdirectory(third_party/SPIRV-Tools) + endif() + + add_library(libvk_swiftshader SHARED ${VULKAN_LIST}) + set_target_properties(libvk_swiftshader PROPERTIES + INCLUDE_DIRECTORIES "${VULKAN_INCLUDE_DIR}" + FOLDER "Vulkan" + COMPILE_DEFINITIONS "NO_SANITIZE_FUNCTION=;" + PREFIX "" + ) + set_shared_library_export_map(libvk_swiftshader ${SOURCE_DIR}/Vulkan) + target_link_libraries(libvk_swiftshader ${Reactor} ${OS_LIBS} SPIRV-Tools SPIRV-Tools-opt) + add_custom_command( + TARGET libvk_swiftshader + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory $/translator + COMMAND ${CMAKE_COMMAND} -E copy $ $/translator/${LIB_PREFIX}Vulkan_translator${CMAKE_SHARED_LIBRARY_SUFFIX} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/ + ) + configure_file( + "${VULKAN_DIR}/vk_swiftshader_icd.json.tmpl" + "${CMAKE_BINARY_DIR}/${CMAKE_SYSTEM_NAME}/vk_swiftshader_icd.json") +endif() + ########################################################### # Sample programs ########################################################### @@ -2044,7 +2303,7 @@ if(BUILD_SAMPLES) if(WIN32) add_executable(OGLES2HelloAPI ${HELLO2_DIR}/OGLES2HelloAPI_Windows.cpp) set_target_properties(OGLES2HelloAPI PROPERTIES - INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include" + INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include" COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES" FOLDER "Samples" ) @@ -2054,7 +2313,7 @@ if(BUILD_SAMPLES) elseif(LINUX) add_executable(OGLES2HelloAPI ${HELLO2_DIR}/OGLES2HelloAPI_LinuxX11.cpp) set_target_properties(OGLES2HelloAPI PROPERTIES - INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include" + INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include" COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES" ) target_link_libraries(OGLES2HelloAPI dl X11 libEGL libGLESv2) # Explicitly link our "lib*" targets, not the platform provided "EGL" and "GLESv2" @@ -2064,8 +2323,9 @@ if(BUILD_SAMPLES) ${HELLO2_DIR}/Build/OSX/en.lproj/MainMenu.xib ) set_target_properties(OGLES2HelloAPI PROPERTIES - INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include" + INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/include" COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES" + COMPILE_FLAGS "-Wno-deprecated-declarations" # 'NSTitledWindowMask', 'NSClosableWindowMask' is deprecated MACOSX_BUNDLE_INFO_PLIST "${HELLO2_DIR}/Build/OSX/Info.plist" ) target_link_libraries(OGLES2HelloAPI libEGL libGLESv2 ${OS_LIBS}) @@ -2075,41 +2335,43 @@ if(BUILD_SAMPLES) endif() endif() -if(BUILD_TESTS AND ${REACTOR_BACKEND} STREQUAL "Subzero") - set(SUBZERO_TEST_LIST - ${SOURCE_DIR}/Reactor/Main.cpp - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc +if(BUILD_TESTS) + set(REACTOR_UNIT_TESTS_LIST + ${SOURCE_DIR}/Reactor/ReactorUnitTests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc ) - set(SUBZERO_TEST_INCLUDE_DIR - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/include - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/ + set(REACTOR_UNIT_TESTS_INCLUDE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/include + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/ ) - add_executable(SubzeroTest ${SUBZERO_TEST_LIST}) - set_target_properties(SubzeroTest PROPERTIES - INCLUDE_DIRECTORIES "${SUBZERO_TEST_INCLUDE_DIR}" + add_executable(ReactorUnitTests ${REACTOR_UNIT_TESTS_LIST}) + set_target_properties(ReactorUnitTests PROPERTIES + INCLUDE_DIRECTORIES "${REACTOR_UNIT_TESTS_INCLUDE_DIR}" FOLDER "Tests" ) - if(WIN32) - target_link_libraries(SubzeroTest ReactorSubzero) + + if(NOT WIN32 AND ${REACTOR_BACKEND} STREQUAL "Subzero") + target_link_libraries(ReactorUnitTests ${Reactor} pthread dl) else() - target_link_libraries(SubzeroTest ReactorSubzero pthread dl) + target_link_libraries(ReactorUnitTests ${Reactor}) endif() endif() +# GLES unit tests. TODO: Rename 'unittests' to 'gles-unittests'? if(BUILD_TESTS) set(UNITTESTS_LIST - ${CMAKE_SOURCE_DIR}/tests/unittests/main.cpp - ${CMAKE_SOURCE_DIR}/tests/unittests/unittests.cpp - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc + ${CMAKE_CURRENT_SOURCE_DIR}/tests/GLESUnitTests/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/GLESUnitTests/unittests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc ) set(UNITTESTS_INCLUDE_DIR - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/include/ - ${CMAKE_SOURCE_DIR}/third_party/googletest/googlemock/include/ - ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/ - ${CMAKE_SOURCE_DIR}/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googlemock/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/ + ${CMAKE_CURRENT_SOURCE_DIR}/include/ ) add_executable(unittests ${UNITTESTS_LIST}) @@ -2120,4 +2382,34 @@ if(BUILD_TESTS) ) target_link_libraries(unittests libEGL libGLESv2 ${OS_LIBS}) + if(ANDROID) + target_link_libraries(unittests -landroid) + endif() +endif() + +if(BUILD_TESTS AND BUILD_VULKAN) + set(UNITTESTS_LIST + ${CMAKE_CURRENT_SOURCE_DIR}/tests/VulkanUnitTests/Device.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/VulkanUnitTests/Driver.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/VulkanUnitTests/main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/tests/VulkanUnitTests/unittests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc + ) + + set(UNITTESTS_INCLUDE_DIR + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googlemock/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest/ + ${CMAKE_CURRENT_SOURCE_DIR}/third_party/SPIRV-Tools/include + ${CMAKE_CURRENT_SOURCE_DIR}/include/ + ) + + add_executable(vk-unittests ${UNITTESTS_LIST}) + set_target_properties(vk-unittests PROPERTIES + INCLUDE_DIRECTORIES "${UNITTESTS_INCLUDE_DIR}" + FOLDER "Tests" + COMPILE_DEFINITIONS "STANDALONE" + ) + + target_link_libraries(vk-unittests ${OS_LIBS} SPIRV-Tools) endif()