project(SwiftShader C CXX)
+###########################################################
+# Detect system
+###########################################################
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ set(LINUX ON)
+elseif(WIN32)
+elseif(APPLE)
+else()
+ message(FATAL_ERROR "Platform is not supported")
+endif()
+
+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()
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(ARCH "x86_64")
+ else()
+ set(ARCH "x86")
+ endif()
+endif()
+
+set(CMAKE_MACOSX_RPATH ON)
+
+###########################################################
+# Options
+###########################################################
+
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "The type of build: Debug Release MinSizeRel RelWithDebInfo." FORCE)
endif()
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")
+if(ARCH STREQUAL "arm")
+ set(DEFAULT_REACTOR_BACKEND "Subzero")
+else()
+ set(DEFAULT_REACTOR_BACKEND "LLVM")
+endif()
+
+set(REACTOR_BACKEND DEFAULT_REACTOR_BACKEND CACHE STRING "JIT compiler back-end used by Reactor")
set_property(CACHE REACTOR_BACKEND PROPERTY STRINGS LLVM Subzero)
# LLVM disallows calling cmake . from the main LLVM dir, the reason is that
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
###########################################################
-# Detect system
-###########################################################
-
-if(CMAKE_SYSTEM_NAME MATCHES "Linux")
- set(LINUX ON)
-elseif(WIN32)
-elseif(APPLE)
-else()
- message(FATAL_ERROR "Platform is not supported")
-endif()
-
-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()
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- set(ARCH "x86_64")
- else()
- set(ARCH "x86")
- endif()
-endif()
-
-###########################################################
# Convenience macros
###########################################################
# hides all the others. Gc sections is used in combination
# with each functions being in its section, to reduce the
# binary size.
- set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${LINKFLAGS} -Wl,--hash-style=both,--version-script=${DIR}/exports.map,--gc-sections,--no-undefined")
+ set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${LINKFLAGS} -Wl,--hash-style=both,--version-script=${DIR}/${TARGET}.lds,--gc-sections,--no-undefined")
+ set_target_properties(${TARGET} PROPERTIES LINK_DEPENDS "${DIR}/${TARGET}.lds")
endif()
endmacro()
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")
-
- # Don't allow symbols to be overridden by another module.
- # This enables libGLES_CM and libGLESv2 to statically link LLVM.
- set_cpp_flag("-fvisibility=protected")
+ set_cpp_flag("-Werror=reorder")
+ set_cpp_flag("-Werror=sign-compare")
+ set_cpp_flag("-fno-exceptions")
# Remove xor, and, or and friends from the list of keywords, they are used
# by Reactor
if(ARCH EQUAL "x86")
set_cpp_flag("-m32")
set_cpp_flag("-msse2")
- set_cpp_flag("-march=i686")
+ set_cpp_flag("-mfpmath=sse")
+ set_cpp_flag("-march=pentium4")
+ set_cpp_flag("-mtune=generic")
endif()
if(ARCH EQUAL "x86_64")
set_cpp_flag("-m64")
set_cpp_flag("-fPIC")
- set_cpp_flag("-march=core2")
+ set_cpp_flag("-march=x86-64")
+ set_cpp_flag("-mtune=generic")
endif()
# Use -g3 to have even more debug info
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_DIR}/
${SUBZERO_LLVM_DIR}/include/
${SUBZERO_DIR}/pnacl-llvm/include/
- ${SOURCE_DIR}/Reactor/SubmoduleCheck/
)
if(WIN32)
set(COMMON_INCLUDE_DIR
${SOURCE_DIR}
- ${SOURCE_DIR}/Common
- ${SOURCE_DIR}/Main
- ${SOURCE_DIR}/Reactor
- ${SOURCE_DIR}/Renderer
- ${SOURCE_DIR}/Shader
${CMAKE_SOURCE_DIR}/include
${LLVM_INCLUDE_DIR}
)
${OPENGL_DIR}/common/debug.h
${CMAKE_SOURCE_DIR}/include/*.h
)
-# Key method definitions are only required to appease the gold linker,
-# and cause vtable linking issues with other linkers.
-list(REMOVE_ITEM EGL_LIST ${OPENGL_DIR}/libEGL/TypeInfo.cpp)
file(GLOB_RECURSE GL32_LIST
${OPENGL_DIR}/libGL/*.cpp
${CMAKE_SOURCE_DIR}/include/GLES2/*.h
${CMAKE_SOURCE_DIR}/include/GLES3/*.h
)
-# Key method definitions are only required to appease the gold linker,
-# and cause vtable linking issues with other linkers.
-list(REMOVE_ITEM GLES2_LIST ${OPENGL_DIR}/libGLESv2/TypeInfo.cpp)
file(GLOB_RECURSE GLES_CM_LIST
${OPENGL_DIR}/libGLES_CM/*.cpp
elseif(APPLE)
find_library(COCOA_FRAMEWORK Cocoa)
find_library(QUARTZ_FRAMEWORK Quartz)
- set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}")
+ find_library(CORE_FOUNDATION_FRAMEWORK CoreFoundation)
+ find_library(IOSURFACE_FRAMEWORK IOSurface)
+ set(OS_LIBS "${COCOA_FRAMEWORK}" "${QUARTZ_FRAMEWORK}" "${CORE_FOUNDATION_FRAMEWORK}" "${IOSURFACE_FRAMEWORK}")
endif()
###########################################################
INCLUDE_DIRECTORIES "${COMMON_INCLUDE_DIR}"
POSITION_INDEPENDENT_CODE 1
FOLDER "Core"
+ COMPILE_DEFINITIONS "NO_SANITIZE_FUNCTION=;"
)
target_link_libraries(SwiftShader ${OS_LIBS})
set_target_properties(libEGL PROPERTIES
INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
FOLDER "OpenGL"
- COMPILE_DEFINITIONS "EGL_EGLEXT_PROTOTYPES; EGLAPI=;"
+ COMPILE_DEFINITIONS "EGL_EGLEXT_PROTOTYPES; EGLAPI=; NO_SANITIZE_FUNCTION=;"
PREFIX ""
)
set_target_export_map(libEGL ${SOURCE_DIR}/OpenGL/libEGL)
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libEGL>/translator
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libEGL> $<TARGET_FILE_DIR:libEGL>/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 $<TARGET_FILE:libEGL> ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
)
endif()
set_target_properties(libGLESv2 PROPERTIES
INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
FOLDER "OpenGL"
- COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; GL_API=; GL_APICALL=;"
+ COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; GL_API=; GL_APICALL=; GLAPI=; NO_SANITIZE_FUNCTION=;"
PREFIX ""
)
set_target_export_map(libGLESv2 ${SOURCE_DIR}/OpenGL/libGLESv2)
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:libGLESv2>/translator
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:libGLESv2> $<TARGET_FILE_DIR:libGLESv2>/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 $<TARGET_FILE:libGLESv2> ${CMAKE_SOURCE_DIR}/out/${CMAKE_SYSTEM_NAME}/
)
endif()
set_target_properties(libGLES_CM PROPERTIES
INCLUDE_DIRECTORIES "${OPENGL_INCLUDE_DIR}"
FOLDER "OpenGL"
- COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; EGLAPI=; GL_API=; GL_APICALL=;"
+ COMPILE_DEFINITIONS "GL_GLEXT_PROTOTYPES; EGLAPI=; GL_API=; GL_APICALL=; GLAPI=;"
PREFIX ""
)
set_target_export_map(libGLES_CM ${SOURCE_DIR}/OpenGL/libGLES_CM)
target_link_libraries(SubzeroTest ReactorSubzero pthread dl)
endif()
endif()
+
+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
+ )
+
+ 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/
+ )
+
+ add_executable(unittests ${UNITTESTS_LIST})
+ set_target_properties(unittests PROPERTIES
+ INCLUDE_DIRECTORIES "${UNITTESTS_INCLUDE_DIR}"
+ FOLDER "Tests"
+ COMPILE_DEFINITIONS "STANDALONE"
+ )
+
+ target_link_libraries(unittests libEGL libGLESv2 ${OS_LIBS})
+endif()