option(USE_GROUP_SOURCES "Group the source files in a folder tree for Visual Studio" 1)
option(BUILD_SAMPLES "Build sample programs" 1)
+option(BUILD_TESTS "Build test programs" 1)
set(REACTOR_BACKEND "LLVM" CACHE STRING "JIT compiler back-end used by Reactor")
set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
message(FATAL_ERROR "Platform is not supported")
endif()
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(ARCH "x86_64")
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch")
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ARCH "aarch64")
+ else()
+ set(ARCH "arm")
+ endif()
else()
- set(ARCH "x86")
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ARCH "x86_64")
+ else()
+ set(ARCH "x86")
+ endif()
endif()
+set(CMAKE_MACOSX_RPATH ON)
+
###########################################################
# Convenience macros
###########################################################
set(OPENGL_DIR ${SOURCE_DIR}/OpenGL)
set(OPENGL_COMPILER_DIR ${OPENGL_DIR}/compiler)
set(LLVM_DIR ${CMAKE_SOURCE_DIR}/third_party/LLVM)
-set(SUBZERO_DIR ${CMAKE_SOURCE_DIR}/third_party/pnacl-subzero)
+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)
else()
set_cpp_flag("--std=c++11")
set_cpp_flag("-Wall")
- set_cpp_flag("-fexceptions")
+ set_cpp_flag("-fno-exceptions")
# Don't allow symbols to be overridden by another module.
# This enables libGLES_CM and libGLESv2 to statically link LLVM.
set_cpp_flag("-s" RELEASE)
# For distribution it is more important to be slim than super optimized
- # so even in Release we use only -O2
- set_cpp_flag("-O2 -Os" RELEASE)
- set_cpp_flag("-O2 -Os" RELWITHDEBINFO)
+ set_cpp_flag("-Os" RELEASE)
+ set_cpp_flag("-Os" RELWITHDEBINFO)
set_cpp_flag("-DNDEBUG" RELEASE)
set_cpp_flag("-DNDEBUG" RELWITHDEBINFO)
${LLVM_DIR}/lib/Support/raw_os_ostream.cpp
${LLVM_DIR}/lib/Support/raw_ostream.cpp
${LLVM_DIR}/lib/Support/system_error.cpp
- ${LLVM_DIR}/lib/TableGen/Error.cpp
- ${LLVM_DIR}/lib/TableGen/Main.cpp
- ${LLVM_DIR}/lib/TableGen/Record.cpp
- ${LLVM_DIR}/lib/TableGen/TGLexer.cpp
- ${LLVM_DIR}/lib/TableGen/TGParser.cpp
- ${LLVM_DIR}/lib/TableGen/TableGenBackend.cpp
${LLVM_DIR}/lib/Target/Mangler.cpp
${LLVM_DIR}/lib/Target/TargetData.cpp
${LLVM_DIR}/lib/Target/TargetELFWriterInfo.cpp
# Subzero
###########################################################
-set(SUBZERO_LIST
- ${SUBZERO_DIR}/src/IceAssembler.cpp
- ${SUBZERO_DIR}/src/IceCfg.cpp
- ${SUBZERO_DIR}/src/IceCfgNode.cpp
- ${SUBZERO_DIR}/src/IceClFlags.cpp
- ${SUBZERO_DIR}/src/IceELFObjectWriter.cpp
- ${SUBZERO_DIR}/src/IceELFSection.cpp
- ${SUBZERO_DIR}/src/IceFixups.cpp
- ${SUBZERO_DIR}/src/IceGlobalContext.cpp
- ${SUBZERO_DIR}/src/IceGlobalInits.cpp
- ${SUBZERO_DIR}/src/IceInst.cpp
- ${SUBZERO_DIR}/src/IceInstrumentation.cpp
- ${SUBZERO_DIR}/src/IceIntrinsics.cpp
- ${SUBZERO_DIR}/src/IceLiveness.cpp
- ${SUBZERO_DIR}/src/IceLoopAnalyzer.cpp
- ${SUBZERO_DIR}/src/IceMangling.cpp
- ${SUBZERO_DIR}/src/IceMemory.cpp
- ${SUBZERO_DIR}/src/IceOperand.cpp
- ${SUBZERO_DIR}/src/IceRangeSpec.cpp
- ${SUBZERO_DIR}/src/IceRegAlloc.cpp
- ${SUBZERO_DIR}/src/IceRevision.cpp
- ${SUBZERO_DIR}/src/IceRNG.cpp
- ${SUBZERO_DIR}/src/IceSwitchLowering.cpp
- ${SUBZERO_DIR}/src/IceTargetLowering.cpp
- ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp
- ${SUBZERO_DIR}/src/IceThreading.cpp
- ${SUBZERO_DIR}/src/IceTimerTree.cpp
- ${SUBZERO_DIR}/src/IceTypes.cpp
- ${SUBZERO_DIR}/src/IceVariableSplitting.cpp
-)
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- list(APPEND SUBZERO_LIST
- ${SUBZERO_DIR}/src/IceInstX8664.cpp
- ${SUBZERO_DIR}/src/IceTargetLoweringX8664.cpp
- )
- set(SUBZERO_TARGET X8664)
-else()
- list(APPEND SUBZERO_LIST
- ${SUBZERO_DIR}/src/IceInstX8632.cpp
- ${SUBZERO_DIR}/src/IceTargetLoweringX8632.cpp
+if(${REACTOR_BACKEND} STREQUAL "Subzero")
+ set(SUBZERO_LIST
+ ${SUBZERO_DIR}/src/IceAssembler.cpp
+ ${SUBZERO_DIR}/src/IceCfg.cpp
+ ${SUBZERO_DIR}/src/IceCfgNode.cpp
+ ${SUBZERO_DIR}/src/IceClFlags.cpp
+ ${SUBZERO_DIR}/src/IceELFObjectWriter.cpp
+ ${SUBZERO_DIR}/src/IceELFSection.cpp
+ ${SUBZERO_DIR}/src/IceFixups.cpp
+ ${SUBZERO_DIR}/src/IceGlobalContext.cpp
+ ${SUBZERO_DIR}/src/IceGlobalInits.cpp
+ ${SUBZERO_DIR}/src/IceInst.cpp
+ ${SUBZERO_DIR}/src/IceInstrumentation.cpp
+ ${SUBZERO_DIR}/src/IceIntrinsics.cpp
+ ${SUBZERO_DIR}/src/IceLiveness.cpp
+ ${SUBZERO_DIR}/src/IceLoopAnalyzer.cpp
+ ${SUBZERO_DIR}/src/IceMangling.cpp
+ ${SUBZERO_DIR}/src/IceMemory.cpp
+ ${SUBZERO_DIR}/src/IceOperand.cpp
+ ${SUBZERO_DIR}/src/IceRangeSpec.cpp
+ ${SUBZERO_DIR}/src/IceRegAlloc.cpp
+ ${SUBZERO_DIR}/src/IceRevision.cpp
+ ${SUBZERO_DIR}/src/IceRNG.cpp
+ ${SUBZERO_DIR}/src/IceSwitchLowering.cpp
+ ${SUBZERO_DIR}/src/IceTargetLowering.cpp
+ ${SUBZERO_DIR}/src/IceThreading.cpp
+ ${SUBZERO_DIR}/src/IceTimerTree.cpp
+ ${SUBZERO_DIR}/src/IceTypes.cpp
+ ${SUBZERO_DIR}/src/IceVariableSplitting.cpp
)
- set(SUBZERO_TARGET X8632)
-endif()
-file(GLOB_RECURSE SUBZERO_DEPENDENCIES_LIST
- ${SUBZERO_LLVM_DIR}/*.cpp
- ${SUBZERO_LLVM_DIR}/*.c
- ${SUBZERO_LLVM_DIR}/*.h
-)
+ if(ARCH STREQUAL "x86_64")
+ list(APPEND SUBZERO_LIST
+ ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp
+ ${SUBZERO_DIR}/src/IceInstX8664.cpp
+ ${SUBZERO_DIR}/src/IceTargetLoweringX8664.cpp
+ )
+ set(SUBZERO_TARGET X8664)
+ elseif(ARCH STREQUAL "x86")
+ list(APPEND SUBZERO_LIST
+ ${SUBZERO_DIR}/src/IceTargetLoweringX86.cpp
+ ${SUBZERO_DIR}/src/IceInstX8632.cpp
+ ${SUBZERO_DIR}/src/IceTargetLoweringX8632.cpp
+ )
+ set(SUBZERO_TARGET X8632)
+ elseif(ARCH STREQUAL "arm")
+ list(APPEND SUBZERO_LIST
+ ${SUBZERO_DIR}/src/IceAssemblerARM32.cpp
+ ${SUBZERO_DIR}/src/IceInstARM32.cpp
+ ${SUBZERO_DIR}/src/IceTargetLoweringARM32.cpp
+ )
+ set(SUBZERO_TARGET ARM32)
+ else()
+ message(FATAL_ERROR "Architecture '${ARCH}' not supported by Subzero")
+ endif()
-set(SUBZERO_REACTOR_LIST
- ${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
-)
+ file(GLOB_RECURSE SUBZERO_DEPENDENCIES_LIST
+ ${SUBZERO_LLVM_DIR}/*.cpp
+ ${SUBZERO_LLVM_DIR}/*.c
+ ${SUBZERO_LLVM_DIR}/*.h
+ )
-set(SUBZERO_INCLUDE_DIR
- ${SUBZERO_DIR}/
- ${SUBZERO_LLVM_DIR}/include/
- ${SUBZERO_DIR}/pnacl-llvm/include/
- ${SOURCE_DIR}/Reactor/SubmoduleCheck/
-)
+ set(SUBZERO_REACTOR_LIST
+ ${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
+ )
-if(WIN32)
- list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Windows/include/)
-elseif(LINUX)
- list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Linux/include/)
-elseif(APPLE)
- list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/MacOS/include/)
-endif()
+ set(SUBZERO_INCLUDE_DIR
+ ${SUBZERO_DIR}/
+ ${SUBZERO_LLVM_DIR}/include/
+ ${SUBZERO_DIR}/pnacl-llvm/include/
+ )
-add_library(ReactorSubzero STATIC
- ${SUBZERO_LIST}
- ${SUBZERO_DEPENDENCIES_LIST}
- ${SUBZERO_REACTOR_LIST}
-)
+ if(WIN32)
+ list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Windows/include/)
+ elseif(LINUX)
+ list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/Linux/include/)
+ elseif(APPLE)
+ list(APPEND SUBZERO_INCLUDE_DIR ${SUBZERO_LLVM_DIR}/build/MacOS/include/)
+ endif()
-set_target_properties(ReactorSubzero PROPERTIES
- POSITION_INDEPENDENT_CODE 1
- INCLUDE_DIRECTORIES "${SUBZERO_INCLUDE_DIR}"
- 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;"
- FOLDER "Subzero"
-)
+ add_library(ReactorSubzero STATIC
+ ${SUBZERO_LIST}
+ ${SUBZERO_DEPENDENCIES_LIST}
+ ${SUBZERO_REACTOR_LIST}
+ )
-if(WIN32)
- target_compile_definitions(ReactorSubzero PRIVATE SUBZERO_USE_MICROSOFT_ABI)
+ set_target_properties(ReactorSubzero PROPERTIES
+ POSITION_INDEPENDENT_CODE 1
+ INCLUDE_DIRECTORIES "${SUBZERO_INCLUDE_DIR}"
+ 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;"
+ FOLDER "Subzero"
+ )
+
+ if(WIN32)
+ target_compile_definitions(ReactorSubzero PRIVATE SUBZERO_USE_MICROSOFT_ABI)
+ endif()
endif()
###########################################################
)
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
+ )
+
+ set(SUBZERO_TEST_INCLUDE_DIR
+ ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/include
+ ${CMAKE_SOURCE_DIR}/third_party/googletest/googletest/
+ )
+
+ add_executable(SubzeroTest ${SUBZERO_TEST_LIST})
+ set_target_properties(SubzeroTest PROPERTIES
+ INCLUDE_DIRECTORIES "${SUBZERO_TEST_INCLUDE_DIR}"
+ FOLDER "Tests"
+ )
+ if(WIN32)
+ target_link_libraries(SubzeroTest ReactorSubzero)
+ else()
+ target_link_libraries(SubzeroTest ReactorSubzero pthread dl)
+ endif()
+endif()