1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00
GLideN64/src/CMakeLists.txt
2020-12-02 18:14:08 +07:00

534 lines
15 KiB
CMake

cmake_minimum_required(VERSION 3.9)
option(EGL "Set to ON if targeting an EGL device" ${EGL})
option(PANDORA "Set to ON if targeting an OpenPandora" ${PANDORA})
option(ODROID "Set to ON if targeting an Odroid" ${ODROID})
option(MUPENPLUSAPI "Set to ON for Mupen64Plus plugin" ${MUPENPLUSAPI})
option(MUPENPLUSAPI_GLIDENUI "Set to ON for GLideNUI for Mupen64Plus" ${MUPENPLUSAPI_GLIDENUI})
option(MESA "Set to ON to disable Raspberry Pi autodetection" ${MESA})
option(VERO4K "Set to ON if targeting a Vero4k" ${VERO4K})
option(ANDROID "Set to ON if targeting an Android device" ${ANDROID})
option(GL_PROFILE "Set to ON to turn on GL profiling" ${GL_PROFILE})
# run script to generate Revision.h
set(PATH_REVISION "Revision.h")
add_custom_command(
OUTPUT ${PATH_REVISION}
COMMAND ${CMAKE_SOURCE_DIR}/getRevision.sh
COMMENT "Generate Git version"
)
set_property(SOURCE ${PATH_REVISION} PROPERTY SKIP_AUTOGEN ON)
project( GLideN64 )
set(GLideN64_SOURCES
3DMath.cpp
Combiner.cpp
CombinerKey.cpp
CommonPluginAPI.cpp
Config.cpp
convert.cpp
CRC32.cpp
DebugDump.cpp
Debugger.cpp
DepthBuffer.cpp
DisplayWindow.cpp
DisplayLoadProgress.cpp
FrameBuffer.cpp
FrameBufferInfo.cpp
GBI.cpp
gDP.cpp
GLideN64.cpp
GraphicsDrawer.cpp
gSP.cpp
Log.cpp
N64.cpp
NoiseTexture.cpp
PaletteTexture.cpp
Performance.cpp
PostProcessor.cpp
RDP.cpp
RSP.cpp
RSP_LoadMatrix.cpp
SoftwareRender.cpp
TexrectDrawer.cpp
TextDrawer.cpp
TextureFilterHandler.cpp
Textures.cpp
VI.cpp
ZlutTexture.cpp
BufferCopy/BlueNoiseTexture.cpp
BufferCopy/ColorBufferToRDRAM.cpp
BufferCopy/DepthBufferToRDRAM.cpp
BufferCopy/RDRAMtoColorBuffer.cpp
DepthBufferRender/ClipPolygon.cpp
DepthBufferRender/DepthBufferRender.cpp
common/CommonAPIImpl_common.cpp
Graphics/Context.cpp
Graphics/ColorBufferReader.cpp
Graphics/CombinerProgram.cpp
Graphics/ObjectHandle.cpp
Graphics/OpenGLContext/GLFunctions.cpp
Graphics/OpenGLContext/ThreadedOpenGl/opengl_Command.cpp
Graphics/OpenGLContext/ThreadedOpenGl/opengl_ObjectPool.cpp
Graphics/OpenGLContext/ThreadedOpenGl/opengl_Wrapper.cpp
Graphics/OpenGLContext/ThreadedOpenGl/opengl_WrappedFunctions.cpp
Graphics/OpenGLContext/ThreadedOpenGl/RingBufferPool.cpp
Graphics/OpenGLContext/opengl_Attributes.cpp
Graphics/OpenGLContext/opengl_BufferedDrawer.cpp
Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.cpp
Graphics/OpenGLContext/opengl_CachedFunctions.cpp
Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.cpp
Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.cpp
Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.cpp
Graphics/OpenGLContext/opengl_ContextImpl.cpp
Graphics/OpenGLContext/opengl_GLInfo.cpp
Graphics/OpenGLContext/opengl_Parameters.cpp
Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.cpp
Graphics/OpenGLContext/opengl_UnbufferedDrawer.cpp
Graphics/OpenGLContext/opengl_Utils.cpp
Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.cpp
Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp
Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.cpp
Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp
Graphics/OpenGLContext/GLSL/glsl_FXAA.cpp
Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.cpp
Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.cpp
Graphics/OpenGLContext/GLSL/glsl_Utils.cpp
uCodes/F3D.cpp
uCodes/F3DBETA.cpp
uCodes/F3DDKR.cpp
uCodes/F3DEX.cpp
uCodes/F3DAM.cpp
uCodes/F3DEX2.cpp
uCodes/F3DEX2ACCLAIM.cpp
uCodes/F3DEX2CBFD.cpp
uCodes/F3DZEX2.cpp
uCodes/F3DFLX2.cpp
uCodes/F3DGOLDEN.cpp
uCodes/F3DTEXA.cpp
uCodes/F3DPD.cpp
uCodes/F3DSETA.cpp
uCodes/F5Indi_Naboo.cpp
uCodes/F5Rogue.cpp
uCodes/L3D.cpp
uCodes/L3DEX2.cpp
uCodes/L3DEX.cpp
uCodes/S2DEX2.cpp
uCodes/S2DEX.cpp
uCodes/T3DUX.cpp
uCodes/Turbo3D.cpp
uCodes/ZSort.cpp
uCodes/ZSortBOSS.cpp
)
set(GLideNUI_SOURCES
GLideNUI/AboutDialog.cpp
GLideNUI/AboutDialog.ui
GLideNUI/ConfigDialog.cpp
GLideNUI/Config_GLideNUI.cpp
GLideNUI/GLideNUI.cpp
GLideNUI/ScreenShot.cpp
GLideNUI/Settings.cpp
GLideNUI/QtKeyToHID.cpp
GLideNUI/configDialog.ui
GLideNUI/icon.qrc
)
if(MUPENPLUSAPI_GLIDENUI)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5 COMPONENTS Core Widgets Gui REQUIRED)
set(GLIDENUI_LIBRARIES
Qt5::Widgets Qt5::Core Qt5::Gui
)
list(APPEND GLideNUI_SOURCES
GLideNUI/fullscreenresolutions_mupen64plus.cpp
)
endif(MUPENPLUSAPI_GLIDENUI)
#check if we're running on Raspberry Pi
if(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h" AND NOT MESA)
message("bcm_host.h found")
set(BCMHOST ON)
set(EGL ON)
set(EGL_LIB -lbrcmEGL -lbrcmGLESv2)
add_definitions(
-DVC
)
include_directories(
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vmcs_host/linux"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/include/interface/vcos/pthreads"
)
link_directories(
"${CMAKE_FIND_ROOT_PATH}/opt/vc/lib"
"${CMAKE_FIND_ROOT_PATH}/opt/vc/lib/GL"
)
else(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h" AND NOT MESA)
set(EGL_LIB -lEGL)
endif(EXISTS "${CMAKE_FIND_ROOT_PATH}/opt/vc/include/bcm_host.h" AND NOT MESA)
if(MUPENPLUSAPI)
add_definitions(
-DMUPENPLUSAPI
-DTXFILTER_LIB
)
include_directories( . inc )
set(GLideN64_SOURCES_UNIX
MupenPlusPluginAPI.cpp
mupenplus/CommonAPIImpl_mupenplus.cpp
mupenplus/MemoryStatus_mupenplus.cpp
mupenplus/MupenPlusAPIImpl.cpp
Graphics/OpenGLContext/mupen64plus/mupen64plus_DisplayWindow.cpp
)
if(MUPENPLUSAPI_GLIDENUI)
add_definitions(-DM64P_GLIDENUI)
list(APPEND GLideN64_SOURCES_UNIX
${GLideNUI_SOURCES}
)
else()
list(APPEND GLideN64_SOURCES_UNIX
mupenplus/Config_mupenplus.cpp
)
endif()
set(GLideN64_SOURCES_WIN ${GLideN64_SOURCES_UNIX}
)
if (ANDROID)
set(GLideN64_DLL_NAME libmupen64plus-video-GLideN64)
else()
set(GLideN64_DLL_NAME mupen64plus-video-GLideN64)
endif()
else(MUPENPLUSAPI)
if(UNIX)
message(FATAL_ERROR "UNIX build requires MUPENPLUSAPI!")
endif(UNIX)
set(GLideN64_SOURCES_WIN
ZilmarPluginAPI.cpp
GLideNUI/Config_GLideNUI.cpp
windows/CommonAPIImpl_windows.cpp
windows/GLideN64_windows.cpp
windows/MemoryStatus_windows.cpp
common/GLFunctions.cpp
windows/ZilmarAPIImpl_windows.cpp
Graphics/OpenGLContext/windows/windows_DisplayWindow.cpp
)
set(GLideN64_DLL_NAME GLideN64)
endif(MUPENPLUSAPI)
add_subdirectory( osal )
include_directories( osal )
if (NOHQ)
list(APPEND GLideN64_SOURCES
TxFilterStub.cpp
)
else (NOHQ)
add_subdirectory( GLideNHQ )
include_directories( GLideNHQ )
endif(NOHQ)
if(UNIX)
list(APPEND GLideN64_SOURCES ${GLideN64_SOURCES_UNIX})
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
add_definitions(
-DOS_MAC_OS_X
)
if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
set(CMAKE_MACOSX_RPATH 0)
endif()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
add_definitions(
-DOS_LINUX
)
endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
endif(UNIX)
if(MINGW)
add_definitions(
-DMINGW
)
endif(MINGW)
if(WIN32)
list(APPEND GLideN64_SOURCES ${GLideN64_SOURCES_WIN})
add_definitions(
-DOS_WINDOWS
-D__WIN32__
-DWIN32
-D_WIN32_ASM
-D_CRT_SECURE_NO_WARNINGS
-D__MSC__
)
endif(WIN32)
if(SDL)
include(FindPkgConfig)
pkg_check_modules(SDL REQUIRED sdl)
include_directories(${SDL_INCLUDE_DIRS})
add_definitions(
-DUSE_SDL
)
endif(SDL)
if(PANDORA)
#Pandora as a SGX530, but it should share the bugs and limitations as SGX540
add_definitions(
-DPANDORA
-DPowerVR_SGX_540
-DEGL
)
endif(PANDORA)
if(ODROID)
add_definitions(
-DODROID
)
endif(ODROID)
if(VERO4K)
add_definitions(
-DVERO4K
)
endif(VERO4K)
if(ANDROID)
add_definitions(-DOS_ANDROID -DEGL_EGLEXT_PROTOTYPES -DEGL)
set(EGL ON)
if(ANDROID_ABI STREQUAL "armeabi-v7a" OR ANDROID_ABI STREQUAL "arm64-v8a")
set(NEON_OPT ON)
set(VEC4_OPT ON)
set(CRC_NEON ON)
elseif(ANDROID_ABI STREQUAL "x86" OR ANDROID_ABI STREQUAL "x86_64")
set(CRC_OPT ON)
set(VEC4_OPT ON)
endif()
list(APPEND GLideN64_SOURCES
Log_android.cpp
Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.cpp
Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.cpp
Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.cpp
Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.cpp
Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.cpp
)
list(REMOVE_ITEM GLideN64_SOURCES
Log.cpp
)
find_library( # Defines the name of the path variable that stores the
# location of the NDK library.
LOG_LIB
# Specifies the name of the NDK library that
# CMake needs to locate.
log )
endif(ANDROID)
if(ANDROID)
set( FREETYPE_INCLUDE_DIRS "${ANDROID_LIB_PATH}/freetype/include" )
elseif(UNIX OR BCMHOST)
set( FREETYPE_INCLUDE_DIRS "/usr/include/freetype2/" )
else(UNIX OR BCMHOST)
set( ENV{FREETYPE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../../freetype )
endif(ANDROID)
if(ANDROID)
add_library( ANDROID_FREETYPE
SHARED
IMPORTED )
if( CMAKE_BUILD_TYPE STREQUAL "Debug")
set( BUILD_VARIANT "debug" )
else()
set( BUILD_VARIANT "release" )
endif()
set_target_properties( # Specifies the target library.
ANDROID_FREETYPE
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
${ANDROID_LIB_PATH}/libs/${BUILD_VARIANT}/${ANDROID_ABI}/libfreetype.so)
set(FREETYPE_LIBRARIES ANDROID_FREETYPE)
else(ANDROID)
FIND_PACKAGE( Freetype REQUIRED )
endif(ANDROID)
include_directories( ${FREETYPE_INCLUDE_DIRS} )
if(VEC4_OPT)
add_definitions(
-D__VEC4_OPT
)
endif(VEC4_OPT)
if(CRC_ARMV8)
list(REMOVE_ITEM GLideN64_SOURCES
CRC32.cpp
)
list(APPEND GLideN64_SOURCES
CRC32_ARMV8.cpp
)
elseif(CRC_OPT)
list(REMOVE_ITEM GLideN64_SOURCES
CRC32.cpp
)
list(APPEND GLideN64_SOURCES
CRC_OPT.cpp
)
elseif(CRC_NEON)
list(REMOVE_ITEM GLideN64_SOURCES
CRC32.cpp
)
list(APPEND GLideN64_SOURCES
Neon/CRC_OPT_NEON.cpp
)
endif(CRC_ARMV8)
if(NEON_OPT)
add_definitions(
-D__NEON_OPT
)
list(APPEND GLideN64_SOURCES
Neon/3DMathNeon.cpp
Neon/gSPNeon.cpp
Neon/RSP_LoadMatrixNeon.cpp
)
list(REMOVE_ITEM GLideN64_SOURCES
3DMath.cpp
RSP_LoadMatrix.cpp
)
endif(NEON_OPT)
if(X86_OPT)
list(APPEND GLideN64_SOURCES
RSP_LoadMatrixX86.cpp
)
list(REMOVE_ITEM GLideN64_SOURCES
RSP_LoadMatrix.cpp
)
endif(X86_OPT)
# Build type
if( NOT CMAKE_BUILD_TYPE)
set( CMAKE_BUILD_TYPE Release)
endif( NOT CMAKE_BUILD_TYPE)
if( CMAKE_BUILD_TYPE STREQUAL "Debug")
set( CMAKE_BUILD_TYPE Debug)
set( DEBUG_BUILD TRUE)
add_definitions(
-DGL_DEBUG
)
endif( CMAKE_BUILD_TYPE STREQUAL "Debug")
if(GL_PROFILE)
add_definitions(
-DGL_PROFILE -DGL_DEBUG
)
endif(GL_PROFILE)
if(EGL)
add_definitions(
-DEGL
)
set(OPENGL_LIBRARIES ${EGL_LIB})
else(EGL)
find_package(OpenGL REQUIRED)
include_directories(${OpenGL_INCLUDE_DIRS})
link_directories(${OpenGL_LIBRARY_DIRS})
add_definitions(${OpenGL_DEFINITIONS})
if(NOT OPENGL_FOUND)
message(ERROR " OPENGL not found!")
endif(NOT OPENGL_FOUND)
endif(EGL)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
#check for compiler version
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE G++_VERSION)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND G++_VERSION VERSION_LESS 4.8)
message("Found compiler version " ${G++_VERSION})
message(SEND_ERROR "You need at least G++ 4.8 to compile GLideN64!")
elseif(G++_VERSION VERSION_LESS 3.3)
message("Found compiler version " ${G++_VERSION})
message(SEND_ERROR "You need at least Clang 3.3 to compile GLideN64!")
endif()
set(GCC_CPP11_COMPILE_FLAGS "-std=c++11")
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_CPP11_COMPILE_FLAGS}" )
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(GCC_STATIC_LINK_FLAGS "-static-libgcc")
endif()
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GCC_STATIC_LINK_FLAGS}" )
endif()
set(CMAKE_CXX_STANDARD 11)
add_library( ${GLideN64_DLL_NAME} SHARED ${GLideN64_SOURCES} ${PATH_REVISION})
if( CMAKE_BUILD_TYPE STREQUAL "Debug")
SET_TARGET_PROPERTIES(
${GLideN64_DLL_NAME}
PROPERTIES
LINKER_LANGUAGE CXX # Or else we get an error message, because cmake can't figure out from the ".o"-suffix that it is a C-linker we need.
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/plugin/Debug
)
if(SDL)
if (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} PRIVATE ${OPENGL_LIBRARIES} ${SDL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osald )
else (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} PRIVATE ${OPENGL_LIBRARIES} ${SDL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osald GLideNHQd )
endif (NOHQ)
else(SDL)
if (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} PRIVATE ${OPENGL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osald )
else (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} PRIVATE ${OPENGL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osald GLideNHQd )
endif (NOHQ)
endif(SDL)
endif( CMAKE_BUILD_TYPE STREQUAL "Debug")
if( CMAKE_BUILD_TYPE STREQUAL "Release")
include(CheckIPOSupported)
check_ipo_supported(RESULT result)
if(result)
message("Interprocedural optimizations enabled")
set_property(TARGET ${GLideN64_DLL_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -O3")
endif()
SET_TARGET_PROPERTIES(
${GLideN64_DLL_NAME}
PROPERTIES
LINKER_LANGUAGE CXX # Or else we get an error message, because cmake can't figure out from the ".o"-suffix that it is a C-linker we need.
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/plugin/Release
)
if(SDL)
if (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} ${OPENGL_LIBRARIES} ${SDL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osal )
else (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} ${OPENGL_LIBRARIES} ${SDL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osal GLideNHQ )
endif (NOHQ)
else(SDL)
if (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} ${OPENGL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osal )
else (NOHQ)
target_link_libraries(${GLideN64_DLL_NAME} ${OPENGL_LIBRARIES} ${FREETYPE_LIBRARIES} ${LOG_LIB} ${GLIDENUI_LIBRARIES} osal GLideNHQ )
endif (NOHQ)
endif(SDL)
endif( CMAKE_BUILD_TYPE STREQUAL "Release")