Misc organizing and bug fixing

This commit is contained in:
Zion Nimchuk 2017-06-12 11:45:29 -07:00 committed by Ani
parent 23d1ddbb8e
commit e1a78abfc9
4 changed files with 72 additions and 77 deletions

View file

@ -29,6 +29,11 @@ matrix:
exclude: exclude:
- os: osx - os: osx
compiler: gcc compiler: gcc
include:
- os: linux
compiler: gcc
env: WITHOUT_LLVM="yes"
git: git:
submodules: false submodules: false
@ -62,7 +67,11 @@ before_script:
- source /opt/qt59/bin/qt59-env.sh - source /opt/qt59/bin/qt59-env.sh
- mkdir build - mkdir build
- cd build - cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr - if [ -z "$WITHOUT_LLVM" ]; then
cmake .. -DCMAKE_INSTALL_PREFIX=/usr;
else
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DWITHOUT_LLVM=ON;
fi;
- make -j 3 - make -j 3
- # AppImage generation - # AppImage generation
- if [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = false ]; then - if [ "$TRAVIS_BRANCH" = "master" ] && [ "$TRAVIS_PULL_REQUEST" = false ]; then

View file

@ -1,8 +1,12 @@
cmake_minimum_required(VERSION 2.8.12) cmake_minimum_required(VERSION 2.8.12)
# uncomment next line if you want to build with GDB stub option(WITH_GDB "WITH_GDB" OFF)
# add_definitions(-DWITH_GDB_DEBUGGER) option(WITHOUT_LLVM "WITHOUT_LLVM" OFF)
set(CMAKE_CXX_STANDARD 14)
if (WITH_GDB)
add_definitions(-DWITH_GDB_DEBUGGER)
endif()
set(ASMJIT_STATIC TRUE) set(ASMJIT_STATIC TRUE)
if (NOT CMAKE_BUILD_TYPE) if (NOT CMAKE_BUILD_TYPE)
@ -14,14 +18,6 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." ) message( FATAL_ERROR "RPCS3 can only be compiled on 64-bit platforms." )
endif() endif()
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
message( FATAL_ERROR "RPCS3 requires at least gcc-5.1." )
endif()
if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6.1)
message( FATAL_ERROR "RPCS3 can't be compiled with gcc-6.1, see #1691." )
endif()
find_program(CCACHE_FOUND ccache) find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND) if (CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
@ -44,6 +40,7 @@ option(VULKAN_PREBUILT "" OFF)
# TODO: do real installation, including copying directory structure # TODO: do real installation, including copying directory structure
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/bin")
add_subdirectory( Vulkan ) add_subdirectory( Vulkan )
add_subdirectory( rpcs3 ) add_subdirectory( rpcs3 )
@ -62,7 +59,7 @@ endif()
# Linux installation # Linux installation
if(CMAKE_SYSTEM_NAME MATCHES "Linux|FreeBSD|OpenBSD") if(UNIX AND NOT APPLE)
# Install the application icon and menu item # Install the application icon and menu item
install(FILES rpcs3/rpcs3.svg install(FILES rpcs3/rpcs3.svg
DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps) DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps)

View file

@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 2.8.12)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules")
set(RES_FILES "") set(RES_FILES "")
set(CMAKE_CXX_STANDARD 14)
# Qt section # Qt section
find_package(Qt5 REQUIRED COMPONENTS Widgets) find_package(Qt5 REQUIRED COMPONENTS Widgets)
@ -27,6 +28,7 @@ endif()
include(cotire) include(cotire)
project(rpcs3) project(rpcs3)
# Generate git-version.h at build time. # Generate git-version.h at build time.
add_custom_target(GitVersion ALL add_custom_target(GitVersion ALL
DEPENDS something_that_never_exists) DEPENDS something_that_never_exists)
@ -37,35 +39,38 @@ add_custom_command(OUTPUT something_that_never_exists
# Check for a sufficient compiler and set build options # Check for a sufficient compiler and set build options
include(ConfigureCompiler) include(ConfigureCompiler)
if(WIN32) if(WIN32)
add_definitions(-DUNICODE) add_definitions(-DUNICODE)
add_definitions(-D_WIN32_WINNT=0x0601) add_definitions(-D_WIN32_WINNT=0x0601)
set(RES_FILES "rpcs3_.rc") set(RES_FILES "rpcs3_.rc")
if(NOT MSVC) else()
set(CMAKE_RC_COMPILER_INIT windres) add_definitions(-DGL_GLEXT_PROTOTYPES)
enable_language(RC) add_definitions(-DGLX_GLXEXT_PROTOTYPES)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif()
endif() endif()
if(NOT MSVC) if(NOT MSVC)
if($ENV{CI}) if($ENV{CI})
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O1") # fix for travis gcc OoM crash. Might be fixed with the move to containers. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O1") # fix for travis gcc OoM crash. Might be fixed with the move to containers.
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -fexceptions") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")
if(WIN32) if(WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-multiple-definition") # Workaround for mingw64 (MSYS2) set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
# Workaround for mingw64 (MSYS2)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-multiple-definition")
endif() endif()
add_compile_options(-msse -msse2 -mcx16 -mssse3) add_compile_options(-msse -msse2 -mcx16 -mssse3)
find_package(GLEW REQUIRED)
find_package(ZLIB REQUIRED)
else() else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew /D _CRT_SECURE_NO_DEPRECATE=1 /D _CRT_NON_CONFORMING_SWPRINTFS=1 /D _SCL_SECURE_NO_WARNINGS=1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:throwingNew /D _CRT_SECURE_NO_DEPRECATE=1 /D _CRT_NON_CONFORMING_SWPRINTFS=1 /D _SCL_SECURE_NO_WARNINGS=1")
endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib")
if(APPLE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /BASE:0x10000 /FIXED")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/opt/X11/include")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/opt/X11/include")
endif() endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
@ -79,39 +84,20 @@ else()
set(ADDITIONAL_LIBS "") set(ADDITIONAL_LIBS "")
endif() endif()
If(NOT RPCS3_SRC_DIR) if(NOT RPCS3_SRC_DIR)
SET(RPCS3_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}) SET(RPCS3_SRC_DIR ${CMAKE_CURRENT_LIST_DIR})
Message("-- Initializing RPCS3_SRC_DIR=${RPCS3_SRC_DIR}") Message("-- Initializing RPCS3_SRC_DIR=${RPCS3_SRC_DIR}")
Else() else()
Message("-- Using Custom RPCS3_SRC_DIR=${RPCS3_SRC_DIR}") Message("-- Using Custom RPCS3_SRC_DIR=${RPCS3_SRC_DIR}")
EndIf() endif()
set(CMAKE_MODULE_PATH "${RPCS3_SRC_DIR}/cmake_modules") set(CMAKE_MODULE_PATH "${RPCS3_SRC_DIR}/cmake_modules")
if(NOT WIN32)
add_definitions(-DGL_GLEXT_PROTOTYPES)
add_definitions(-DGLX_GLXEXT_PROTOTYPES)
endif()
if(NOT MSVC)
if(APPLE)
find_path(GLEW_INCLUDE_DIR GL/glew.h
/usr/include/GL
/usr/openwin/share/include
/usr/openwin/include
/usr/X11R6/include
/usr/include/X11
/opt/graphics/OpenGL/include
/opt/graphics/OpenGL/contrib/libglew
/usr/local/include
)
endif()
find_package(GLEW REQUIRED)
find_package(ZLIB REQUIRED)
endif()
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
find_package(OpenAL REQUIRED) find_package(OpenAL REQUIRED)
find_package(LLVM 4.0 CONFIG) if (NOT WITHOUT_LLVM)
find_package(LLVM 4.0 CONFIG)
endif()
if(APPLE) if(APPLE)
@ -164,13 +150,15 @@ ${LLVM_INCLUDE_DIRS}
"${RPCS3_SRC_DIR}/../3rdparty/stblib" "${RPCS3_SRC_DIR}/../3rdparty/stblib"
"${RPCS3_SRC_DIR}/../3rdparty/cereal/include" "${RPCS3_SRC_DIR}/../3rdparty/cereal/include"
) )
if(WIN32) if(WIN32)
include_directories(BEFORE "${RPCS3_SRC_DIR}/../3rdparty/XAudio2_7") # Slimmed down version of minidx9 for XAudio2_7 only # Slimmed down version of minidx9 for XAudio2_7 only
include_directories(BEFORE "${RPCS3_SRC_DIR}/../3rdparty/XAudio2_7")
include_directories(BEFORE "${RPCS3_SRC_DIR}/../3rdparty/minidx12/Include") include_directories(BEFORE "${RPCS3_SRC_DIR}/../3rdparty/minidx12/Include")
endif() endif()
if(NOT LLVM_FOUND) if(NOT LLVM_FOUND)
Message("LLVM not found! LLVM 4.0 is required. RPCS3 will be compiled without LLVM support.") Message("LLVM 4.0 not found. RPCS3 will be compiled without LLVM support.")
else() else()
add_definitions(${LLVM_DEFINITIONS}) add_definitions(${LLVM_DEFINITIONS})
add_definitions(-DLLVM_AVAILABLE) add_definitions(-DLLVM_AVAILABLE)
@ -206,7 +194,7 @@ endif()
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs}) foreach(dir ${dirs})
message(STATUS "dir='${dir}'") message(STATUS "dir='${dir}'")
endforeach() endforeach()
file( file(
@ -229,7 +217,7 @@ if (NOT WIN32 AND "${CMAKE_SYSTEM}" MATCHES "Linux")
"${RPCS3_SRC_DIR}/../Vulkan/glslang/hlsl/*.cpp" "${RPCS3_SRC_DIR}/../Vulkan/glslang/hlsl/*.cpp"
"${RPCS3_SRC_DIR}/../Vulkan/glslang/SPIRV/*.cpp" "${RPCS3_SRC_DIR}/../Vulkan/glslang/SPIRV/*.cpp"
) )
set (RPCS3_SRC ${RPCS3_SRC} ${UNIX_GLSLANG}) set (RPCS3_SRC ${RPCS3_SRC} ${UNIX_GLSLANG})
endif() endif()
@ -266,11 +254,6 @@ else()
add_executable(rpcs3 ${RPCS3_SRC} ${RES_FILES} resources.qrc) add_executable(rpcs3 ${RPCS3_SRC} ${RES_FILES} resources.qrc)
endif() endif()
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /BASE:0x10000 /FIXED")
endif()
if(WIN32) if(WIN32)
target_link_libraries(rpcs3 ws2_32.lib Winmm.lib Psapi.lib VKstatic.1 glslang OSDependent OGLCompiler SPIRV HLSL setupapi.lib hidapi-hid Shlwapi.lib) target_link_libraries(rpcs3 ws2_32.lib Winmm.lib Psapi.lib VKstatic.1 glslang OSDependent OGLCompiler SPIRV HLSL setupapi.lib hidapi-hid Shlwapi.lib)
if(NOT MSVC) if(NOT MSVC)
@ -281,12 +264,12 @@ if(WIN32)
target_link_libraries(rpcs3 avformat.lib avcodec.lib avutil.lib swresample.lib swscale.lib png16_static ${OPENAL_LIBRARY} ${ADDITIONAL_LIBS}) target_link_libraries(rpcs3 avformat.lib avcodec.lib avutil.lib swresample.lib swscale.lib png16_static ${OPENAL_LIBRARY} ${ADDITIONAL_LIBS})
else() else()
target_link_libraries(rpcs3 ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES} hidapi-hidraw udev) target_link_libraries(rpcs3 ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES} hidapi-hidraw udev)
target_link_libraries(rpcs3 -ldl -latomic -lpthread -lvulkan ${ZLIB_LIBRARIES} ${ADDITIONAL_LIBS}) target_link_libraries(rpcs3 -ldl -lpthread -lvulkan ${ZLIB_LIBRARIES} ${ADDITIONAL_LIBS})
if (USE_SYSTEM_FFMPEG) if (USE_SYSTEM_FFMPEG)
link_libraries(${FFMPEG_LIBRARY_DIR}) link_libraries(${FFMPEG_LIBRARY_DIR})
target_link_libraries(rpcs3 libavformat.so libavcodec.so libavutil.so libswresample.so libswscale.so) target_link_libraries(rpcs3 libavformat.so libavcodec.so libavutil.so libswresample.so libswscale.so)
else() else()
target_link_libraries(rpcs3 libavformat.a libavcodec.a libavutil.a libswresample.a libswscale.a -ldl) target_link_libraries(rpcs3 libavformat.a libavcodec.a libavutil.a libswresample.a libswscale.a)
endif() endif()
if (USE_SYSTEM_LIBPNG) if (USE_SYSTEM_LIBPNG)
target_link_libraries(rpcs3 ${PNG_LIBRARIES}) target_link_libraries(rpcs3 ${PNG_LIBRARIES})
@ -294,12 +277,18 @@ else()
target_link_libraries(rpcs3 png16_static) target_link_libraries(rpcs3 png16_static)
endif() endif()
endif() endif()
# For some reason GCC 7 requires manually linking with -latomic
if (CMAKE_COMPILER_IS_GNUCC AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 7))
target_link_libraries(rpcs3 -latomic)
endif()
if(LLVM_FOUND) if(LLVM_FOUND)
target_link_libraries(rpcs3 ${LLVM_LIBS}) target_link_libraries(rpcs3 ${LLVM_LIBS})
endif() endif()
set_target_properties(rpcs3 PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "${RPCS3_SRC_DIR}/stdafx.h")
cotire(rpcs3)
target_link_libraries(rpcs3 ${RPCS3_QT_LIBS}) target_link_libraries(rpcs3 ${RPCS3_QT_LIBS})
set_target_properties(rpcs3 PROPERTIES COTIRE_CXX_PREFIX_HEADER_INIT "${RPCS3_SRC_DIR}/stdafx.h")
cotire(rpcs3)

View file

@ -1,19 +1,19 @@
cmake_minimum_required(VERSION 2.8.12)
# Check and configure compiler options for RPCS3 # Check and configure compiler options for RPCS3
if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_COMPILER_IS_GNUCXX)
# Get GCC version
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
string(REGEX MATCHALL "[0-9]+" GCC_VERSION_COMPONENTS ${GCC_VERSION})
list(GET GCC_VERSION_COMPONENTS 0 GCC_MAJOR)
list(GET GCC_VERSION_COMPONENTS 1 GCC_MINOR)
# GCC 4.9 and lower are too old # GCC 4.9 and lower are too old
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.0) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9.0)
message(FATAL_ERROR message(FATAL_ERROR
"GCC ${CMAKE_CXX_COMPILER_VERSION} is too old.") "GCC ${CMAKE_CXX_COMPILER_VERSION} is too old.")
endif() endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6.1)
message( FATAL_ERROR "RPCS3 can't be compiled with gcc-6.1, see #1691." )
endif()
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1)
message( FATAL_ERROR "RPCS3 requires at least gcc-5.1." )
endif()
# FIXME: do we really need this? # FIXME: do we really need this?
# GCC 6.1 is insufficient to compile, because of a regression bug # GCC 6.1 is insufficient to compile, because of a regression bug
#if(GCC_MAJOR EQUAL "6" AND GCC_MINOR EQUAL "1") #if(GCC_MAJOR EQUAL "6" AND GCC_MINOR EQUAL "1")
@ -31,11 +31,11 @@ if(CMAKE_COMPILER_IS_GNUCXX)
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
# Clang 3.4 and lower are too old # Clang 3.4 and lower are too old
if(CLANG_VERSION_MAJOR LESS "3" AND CLANG_VERSION_MINOR LESS "4") #if(CLANG_VERSION_MAJOR LESS "3" AND CLANG_VERSION_MINOR LESS "4")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
message(FATAL_ERROR message(FATAL_ERROR
"Clang ${CLANG_VERSION_MAJOR}.${CLANG_VERSION_MINOR} is too old.") "Clang ${CMAKE_CXX_COMPILER_VERSION} is too old.")
endif() endif()
# Set compiler options here # Set compiler options here
add_compile_options(-ftemplate-depth=1024) add_compile_options(-ftemplate-depth=1024)