1 cmake_minimum_required(VERSION 2.8)
3 project(SwiftShader C CXX)
5 ###########################################################
7 ###########################################################
9 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
14 message(FATAL_ERROR "Platform is not supported")
17 if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch")
18 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
24 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
31 set(CMAKE_MACOSX_RPATH ON)
33 ###########################################################
35 ###########################################################
37 if(NOT CMAKE_BUILD_TYPE)
38 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
40 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release MinSizeRel RelWithDebInfo)
42 option(BUILD_EGL "Build the EGL library" 1)
44 option(BUILD_GL32 "Build the OpenGL32 library" 1)
46 option(BUILD_GLESv2 "Build the OpenGL ES 2 library" 1)
47 option(BUILD_GLES_CM "Build the OpenGL ES 1.1 library" 1)
49 option(USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" 1)
51 option(BUILD_SAMPLES "Build sample programs" 1)
52 option(BUILD_TESTS "Build test programs" 1)
54 option (MSAN "Build with memory sanitizer" 0)
55 option (ASAN "Build with address sanitizer" 0)
56 option (TSAN "Build with thread sanitizer" 0)
57 option (UBSAN "Build with undefined behavior sanitizer" 0)
59 if(ARCH STREQUAL "arm")
60 set(DEFAULT_REACTOR_BACKEND "Subzero")
62 set(DEFAULT_REACTOR_BACKEND "LLVM")
65 set(REACTOR_BACKEND DEFAULT_REACTOR_BACKEND CACHE STRING "JIT compiler back-end used by Reactor")
66 set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
68 # LLVM disallows calling cmake . from the main LLVM dir, the reason is that
69 # it builds header files that could overwrite the orignal ones. Here we
70 # want to include LLVM as a subdirectory and even though it wouldn't cause
71 # the problem, if cmake . is called from the main dir, the condition that
72 # LLVM checkes, "CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR" will be true. So we
73 # disallow it ourselves too to. In addition if there are remining CMakeFiles
74 # and CMakeCache in the directory, cmake .. from a subdirectory will still
75 # try to build from the main directory so we instruct users to delete these
76 # files when they get the error.
77 if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
78 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.")
81 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
83 ###########################################################
85 ###########################################################
87 # Recursively calls source_group on the files of the directory
88 # so that Visual Studio has the files in a folder tree
89 macro(group_all_sources directory)
90 file(GLOB files RELATIVE ${CMAKE_SOURCE_DIR}/${directory} ${CMAKE_SOURCE_DIR}/${directory}/*)
91 foreach(file ${files})
92 if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/${directory}/${file})
93 group_all_sources(${directory}/${file})
95 string(REPLACE "/" "\\" groupname ${directory})
96 source_group(${groupname} FILES ${CMAKE_SOURCE_DIR}/${directory}/${file})
101 # Takes target library and a directory where the export map is
102 # and add the linker options so that only the API symbols are
104 macro(set_target_export_map TARGET DIR)
105 get_target_property(LINKFLAGS ${TARGET} LINK_FLAGS)
106 if(LINKFLAGS MATCHES "NOTFOUND")
110 set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "/DEF:\"${DIR}/${TARGET}.def\"")
112 # Both hash-style are needed, because we want both gold and
113 # GNU ld to be able to read our libraries (maybe?).
114 # The version script only exports the API functions and
115 # hides all the others. Gc sections is used in combination
116 # with each functions being in its section, to reduce the
118 set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${LINKFLAGS} -Wl,--hash-style=both,--version-script=${DIR}/${TARGET}.lds,--gc-sections")
119 set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS "${DIR}/${TARGET}.lds")
121 if(NOT MSAN AND NOT ASAN AND NOT TSAN AND NOT UBSAN)
122 set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--no-undefined")
127 if(USE_GROUP_SOURCES)
128 group_all_sources(src)
131 ###########################################################
133 ###########################################################
135 set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
136 set(OPENGL_DIR ${SOURCE_DIR}/OpenGL)
137 set(OPENGL_COMPILER_DIR ${OPENGL_DIR}/compiler)
138 set(LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/LLVM)
139 set(SUBZERO_DIR ${CMAKE_SOURCE_DIR}/third_party/subzero)
140 set(SUBZERO_LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/llvm-subzero)
141 set(TESTS_DIR ${CMAKE_SOURCE_DIR}/tests)
142 set(HELLO2_DIR ${CMAKE_SOURCE_DIR}/third_party/PowerVR_SDK/Examples/Beginner/01_HelloAPI/OGLES2)
144 ###########################################################
146 ###########################################################
148 macro(set_cpp_flag FLAG)
149 if(${ARGC} GREATER 1)
150 set(CMAKE_CXX_FLAGS_${ARGV1} "${CMAKE_CXX_FLAGS_${ARGV1}} ${FLAG}")
152 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
158 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
160 set_cpp_flag("--std=c++11")
161 set_cpp_flag("-Wall")
162 set_cpp_flag("-Werror=reorder")
163 set_cpp_flag("-Werror=sign-compare")
164 set_cpp_flag("-fno-exceptions")
166 # Remove xor, and, or and friends from the list of keywords, they are used
168 set_cpp_flag("-fno-operator-names")
170 # LLVM headers requires these flags to be set
171 set_cpp_flag("-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")
175 set_cpp_flag("-msse2")
176 set_cpp_flag("-mfpmath=sse")
177 set_cpp_flag("-march=pentium4")
178 set_cpp_flag("-mtune=generic")
180 if(ARCH EQUAL "x86_64")
182 set_cpp_flag("-fPIC")
183 set_cpp_flag("-march=x86-64")
184 set_cpp_flag("-mtune=generic")
187 set_cpp_flag("-DUSE_X11=1")
190 # Use -g3 to have even more debug info
191 set_cpp_flag("-g -g3" DEBUG)
192 set_cpp_flag("-g -g3" RELWITHDEBINFO)
193 set_cpp_flag("-s" RELEASE)
195 # For distribution it is more important to be slim than super optimized
196 set_cpp_flag("-Os" RELEASE)
197 set_cpp_flag("-Os" RELWITHDEBINFO)
199 set_cpp_flag("-DNDEBUG" RELEASE)
200 set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
201 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELEASE)
202 set_cpp_flag("-DANGLE_DISABLE_TRACE" RELWITHDEBINFO)
204 # Put each variable and function in its own section so that when linking
205 # with -gc-sections unused functions and variables are removed.
206 set_cpp_flag("-ffunction-sections" RELEASE)
207 set_cpp_flag("-fdata-sections" RELEASE)
208 set_cpp_flag("-fomit-frame-pointer" RELEASE)
210 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
212 set_cpp_flag("-fsanitize=memory")
214 set_cpp_flag("-fsanitize=address")
216 set_cpp_flag("-fsanitize=thread")
218 set_cpp_flag("-fsanitize=undefined -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/third_party/LLVM/ubsan_blacklist.txt")
224 add_definitions(-DWINVER=0x501 -DNOMINMAX -DSTRICT)
225 set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "" "lib")
229 ###########################################################
231 ###########################################################
234 ${LLVM_DIR}/lib/Analysis/AliasAnalysis.cpp
235 ${LLVM_DIR}/lib/Analysis/AliasSetTracker.cpp
236 ${LLVM_DIR}/lib/Analysis/BasicAliasAnalysis.cpp
237 ${LLVM_DIR}/lib/Analysis/BranchProbabilityInfo.cpp
238 ${LLVM_DIR}/lib/Analysis/CaptureTracking.cpp
239 ${LLVM_DIR}/lib/Analysis/ConstantFolding.cpp
240 ${LLVM_DIR}/lib/Analysis/DIBuilder.cpp
241 ${LLVM_DIR}/lib/Analysis/DebugInfo.cpp
242 ${LLVM_DIR}/lib/Analysis/IVUsers.cpp
243 ${LLVM_DIR}/lib/Analysis/InstructionSimplify.cpp
244 ${LLVM_DIR}/lib/Analysis/Loads.cpp
245 ${LLVM_DIR}/lib/Analysis/LoopInfo.cpp
246 ${LLVM_DIR}/lib/Analysis/LoopPass.cpp
247 ${LLVM_DIR}/lib/Analysis/MemoryBuiltins.cpp
248 ${LLVM_DIR}/lib/Analysis/MemoryDependenceAnalysis.cpp
249 ${LLVM_DIR}/lib/Analysis/NoAliasAnalysis.cpp
250 ${LLVM_DIR}/lib/Analysis/PHITransAddr.cpp
251 ${LLVM_DIR}/lib/Analysis/PathNumbering.cpp
252 ${LLVM_DIR}/lib/Analysis/ProfileInfo.cpp
253 ${LLVM_DIR}/lib/Analysis/ScalarEvolution.cpp
254 ${LLVM_DIR}/lib/Analysis/ScalarEvolutionExpander.cpp
255 ${LLVM_DIR}/lib/Analysis/ScalarEvolutionNormalization.cpp
256 ${LLVM_DIR}/lib/Analysis/TypeBasedAliasAnalysis.cpp
257 ${LLVM_DIR}/lib/Analysis/ValueTracking.cpp
258 ${LLVM_DIR}/lib/CodeGen/AggressiveAntiDepBreaker.cpp
259 ${LLVM_DIR}/lib/CodeGen/AllocationOrder.cpp
260 ${LLVM_DIR}/lib/CodeGen/Analysis.cpp
261 ${LLVM_DIR}/lib/CodeGen/BranchFolding.cpp
262 ${LLVM_DIR}/lib/CodeGen/CalcSpillWeights.cpp
263 ${LLVM_DIR}/lib/CodeGen/CallingConvLower.cpp
264 ${LLVM_DIR}/lib/CodeGen/CodePlacementOpt.cpp
265 ${LLVM_DIR}/lib/CodeGen/CriticalAntiDepBreaker.cpp
266 ${LLVM_DIR}/lib/CodeGen/DeadMachineInstructionElim.cpp
267 ${LLVM_DIR}/lib/CodeGen/DwarfEHPrepare.cpp
268 ${LLVM_DIR}/lib/CodeGen/ELFCodeEmitter.cpp
269 ${LLVM_DIR}/lib/CodeGen/ELFWriter.cpp
270 ${LLVM_DIR}/lib/CodeGen/EdgeBundles.cpp
271 ${LLVM_DIR}/lib/CodeGen/ExecutionDepsFix.cpp
272 ${LLVM_DIR}/lib/CodeGen/ExpandISelPseudos.cpp
273 ${LLVM_DIR}/lib/CodeGen/ExpandPostRAPseudos.cpp
274 ${LLVM_DIR}/lib/CodeGen/GCMetadata.cpp
275 ${LLVM_DIR}/lib/CodeGen/GCStrategy.cpp
276 ${LLVM_DIR}/lib/CodeGen/InlineSpiller.cpp
277 ${LLVM_DIR}/lib/CodeGen/InterferenceCache.cpp
278 ${LLVM_DIR}/lib/CodeGen/IntrinsicLowering.cpp
279 ${LLVM_DIR}/lib/CodeGen/LLVMTargetMachine.cpp
280 ${LLVM_DIR}/lib/CodeGen/LatencyPriorityQueue.cpp
281 ${LLVM_DIR}/lib/CodeGen/LexicalScopes.cpp
282 ${LLVM_DIR}/lib/CodeGen/LiveDebugVariables.cpp
283 ${LLVM_DIR}/lib/CodeGen/LiveInterval.cpp
284 ${LLVM_DIR}/lib/CodeGen/LiveIntervalAnalysis.cpp
285 ${LLVM_DIR}/lib/CodeGen/LiveIntervalUnion.cpp
286 ${LLVM_DIR}/lib/CodeGen/LiveRangeCalc.cpp
287 ${LLVM_DIR}/lib/CodeGen/LiveRangeEdit.cpp
288 ${LLVM_DIR}/lib/CodeGen/LiveStackAnalysis.cpp
289 ${LLVM_DIR}/lib/CodeGen/LiveVariables.cpp
290 ${LLVM_DIR}/lib/CodeGen/LocalStackSlotAllocation.cpp
291 ${LLVM_DIR}/lib/CodeGen/MachineBasicBlock.cpp
292 ${LLVM_DIR}/lib/CodeGen/MachineCSE.cpp
293 ${LLVM_DIR}/lib/CodeGen/MachineDominators.cpp
294 ${LLVM_DIR}/lib/CodeGen/MachineFunction.cpp
295 ${LLVM_DIR}/lib/CodeGen/MachineFunctionAnalysis.cpp
296 ${LLVM_DIR}/lib/CodeGen/MachineFunctionPass.cpp
297 ${LLVM_DIR}/lib/CodeGen/MachineFunctionPrinterPass.cpp
298 ${LLVM_DIR}/lib/CodeGen/MachineInstr.cpp
299 ${LLVM_DIR}/lib/CodeGen/MachineLICM.cpp
300 ${LLVM_DIR}/lib/CodeGen/MachineLoopInfo.cpp
301 ${LLVM_DIR}/lib/CodeGen/MachineModuleInfo.cpp
302 ${LLVM_DIR}/lib/CodeGen/MachineModuleInfoImpls.cpp
303 ${LLVM_DIR}/lib/CodeGen/MachinePassRegistry.cpp
304 ${LLVM_DIR}/lib/CodeGen/MachineRegisterInfo.cpp
305 ${LLVM_DIR}/lib/CodeGen/MachineSSAUpdater.cpp
306 ${LLVM_DIR}/lib/CodeGen/MachineSink.cpp
307 ${LLVM_DIR}/lib/CodeGen/MachineVerifier.cpp
308 ${LLVM_DIR}/lib/CodeGen/ObjectCodeEmitter.cpp
309 ${LLVM_DIR}/lib/CodeGen/OptimizePHIs.cpp
310 ${LLVM_DIR}/lib/CodeGen/PHIElimination.cpp
311 ${LLVM_DIR}/lib/CodeGen/PHIEliminationUtils.cpp
312 ${LLVM_DIR}/lib/CodeGen/Passes.cpp
313 ${LLVM_DIR}/lib/CodeGen/PeepholeOptimizer.cpp
314 ${LLVM_DIR}/lib/CodeGen/PostRASchedulerList.cpp
315 ${LLVM_DIR}/lib/CodeGen/ProcessImplicitDefs.cpp
316 ${LLVM_DIR}/lib/CodeGen/PrologEpilogInserter.cpp
317 ${LLVM_DIR}/lib/CodeGen/PseudoSourceValue.cpp
318 ${LLVM_DIR}/lib/CodeGen/RegAllocBasic.cpp
319 ${LLVM_DIR}/lib/CodeGen/RegAllocFast.cpp
320 ${LLVM_DIR}/lib/CodeGen/RegAllocGreedy.cpp
321 ${LLVM_DIR}/lib/CodeGen/RegAllocLinearScan.cpp
322 ${LLVM_DIR}/lib/CodeGen/RegisterClassInfo.cpp
323 ${LLVM_DIR}/lib/CodeGen/RegisterCoalescer.cpp
324 ${LLVM_DIR}/lib/CodeGen/RegisterScavenging.cpp
325 ${LLVM_DIR}/lib/CodeGen/RenderMachineFunction.cpp
326 ${LLVM_DIR}/lib/CodeGen/ScheduleDAG.cpp
327 ${LLVM_DIR}/lib/CodeGen/ScheduleDAGEmit.cpp
328 ${LLVM_DIR}/lib/CodeGen/ScheduleDAGInstrs.cpp
329 ${LLVM_DIR}/lib/CodeGen/ScheduleDAGPrinter.cpp
330 ${LLVM_DIR}/lib/CodeGen/ScoreboardHazardRecognizer.cpp
331 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
332 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/FastISel.cpp
333 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
334 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/InstrEmitter.cpp
335 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
336 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp
337 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
338 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
339 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeTypesGeneric.cpp
340 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
341 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
342 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/ScheduleDAGFast.cpp
343 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp
344 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
345 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp
346 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
347 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
348 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
349 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/SelectionDAGPrinter.cpp
350 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/TargetLowering.cpp
351 ${LLVM_DIR}/lib/CodeGen/SelectionDAG/TargetSelectionDAGInfo.cpp
352 ${LLVM_DIR}/lib/CodeGen/ShrinkWrapping.cpp
353 ${LLVM_DIR}/lib/CodeGen/SjLjEHPrepare.cpp
354 ${LLVM_DIR}/lib/CodeGen/SlotIndexes.cpp
355 ${LLVM_DIR}/lib/CodeGen/SpillPlacement.cpp
356 ${LLVM_DIR}/lib/CodeGen/Spiller.cpp
357 ${LLVM_DIR}/lib/CodeGen/SplitKit.cpp
358 ${LLVM_DIR}/lib/CodeGen/StackProtector.cpp
359 ${LLVM_DIR}/lib/CodeGen/StackSlotColoring.cpp
360 ${LLVM_DIR}/lib/CodeGen/StrongPHIElimination.cpp
361 ${LLVM_DIR}/lib/CodeGen/TailDuplication.cpp
362 ${LLVM_DIR}/lib/CodeGen/TargetInstrInfoImpl.cpp
363 ${LLVM_DIR}/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
364 ${LLVM_DIR}/lib/CodeGen/TwoAddressInstructionPass.cpp
365 ${LLVM_DIR}/lib/CodeGen/UnreachableBlockElim.cpp
366 ${LLVM_DIR}/lib/CodeGen/VirtRegMap.cpp
367 ${LLVM_DIR}/lib/CodeGen/VirtRegRewriter.cpp
368 ${LLVM_DIR}/lib/ExecutionEngine/ExecutionEngine.cpp
369 ${LLVM_DIR}/lib/ExecutionEngine/JIT/Intercept.cpp
370 ${LLVM_DIR}/lib/ExecutionEngine/JIT/JIT.cpp
371 ${LLVM_DIR}/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp
372 ${LLVM_DIR}/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp
373 ${LLVM_DIR}/lib/ExecutionEngine/JIT/JITEmitter.cpp
374 ${LLVM_DIR}/lib/ExecutionEngine/JIT/JITMemoryManager.cpp
375 ${LLVM_DIR}/lib/ExecutionEngine/JIT/OProfileJITEventListener.cpp
376 ${LLVM_DIR}/lib/ExecutionEngine/TargetSelect.cpp
377 ${LLVM_DIR}/lib/MC/ELFObjectWriter.cpp
378 ${LLVM_DIR}/lib/MC/MCAsmBackend.cpp
379 ${LLVM_DIR}/lib/MC/MCAsmInfo.cpp
380 ${LLVM_DIR}/lib/MC/MCAsmInfoCOFF.cpp
381 ${LLVM_DIR}/lib/MC/MCAsmInfoDarwin.cpp
382 ${LLVM_DIR}/lib/MC/MCAsmStreamer.cpp
383 ${LLVM_DIR}/lib/MC/MCAssembler.cpp
384 ${LLVM_DIR}/lib/MC/MCCodeEmitter.cpp
385 ${LLVM_DIR}/lib/MC/MCCodeGenInfo.cpp
386 ${LLVM_DIR}/lib/MC/MCContext.cpp
387 ${LLVM_DIR}/lib/MC/MCDwarf.cpp
388 ${LLVM_DIR}/lib/MC/MCELF.cpp
389 ${LLVM_DIR}/lib/MC/MCELFObjectTargetWriter.cpp
390 ${LLVM_DIR}/lib/MC/MCELFStreamer.cpp
391 ${LLVM_DIR}/lib/MC/MCExpr.cpp
392 ${LLVM_DIR}/lib/MC/MCInst.cpp
393 ${LLVM_DIR}/lib/MC/MCInstPrinter.cpp
394 ${LLVM_DIR}/lib/MC/MCInstrAnalysis.cpp
395 ${LLVM_DIR}/lib/MC/MCLoggingStreamer.cpp
396 ${LLVM_DIR}/lib/MC/MCMachOStreamer.cpp
397 ${LLVM_DIR}/lib/MC/MCMachObjectTargetWriter.cpp
398 ${LLVM_DIR}/lib/MC/MCNullStreamer.cpp
399 ${LLVM_DIR}/lib/MC/MCObjectFileInfo.cpp
400 ${LLVM_DIR}/lib/MC/MCObjectStreamer.cpp
401 ${LLVM_DIR}/lib/MC/MCObjectWriter.cpp
402 ${LLVM_DIR}/lib/MC/MCSection.cpp
403 ${LLVM_DIR}/lib/MC/MCSectionCOFF.cpp
404 ${LLVM_DIR}/lib/MC/MCSectionELF.cpp
405 ${LLVM_DIR}/lib/MC/MCSectionMachO.cpp
406 ${LLVM_DIR}/lib/MC/MCStreamer.cpp
407 ${LLVM_DIR}/lib/MC/MCSubtargetInfo.cpp
408 ${LLVM_DIR}/lib/MC/MCSymbol.cpp
409 ${LLVM_DIR}/lib/MC/MCWin64EH.cpp
410 ${LLVM_DIR}/lib/MC/MachObjectWriter.cpp
411 ${LLVM_DIR}/lib/MC/SubtargetFeature.cpp
412 ${LLVM_DIR}/lib/MC/WinCOFFObjectWriter.cpp
413 ${LLVM_DIR}/lib/MC/WinCOFFStreamer.cpp
414 ${LLVM_DIR}/lib/Support/APFloat.cpp
415 ${LLVM_DIR}/lib/Support/APInt.cpp
416 ${LLVM_DIR}/lib/Support/Allocator.cpp
417 ${LLVM_DIR}/lib/Support/Atomic.cpp
418 ${LLVM_DIR}/lib/Support/BlockFrequency.cpp
419 ${LLVM_DIR}/lib/Support/BranchProbability.cpp
420 ${LLVM_DIR}/lib/Support/CommandLine.cpp
421 ${LLVM_DIR}/lib/Support/ConstantRange.cpp
422 ${LLVM_DIR}/lib/Support/CrashRecoveryContext.cpp
423 ${LLVM_DIR}/lib/Support/DAGDeltaAlgorithm.cpp
424 ${LLVM_DIR}/lib/Support/DataExtractor.cpp
425 ${LLVM_DIR}/lib/Support/Debug.cpp
426 ${LLVM_DIR}/lib/Support/DeltaAlgorithm.cpp
427 ${LLVM_DIR}/lib/Support/Disassembler.cpp
428 ${LLVM_DIR}/lib/Support/Dwarf.cpp
429 ${LLVM_DIR}/lib/Support/DynamicLibrary.cpp
430 ${LLVM_DIR}/lib/Support/Errno.cpp
431 ${LLVM_DIR}/lib/Support/ErrorHandling.cpp
432 ${LLVM_DIR}/lib/Support/FileUtilities.cpp
433 ${LLVM_DIR}/lib/Support/FoldingSet.cpp
434 ${LLVM_DIR}/lib/Support/FormattedStream.cpp
435 ${LLVM_DIR}/lib/Support/GraphWriter.cpp
436 ${LLVM_DIR}/lib/Support/Host.cpp
437 ${LLVM_DIR}/lib/Support/IncludeFile.cpp
438 ${LLVM_DIR}/lib/Support/IntEqClasses.cpp
439 ${LLVM_DIR}/lib/Support/IntervalMap.cpp
440 ${LLVM_DIR}/lib/Support/IsInf.cpp
441 ${LLVM_DIR}/lib/Support/IsNAN.cpp
442 ${LLVM_DIR}/lib/Support/ManagedStatic.cpp
443 ${LLVM_DIR}/lib/Support/Memory.cpp
444 ${LLVM_DIR}/lib/Support/MemoryBuffer.cpp
445 ${LLVM_DIR}/lib/Support/MemoryObject.cpp
446 ${LLVM_DIR}/lib/Support/Mutex.cpp
447 ${LLVM_DIR}/lib/Support/Path.cpp
448 ${LLVM_DIR}/lib/Support/PathV2.cpp
449 ${LLVM_DIR}/lib/Support/PrettyStackTrace.cpp
450 ${LLVM_DIR}/lib/Support/Process.cpp
451 ${LLVM_DIR}/lib/Support/Program.cpp
452 ${LLVM_DIR}/lib/Support/RWMutex.cpp
453 ${LLVM_DIR}/lib/Support/SearchForAddressOfSpecialSymbol.cpp
454 ${LLVM_DIR}/lib/Support/Signals.cpp
455 ${LLVM_DIR}/lib/Support/SmallPtrSet.cpp
456 ${LLVM_DIR}/lib/Support/SmallVector.cpp
457 ${LLVM_DIR}/lib/Support/SourceMgr.cpp
458 ${LLVM_DIR}/lib/Support/Statistic.cpp
459 ${LLVM_DIR}/lib/Support/StringExtras.cpp
460 ${LLVM_DIR}/lib/Support/StringMap.cpp
461 ${LLVM_DIR}/lib/Support/StringPool.cpp
462 ${LLVM_DIR}/lib/Support/StringRef.cpp
463 ${LLVM_DIR}/lib/Support/SystemUtils.cpp
464 ${LLVM_DIR}/lib/Support/TargetRegistry.cpp
465 ${LLVM_DIR}/lib/Support/ThreadLocal.cpp
466 ${LLVM_DIR}/lib/Support/Threading.cpp
467 ${LLVM_DIR}/lib/Support/TimeValue.cpp
468 ${LLVM_DIR}/lib/Support/Timer.cpp
469 ${LLVM_DIR}/lib/Support/ToolOutputFile.cpp
470 ${LLVM_DIR}/lib/Support/Triple.cpp
471 ${LLVM_DIR}/lib/Support/Twine.cpp
472 ${LLVM_DIR}/lib/Support/Valgrind.cpp
473 ${LLVM_DIR}/lib/Support/circular_raw_ostream.cpp
474 ${LLVM_DIR}/lib/Support/raw_os_ostream.cpp
475 ${LLVM_DIR}/lib/Support/raw_ostream.cpp
476 ${LLVM_DIR}/lib/Support/system_error.cpp
477 ${LLVM_DIR}/lib/Target/Mangler.cpp
478 ${LLVM_DIR}/lib/Target/TargetData.cpp
479 ${LLVM_DIR}/lib/Target/TargetELFWriterInfo.cpp
480 ${LLVM_DIR}/lib/Target/TargetFrameLowering.cpp
481 ${LLVM_DIR}/lib/Target/TargetInstrInfo.cpp
482 ${LLVM_DIR}/lib/Target/TargetLibraryInfo.cpp
483 ${LLVM_DIR}/lib/Target/TargetLoweringObjectFile.cpp
484 ${LLVM_DIR}/lib/Target/TargetMachine.cpp
485 ${LLVM_DIR}/lib/Target/TargetRegisterInfo.cpp
486 ${LLVM_DIR}/lib/Target/TargetSubtargetInfo.cpp
487 ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86ATTInstPrinter.cpp
488 ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86InstComments.cpp
489 ${LLVM_DIR}/lib/Target/X86/InstPrinter/X86IntelInstPrinter.cpp
490 ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
491 ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCAsmInfo.cpp
492 ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
493 ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp
494 ${LLVM_DIR}/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp
495 ${LLVM_DIR}/lib/Target/X86/TargetInfo/X86TargetInfo.cpp
496 ${LLVM_DIR}/lib/Target/X86/Utils/X86ShuffleDecode.cpp
497 ${LLVM_DIR}/lib/Target/X86/X86CodeEmitter.cpp
498 ${LLVM_DIR}/lib/Target/X86/X86ELFWriterInfo.cpp
499 ${LLVM_DIR}/lib/Target/X86/X86FastISel.cpp
500 ${LLVM_DIR}/lib/Target/X86/X86FloatingPoint.cpp
501 ${LLVM_DIR}/lib/Target/X86/X86FrameLowering.cpp
502 ${LLVM_DIR}/lib/Target/X86/X86ISelDAGToDAG.cpp
503 ${LLVM_DIR}/lib/Target/X86/X86ISelLowering.cpp
504 ${LLVM_DIR}/lib/Target/X86/X86InstrInfo.cpp
505 ${LLVM_DIR}/lib/Target/X86/X86JITInfo.cpp
506 ${LLVM_DIR}/lib/Target/X86/X86RegisterInfo.cpp
507 ${LLVM_DIR}/lib/Target/X86/X86SelectionDAGInfo.cpp
508 ${LLVM_DIR}/lib/Target/X86/X86Subtarget.cpp
509 ${LLVM_DIR}/lib/Target/X86/X86TargetMachine.cpp
510 ${LLVM_DIR}/lib/Target/X86/X86TargetObjectFile.cpp
511 ${LLVM_DIR}/lib/Target/X86/X86VZeroUpper.cpp
512 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineAddSub.cpp
513 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
514 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineCalls.cpp
515 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineCasts.cpp
516 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineCompares.cpp
517 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
518 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
519 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombinePHI.cpp
520 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineSelect.cpp
521 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineShifts.cpp
522 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
523 ${LLVM_DIR}/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
524 ${LLVM_DIR}/lib/Transforms/InstCombine/InstructionCombining.cpp
525 ${LLVM_DIR}/lib/Transforms/Scalar/ADCE.cpp
526 ${LLVM_DIR}/lib/Transforms/Scalar/CodeGenPrepare.cpp
527 ${LLVM_DIR}/lib/Transforms/Scalar/DeadStoreElimination.cpp
528 ${LLVM_DIR}/lib/Transforms/Scalar/GVN.cpp
529 ${LLVM_DIR}/lib/Transforms/Scalar/LICM.cpp
530 ${LLVM_DIR}/lib/Transforms/Scalar/LoopStrengthReduce.cpp
531 ${LLVM_DIR}/lib/Transforms/Scalar/Reassociate.cpp
532 ${LLVM_DIR}/lib/Transforms/Scalar/Reg2Mem.cpp
533 ${LLVM_DIR}/lib/Transforms/Scalar/SCCP.cpp
534 ${LLVM_DIR}/lib/Transforms/Scalar/ScalarReplAggregates.cpp
535 ${LLVM_DIR}/lib/Transforms/Scalar/SimplifyCFGPass.cpp
536 ${LLVM_DIR}/lib/Transforms/Utils/AddrModeMatcher.cpp
537 ${LLVM_DIR}/lib/Transforms/Utils/BasicBlockUtils.cpp
538 ${LLVM_DIR}/lib/Transforms/Utils/BreakCriticalEdges.cpp
539 ${LLVM_DIR}/lib/Transforms/Utils/BuildLibCalls.cpp
540 ${LLVM_DIR}/lib/Transforms/Utils/DemoteRegToStack.cpp
541 ${LLVM_DIR}/lib/Transforms/Utils/InstructionNamer.cpp
542 ${LLVM_DIR}/lib/Transforms/Utils/LCSSA.cpp
543 ${LLVM_DIR}/lib/Transforms/Utils/Local.cpp
544 ${LLVM_DIR}/lib/Transforms/Utils/LoopSimplify.cpp
545 ${LLVM_DIR}/lib/Transforms/Utils/LowerInvoke.cpp
546 ${LLVM_DIR}/lib/Transforms/Utils/LowerSwitch.cpp
547 ${LLVM_DIR}/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
548 ${LLVM_DIR}/lib/Transforms/Utils/SSAUpdater.cpp
549 ${LLVM_DIR}/lib/Transforms/Utils/SimplifyCFG.cpp
550 ${LLVM_DIR}/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
551 ${LLVM_DIR}/lib/VMCore/AsmWriter.cpp
552 ${LLVM_DIR}/lib/VMCore/Attributes.cpp
553 ${LLVM_DIR}/lib/VMCore/BasicBlock.cpp
554 ${LLVM_DIR}/lib/VMCore/ConstantFold.cpp
555 ${LLVM_DIR}/lib/VMCore/Constants.cpp
556 ${LLVM_DIR}/lib/VMCore/DebugInfoProbe.cpp
557 ${LLVM_DIR}/lib/VMCore/DebugLoc.cpp
558 ${LLVM_DIR}/lib/VMCore/Dominators.cpp
559 ${LLVM_DIR}/lib/VMCore/Function.cpp
560 ${LLVM_DIR}/lib/VMCore/Globals.cpp
561 ${LLVM_DIR}/lib/VMCore/IRBuilder.cpp
562 ${LLVM_DIR}/lib/VMCore/InlineAsm.cpp
563 ${LLVM_DIR}/lib/VMCore/Instruction.cpp
564 ${LLVM_DIR}/lib/VMCore/Instructions.cpp
565 ${LLVM_DIR}/lib/VMCore/IntrinsicInst.cpp
566 ${LLVM_DIR}/lib/VMCore/LLVMContext.cpp
567 ${LLVM_DIR}/lib/VMCore/LLVMContextImpl.cpp
568 ${LLVM_DIR}/lib/VMCore/LeakDetector.cpp
569 ${LLVM_DIR}/lib/VMCore/Metadata.cpp
570 ${LLVM_DIR}/lib/VMCore/Module.cpp
571 ${LLVM_DIR}/lib/VMCore/Pass.cpp
572 ${LLVM_DIR}/lib/VMCore/PassManager.cpp
573 ${LLVM_DIR}/lib/VMCore/PassRegistry.cpp
574 ${LLVM_DIR}/lib/VMCore/PrintModulePass.cpp
575 ${LLVM_DIR}/lib/VMCore/Type.cpp
576 ${LLVM_DIR}/lib/VMCore/Use.cpp
577 ${LLVM_DIR}/lib/VMCore/User.cpp
578 ${LLVM_DIR}/lib/VMCore/Value.cpp
579 ${LLVM_DIR}/lib/VMCore/ValueSymbolTable.cpp
580 ${LLVM_DIR}/lib/VMCore/ValueTypes.cpp
581 ${LLVM_DIR}/lib/VMCore/Verifier.cpp
585 set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include)
587 set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include-linux)
589 set(LLVM_INCLUDE_DIR ${LLVM_DIR}/include-osx)
592 list(APPEND LLVM_INCLUDE_DIR
594 ${LLVM_DIR}/lib/Target/X86
596 add_library(llvm STATIC ${LLVM_LIST})
597 set_target_properties(llvm PROPERTIES
598 POSITION_INDEPENDENT_CODE 1
599 INCLUDE_DIRECTORIES "${LLVM_INCLUDE_DIR}"
600 COMPILE_DEFINITIONS "__STDC_CONSTANT_MACROS; __STDC_LIMIT_MACROS;"
604 ###########################################################
606 ###########################################################
608 if(${REACTOR_BACKEND} STREQUAL "Subzero")
610 ${SUBZERO_DIR}/src/IceAssembler.cpp
611 ${SUBZERO_DIR}/src/IceCfg.cpp
612 ${SUBZERO_DIR}/src/IceCfgNode.cpp
613 ${SUBZERO_DIR}/src/IceClFlags.cpp
614 ${SUBZERO_DIR}/src/IceELFObjectWriter.cpp
615 ${SUBZERO_DIR}/src/IceELFSection.cpp
616 ${SUBZERO_DIR}/src/IceFixups.cpp
617 ${SUBZERO_DIR}/src/IceGlobalContext.cpp
618 ${SUBZERO_DIR}/src/IceGlobalInits.cpp
619 ${SUBZERO_DIR}/src/IceInst.cpp
620 ${SUBZERO_DIR}/src/IceInstrumentation.cpp
621 ${SUBZERO_DIR}/src/IceIntrinsics.cpp
622 ${SUBZERO_DIR}/src/IceLiveness.cpp
623 ${SUBZERO_DIR}/src/IceLoopAnalyzer.cpp
624 ${SUBZERO_DIR}/src/IceMangling.cpp
625 ${SUBZERO_DIR}/src/IceMemory.cpp
626 ${SUBZERO_DIR}/src/IceOperand.cpp
627 ${SUBZERO_DIR}/src/IceRangeSpec.cpp
628 ${SUBZERO_DIR}/src/IceRegAlloc.cpp
629 ${SUBZERO_DIR}/src/IceRevision.cpp
630 ${SUBZERO_DIR}/src/IceRNG.cpp
631 ${SUBZERO_DIR}/src/IceSwitchLowering.cpp
632 ${SUBZERO_DIR}/src/IceTargetLowering.cpp
633 ${SUBZERO_DIR}/src/IceThreading.cpp
634 ${SUBZERO_DIR}/src/IceTimerTree.cpp
635 ${SUBZERO_DIR}/src/IceTypes.cpp
636 ${SUBZERO_DIR}/src/IceVariableSplitting.cpp
639 if(ARCH STREQUAL "x86_64")
640 list(APPEND SUBZERO_LIST
641 ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp
642 ${SUBZERO_DIR}/src/IceInstX8664.cpp
643 ${SUBZERO_DIR}/src/IceTargetLoweringX8664.cpp
645 set(SUBZERO_TARGET X8664)
646 elseif(ARCH STREQUAL "x86")
647 list(APPEND SUBZERO_LIST
648 ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp
649 ${SUBZERO_DIR}/src/IceInstX8632.cpp
650 ${SUBZERO_DIR}/src/IceTargetLoweringX8632.cpp
652 set(SUBZERO_TARGET X8632)
653 elseif(ARCH STREQUAL "arm")
654 list(APPEND SUBZERO_LIST
655 ${SUBZERO_DIR}/src/IceAssemblerARM32.cpp
656 ${SUBZERO_DIR}/src/IceInstARM32.cpp
657 ${SUBZERO_DIR}/src/IceTargetLoweringARM32.cpp
659 set(SUBZERO_TARGET ARM32)
661 message(FATAL_ERROR "Architecture '${ARCH}' not supported by Subzero")
664 file(GLOB_RECURSE SUBZERO_DEPENDENCIES_LIST
665 ${SUBZERO_LLVM_DIR}/*.cpp
666 ${SUBZERO_LLVM_DIR}/*.c
667 ${SUBZERO_LLVM_DIR}/*.h
670 set(SUBZERO_REACTOR_LIST
671 ${SOURCE_DIR}/Reactor/SubzeroReactor.cpp
672 ${SOURCE_DIR}/Reactor/Routine.cpp
673 ${SOURCE_DIR}/Reactor/Optimizer.cpp
674 ${SOURCE_DIR}/Reactor/Nucleus.hpp
675 ${SOURCE_DIR}/Reactor/Routine.hpp
678 set(SUBZERO_INCLUDE_DIR
680 ${SUBZERO_LLVM_DIR}/include/
681 ${SUBZERO_DIR}/pnacl-llvm/include/
685 list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Windows/include/)
687 list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Linux/include/)
689 list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/MacOS/include/)
692 add_library(ReactorSubzero STATIC
694 ${SUBZERO_DEPENDENCIES_LIST}
695 ${SUBZERO_REACTOR_LIST}
698 set_target_properties(ReactorSubzero PROPERTIES
699 POSITION_INDEPENDENT_CODE 1
700 INCLUDE_DIRECTORIES "${SUBZERO_INCLUDE_DIR}"
701 COMPILE_DEFINITIONS "SZTARGET=${SUBZERO_TARGET}; ALLOW_DUMP=0; ALLOW_TIMERS=0; ALLOW_LLVM_CL=0; ALLOW_LLVM_IR=0; ALLOW_LLVM_IR_AS_INPUT=0; ALLOW_MINIMAL_BUILD=0; ALLOW_WASM=0; ICE_THREAD_LOCAL_HACK=0;"
706 target_compile_definitions(ReactorSubzero PRIVATE SUBZERO_USE_MICROSOFT_ABI)
710 ###########################################################
711 # Include Directories
712 ###########################################################
714 set(COMMON_INCLUDE_DIR
716 ${CMAKE_SOURCE_DIR}/include
719 set(OPENGL_INCLUDE_DIR
721 ${COMMON_INCLUDE_DIR}
724 ###########################################################
726 ###########################################################
728 file(GLOB_RECURSE SWIFTSHADER_LIST
729 ${SOURCE_DIR}/Common/*.cpp
730 ${SOURCE_DIR}/Common/*.h
731 ${SOURCE_DIR}/Common/*.hpp
732 ${SOURCE_DIR}/Renderer/*.cpp
733 ${SOURCE_DIR}/Renderer/*.h
734 ${SOURCE_DIR}/Renderer/*.hpp
735 ${SOURCE_DIR}/Shader/*.cpp
736 ${SOURCE_DIR}/Shader/*.h
737 ${SOURCE_DIR}/Shader/*.hpp
739 list(APPEND SWIFTSHADER_LIST
740 ${SOURCE_DIR}/Main/Config.cpp
741 ${SOURCE_DIR}/Main/Config.hpp
742 ${SOURCE_DIR}/Main/FrameBuffer.cpp
743 ${SOURCE_DIR}/Main/FrameBuffer.hpp
744 ${SOURCE_DIR}/Main/SwiftConfig.cpp
745 ${SOURCE_DIR}/Main/SwiftConfig.hpp
747 list(REMOVE_ITEM SWIFTSHADER_LIST
748 ${SOURCE_DIR}/Common/DebugAndroid.cpp
749 ${SOURCE_DIR}/Common/DebugAndroid.hpp
750 ${SOURCE_DIR}/Common/GrallocAndroid.cpp
751 ${SOURCE_DIR}/Common/GrallocAndroid.hpp
754 set(REACTOR_LLVM_LIST
755 ${SOURCE_DIR}/Reactor/LLVMReactor.cpp
756 ${SOURCE_DIR}/Reactor/Nucleus.hpp
757 ${SOURCE_DIR}/Reactor/Routine.cpp
758 ${SOURCE_DIR}/Reactor/Routine.hpp
759 ${SOURCE_DIR}/Reactor/LLVMRoutine.cpp
760 ${SOURCE_DIR}/Reactor/LLVMRoutine.hpp
761 ${SOURCE_DIR}/Reactor/LLVMRoutineManager.cpp
762 ${SOURCE_DIR}/Reactor/LLVMRoutineManager.hpp
765 file(GLOB_RECURSE EGL_LIST
766 ${OPENGL_DIR}/libEGL/*.cpp
767 ${OPENGL_DIR}/libEGL/*.h
768 ${OPENGL_DIR}/libEGL/*.hpp
769 ${OPENGL_DIR}/common/Object.cpp
770 ${OPENGL_DIR}/common/Object.hpp
771 ${OPENGL_DIR}/common/debug.cpp
772 ${OPENGL_DIR}/common/debug.h
773 ${CMAKE_SOURCE_DIR}/include/*.h
776 file(GLOB_RECURSE GL32_LIST
777 ${OPENGL_DIR}/libGL/*.cpp
778 ${OPENGL_DIR}/libGL/*.h
779 ${OPENGL_DIR}/libGL/*.hpp
780 ${OPENGL_DIR}/common/*.cpp
781 ${OPENGL_DIR}/common/*.h
782 ${OPENGL_DIR}/common/*.hpp
783 ${CMAKE_SOURCE_DIR}/include/GL/*.h
786 file(GLOB_RECURSE GLES2_LIST
787 ${OPENGL_DIR}/libGLESv2/*.cpp
788 ${OPENGL_DIR}/libGLESv2/*.h
789 ${OPENGL_DIR}/libGLESv2/*.hpp
790 ${OPENGL_DIR}/common/*.cpp
791 ${OPENGL_DIR}/common/*.h
792 ${OPENGL_DIR}/common/*.hpp
793 ${CMAKE_SOURCE_DIR}/include/KHR/*.h
794 ${CMAKE_SOURCE_DIR}/include/GLES2/*.h
795 ${CMAKE_SOURCE_DIR}/include/GLES3/*.h
798 file(GLOB_RECURSE GLES_CM_LIST
799 ${OPENGL_DIR}/libGLES_CM/*.cpp
800 ${OPENGL_DIR}/libGLES_CM/*.h
801 ${OPENGL_DIR}/libGLES_CM/*.hpp
802 ${OPENGL_DIR}/common/*.cpp
803 ${OPENGL_DIR}/common/*.h
804 ${OPENGL_DIR}/common/*.hpp
805 ${CMAKE_SOURCE_DIR}/include/KHR/*.h
806 ${CMAKE_SOURCE_DIR}/include/GLES/*.h
809 file(GLOB_RECURSE OPENGL_COMPILER_LIST
810 ${OPENGL_COMPILER_DIR}/*.cpp
811 ${OPENGL_COMPILER_DIR}/*.h
812 ${OPENGL_COMPILER_DIR}/*.hpp
814 file(GLOB_RECURSE OPENGL_COMPILER_OS_SPECIFIC_LIST
815 ${OPENGL_COMPILER_DIR}/ossource*.cpp
816 ${OPENGL_COMPILER_DIR}/ossource*.h
817 ${OPENGL_COMPILER_DIR}/ossource*.hpp
819 list(REMOVE_ITEM OPENGL_COMPILER_LIST ${OPENGL_COMPILER_OS_SPECIFIC_LIST})
821 ###########################################################
822 # Append OS specific files to lists
823 ###########################################################
826 list(APPEND SWIFTSHADER_LIST
827 ${SOURCE_DIR}/Main/FrameBufferDD.cpp
828 ${SOURCE_DIR}/Main/FrameBufferDD.hpp
829 ${SOURCE_DIR}/Main/FrameBufferGDI.cpp
830 ${SOURCE_DIR}/Main/FrameBufferGDI.hpp
831 ${SOURCE_DIR}/Main/FrameBufferWin.cpp
832 ${SOURCE_DIR}/Main/FrameBufferWin.hpp
834 list(APPEND OPENGL_COMPILER_LIST ${OPENGL_COMPILER_DIR}/ossource_win.cpp)
835 list(APPEND EGL_LIST ${OPENGL_DIR}/libEGL/libEGL.rc)
836 list(APPEND GL32_LIST ${OPENGL_DIR}/libGL/libGL.rc)
837 list(APPEND GLES2_LIST ${OPENGL_DIR}/libGLESv2/libGLESv2.rc)
838 list(APPEND GLES_CM_LIST ${OPENGL_DIR}/libGLES_CM/libGLES_CM.rc)
840 list(APPEND SWIFTSHADER_LIST
841 ${SOURCE_DIR}/Main/FrameBufferX11.cpp
842 ${SOURCE_DIR}/Main/FrameBufferX11.hpp
843 ${SOURCE_DIR}/Common/SharedLibrary.hpp
844 ${SOURCE_DIR}/Main/libX11.cpp
845 ${SOURCE_DIR}/Main/libX11.hpp
848 ${SOURCE_DIR}/Common/SharedLibrary.hpp
849 ${SOURCE_DIR}/Main/libX11.cpp
850 ${SOURCE_DIR}/Main/libX11.hpp
852 list(APPEND OPENGL_COMPILER_LIST
853 ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
856 list(APPEND SWIFTSHADER_LIST
857 ${SOURCE_DIR}/Main/FrameBufferOSX.mm
858 ${SOURCE_DIR}/Main/FrameBufferOSX.hpp
861 ${OPENGL_DIR}/libEGL/OSXUtils.mm
862 ${OPENGL_DIR}/libEGL/OSXUtils.hpp
864 list(APPEND OPENGL_COMPILER_LIST
865 ${OPENGL_COMPILER_DIR}/ossource_posix.cpp
870 set(OS_LIBS odbc32 odbccp32 WS2_32 dxguid)
872 set(OS_LIBS dl pthread)
874 find_library(COCOA_FRAMEWORK Cocoa)
875 find_library(QUARTZ_FRAMEWORK Quartz)
876 find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
877 find_library(IOSURFACE_FRAMEWORK IOSurface)
878 set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}")
881 ###########################################################
882 # SwiftShader Targets
883 ###########################################################
885 add_library(SwiftShader STATIC ${SWIFTSHADER_LIST})
886 set_target_properties(SwiftShader PROPERTIES
887 INCLUDE_DIRECTORIES "${COMMON_INCLUDE_DIR}"
888 POSITION_INDEPENDENT_CODE 1
890 COMPILE_DEFINITIONS "NO_SANITIZE_FUNCTION=;"
892 target_link_libraries(SwiftShader ${OS_LIBS})
894 add_library(ReactorLLVM STATIC ${REACTOR_LLVM_LIST})
895 set_target_properties(ReactorLLVM PROPERTIES
896 INCLUDE_DIRECTORIES "${COMMON_INCLUDE_DIR}"
897 POSITION_INDEPENDENT_CODE 1
900 target_link_libraries(ReactorLLVM llvm ${OS_LIBS})
902 if(${REACTOR_BACKEND} STREQUAL "LLVM")
903 set(Reactor ReactorLLVM)
904 elseif(${REACTOR_BACKEND} STREQUAL "Subzero")
905 set(Reactor ReactorSubzero)
907 message(FATAL_ERROR "REACTOR_BACKEND must be 'LLVM' or 'Subzero'")
910 add_library(GLCompiler STATIC ${OPENGL_COMPILER_LIST})
911 set_target_properties(GLCompiler PROPERTIES
912 INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
913 POSITION_INDEPENDENT_CODE 1
916 target_link_libraries(GLCompiler ${OS_LIBS})
918 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
919 set(LIB_PREFIX "lib64")
921 set(LIB_PREFIX "lib")
925 add_library(libEGL SHARED ${EGL_LIST})
926 set_target_properties(libEGL PROPERTIES
927 INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
929 COMPILE_DEFINITIONS "EGL_EGLEXT_PROTOTYPES; EGLAPI=; NO_SANITIZE_FUNCTION=;"
932 set_target_export_map(libEGL ${SOURCE_DIR}/OpenGL/libEGL)
933 target_link_libraries(libEGL ${OS_LIBS})
937 COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libEGL>/translator
938 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> $<TARGET_FILE_DIR:libEGL>/translator/${LIB_PREFIX}EGL_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
939 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
940 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
945 add_library(libGL SHARED ${GL32_LIST})
946 set_target_properties(libGL PROPERTIES
947 INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
949 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES"
952 set_target_export_map(libGL ${SOURCE_DIR}/OpenGL/libGL)
953 target_link_libraries(libGL SwiftShader ${Reactor} GLCompiler ${OS_LIBS})
957 add_library(libGLESv2 SHARED ${GLES2_LIST})
958 set_target_properties(libGLESv2 PROPERTIES
959 INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
961 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; GL_API=; GL_APICALL=; GLAPI=; NO_SANITIZE_FUNCTION=;"
964 set_target_export_map(libGLESv2 ${SOURCE_DIR}/OpenGL/libGLESv2)
965 target_link_libraries(libGLESv2 SwiftShader ${Reactor} GLCompiler ${OS_LIBS})
969 COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLESv2>/translator
970 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> $<TARGET_FILE_DIR:libGLESv2>/translator/${LIB_PREFIX}GLES_V2_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
971 COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
972 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
977 add_library(libGLES_CM SHARED ${GLES_CM_LIST})
978 set_target_properties(libGLES_CM PROPERTIES
979 INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
981 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; EGLAPI=; GL_API=; GL_APICALL=; GLAPI=;"
984 set_target_export_map(libGLES_CM ${SOURCE_DIR}/OpenGL/libGLES_CM)
985 target_link_libraries(libGLES_CM SwiftShader ${Reactor} GLCompiler ${OS_LIBS})
989 COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLES_CM>/translator
990 COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLES_CM> $<TARGET_FILE_DIR:libGLES_CM>/translator/${LIB_PREFIX}GLES_CM_translator${CMAKE_SHARED_LIBRARY_SUFFIX}
994 ###########################################################
996 ###########################################################
1000 add_executable(OGLES2HelloAPI ${HELLO2_DIR}/OGLES2HelloAPI_Windows.cpp)
1001 set_target_properties(OGLES2HelloAPI PROPERTIES
1002 INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include"
1003 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES"
1006 target_link_libraries(OGLES2HelloAPI libEGL libGLESv2)
1007 set_property(TARGET OGLES2HelloAPI APPEND_STRING PROPERTY LINK_FLAGS "/SUBSYSTEM:WINDOWS")
1008 set(CMAKE_DEFAULT_STARTUP_PROJECT OGLES2HelloAPI)
1010 add_executable(OGLES2HelloAPI ${HELLO2_DIR}/OGLES2HelloAPI_LinuxX11.cpp)
1011 set_target_properties(OGLES2HelloAPI PROPERTIES
1012 INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include"
1013 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES"
1015 target_link_libraries(OGLES2HelloAPI dl X11 libEGL libGLESv2) # Explicitly link our "lib*" targets, not the platform provided "EGL" and "GLESv2"
1017 add_executable(OGLES2HelloAPI MACOSX_BUNDLE
1018 ${HELLO2_DIR}/OGLES2HelloAPI_OSX.mm
1019 ${HELLO2_DIR}/Build/OSX/en.lproj/MainMenu.xib
1021 set_target_properties(OGLES2HelloAPI PROPERTIES
1022 INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/include"
1023 COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES"
1024 MACOSX_BUNDLE_INFO_PLIST "${HELLO2_DIR}/Build/OSX/Info.plist"
1026 target_link_libraries(OGLES2HelloAPI libEGL libGLESv2 ${OS_LIBS})
1027 set_source_files_properties(${HELLO2_DIR}/Build/OSX/en.lproj/MainMenu.xib PROPERTIES
1028 MACOSX_PACKAGE_LOCATION "Resources"
1033 if(BUILD_TESTS AND ${REACTOR_BACKEND} STREQUAL "Subzero")
1034 set(SUBZERO_TEST_LIST
1035 ${SOURCE_DIR}/Reactor/Main.cpp
1036 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc
1039 set(SUBZERO_TEST_INCLUDE_DIR
1040 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/include
1041 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/
1044 add_executable(SubzeroTest ${SUBZERO_TEST_LIST})
1045 set_target_properties(SubzeroTest PROPERTIES
1046 INCLUDE_DIRECTORIES "${SUBZERO_TEST_INCLUDE_DIR}"
1050 target_link_libraries(SubzeroTest ReactorSubzero)
1052 target_link_libraries(SubzeroTest ReactorSubzero pthread dl)
1058 ${CMAKE_SOURCE_DIR}/tests/unittests/main.cpp
1059 ${CMAKE_SOURCE_DIR}/tests/unittests/unittests.cpp
1060 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/src/gtest-all.cc
1063 set(UNITTESTS_INCLUDE_DIR
1064 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/include/
1065 ${CMAKE_SOURCE_DIR}/third_party/googletest/googlemock/include/
1066 ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/
1067 ${CMAKE_SOURCE_DIR}/include/
1070 add_executable(unittests ${UNITTESTS_LIST})
1071 set_target_properties(unittests PROPERTIES
1072 INCLUDE_DIRECTORIES "${UNITTESTS_INCLUDE_DIR}"
1074 COMPILE_DEFINITIONS "STANDALONE"
1077 target_link_libraries(unittests libEGL libGLESv2 ${OS_LIBS})