CMake minor improvements (#3783)

* cmake: simplify GLEW integration

* cmake: simplify ZLIB integration

* cmake: simplify ALSA detection

* cmake: check C++ compiler and flags instead of C ones

* cmake: bring consistency in Qt packages detection and remove unnecessary related "include_directories"

* cmake: harmonize coding style

* cmake: set CMAKE_INCLUDE_CURRENT_DIR to ON only when necessary
This commit is contained in:
scribam 2017-11-27 19:04:55 +01:00 committed by Ivan
parent b22f3d7a55
commit 5f07f78c23
2 changed files with 101 additions and 148 deletions

View file

@ -3,23 +3,21 @@ cmake_minimum_required(VERSION 3.1)
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) set(CMAKE_CXX_STANDARD 14)
include(CheckCCompilerFlag) include(CheckCXXCompilerFlag)
# Qt section # Qt section
find_package(Qt5 5.7 COMPONENTS Widgets) find_package(Qt5 5.7 COMPONENTS Widgets)
if(WIN32) if(WIN32)
find_package(Qt5WinExtras REQUIRED) find_package(Qt5 5.7 COMPONENTS WinExtras REQUIRED)
set(RPCS3_QT_LIBS Qt5::Widgets Qt5::WinExtras) set(RPCS3_QT_LIBS Qt5::Widgets Qt5::WinExtras)
include_directories(${Qt5Widgets_INCLUDE_DIRS} ${Qt5WinExtras_INCLUDE_DIRS})
else() else()
find_package(Qt5DBus) find_package(Qt5 5.7 COMPONENTS DBus)
if(Qt5DBus_FOUND) if(Qt5DBus_FOUND)
set(RPCS3_QT_LIBS Qt5::Widgets Qt5::DBus) set(RPCS3_QT_LIBS Qt5::Widgets Qt5::DBus)
add_definitions(-DHAVE_QTDBUS) add_definitions(-DHAVE_QTDBUS)
else() else()
set(RPCS3_QT_LIBS Qt5::Widgets) set(RPCS3_QT_LIBS Qt5::Widgets)
endif() endif()
include_directories(${Qt5Widgets_INCLUDE_DIRS})
endif() endif()
# Let's make sure we have Qt before we continue # Let's make sure we have Qt before we continue
@ -39,7 +37,6 @@ before re-running cmake")
else() else()
message(FATAL_ERROR "Look online for instructions on installing an up-to-date Qt5 on ${CMAKE_SYSTEM}.") message(FATAL_ERROR "Look online for instructions on installing an up-to-date Qt5 on ${CMAKE_SYSTEM}.")
endif() endif()
endif() endif()
message("CMake was unable to find Qt5!") message("CMake was unable to find Qt5!")
@ -57,13 +54,15 @@ set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
# To make UI files on cmake 3.7 or less work # To make UI files on cmake 3.7 or less work
if(CMAKE_VERION VERSION_LESS 3.8)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
endif()
if(Qt5_POSITION_INDEPENDENT_CODE) if(Qt5_POSITION_INDEPENDENT_CODE)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(UNIX) if(UNIX)
# Cotire needs this set for some reason # Cotire needs this set for some reason
SET(CMAKE_CXX_COMPILE_OPTIONS_PIE -fPIC) set(CMAKE_CXX_COMPILE_OPTIONS_PIE -fPIC)
endif() endif()
endif() endif()
@ -121,8 +120,8 @@ if(NOT MSVC)
if(APPLE) if(APPLE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie")
else() else()
CHECK_C_COMPILER_FLAG("-no-pie" HAS_NO_PIE) CHECK_CXX_COMPILER_FLAG("-no-pie" HAS_NO_PIE)
CHECK_C_COMPILER_FLAG("-nopie" HAS_NOPIE) CHECK_CXX_COMPILER_FLAG("-nopie" HAS_NOPIE)
if(HAS_NO_PIE) if(HAS_NO_PIE)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
@ -131,7 +130,6 @@ if(NOT MSVC)
endif() endif()
endif() endif()
find_package(GLEW REQUIRED)
find_package(ZLIB 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")
@ -154,10 +152,10 @@ if(UNIX AND NOT APPLE)
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")
@ -205,12 +203,11 @@ else()
endif() endif()
if(USE_ALSA) if(USE_ALSA)
find_package(PkgConfig) find_package(ALSA)
pkg_check_modules(ALSA alsa)
if(ALSA_FOUND) if(ALSA_FOUND)
add_definitions(-DHAVE_ALSA) add_definitions(-DHAVE_ALSA)
include_directories(SYSTEM ${ALSA_INCLUDE_DIRS}) include_directories(SYSTEM ${ALSA_INCLUDE_DIRS})
list(APPEND ADDITIONAL_LIBS ${ALSA_LDFLAGS}) list(APPEND ADDITIONAL_LIBS ${ALSA_LIBRARIES})
endif() endif()
endif() endif()
if(USE_PULSE) if(USE_PULSE)
@ -265,8 +262,6 @@ else()
endif() endif()
include_directories( include_directories(
${GLEW_INCLUDE_DIR}
${ZLIB_INCLUDE_DIR}
${OPENAL_INCLUDE_DIR} ${OPENAL_INCLUDE_DIR}
${LLVM_INCLUDE_DIRS} ${LLVM_INCLUDE_DIRS}
"${RPCS3_SRC_DIR}/../3rdparty/pugixml/src" "${RPCS3_SRC_DIR}/../3rdparty/pugixml/src"
@ -295,7 +290,7 @@ if(WIN32)
endif() endif()
if(NOT LLVM_FOUND) if(NOT LLVM_FOUND)
Message("LLVM 4.0 not found. 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)
@ -383,16 +378,21 @@ endif()
add_dependencies(rpcs3 GitVersion) add_dependencies(rpcs3 GitVersion)
if(NOT MSVC)
find_package(GLEW 1.13.0 REQUIRED)
target_link_libraries(rpcs3 GLEW::GLEW)
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)
target_link_libraries(rpcs3 ${OPENGL_LIBRARIES} ${GLEW_LIBRARY} opengl32.lib glu32.lib libpthread) target_link_libraries(rpcs3 ${OPENGL_LIBRARIES} opengl32.lib glu32.lib libpthread)
else() else()
target_link_libraries(rpcs3 dxgi.lib d2d1.lib dwrite.lib) target_link_libraries(rpcs3 dxgi.lib d2d1.lib dwrite.lib)
endif() endif()
target_link_libraries(rpcs3 avformat.lib avcodec.lib avutil.lib swscale.lib png16_static ${OPENAL_LIBRARY} ${ADDITIONAL_LIBS}) target_link_libraries(rpcs3 avformat.lib avcodec.lib avutil.lib swscale.lib png16_static ${OPENAL_LIBRARY} ${ADDITIONAL_LIBS})
else() else()
target_link_libraries(rpcs3 ${OPENAL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES}) target_link_libraries(rpcs3 ${OPENAL_LIBRARY} ${OPENGL_LIBRARIES})
if(APPLE) if(APPLE)
target_link_libraries(rpcs3 hidapi-mac "-framework CoreFoundation" "-framework IOKit") target_link_libraries(rpcs3 hidapi-mac "-framework CoreFoundation" "-framework IOKit")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
@ -403,7 +403,7 @@ else()
if(VULKAN_FOUND) if(VULKAN_FOUND)
target_link_libraries(rpcs3 ${VULKAN_LIBRARIES}) target_link_libraries(rpcs3 ${VULKAN_LIBRARIES})
endif() endif()
target_link_libraries(rpcs3 ${CMAKE_DL_LIBS} -lpthread ${ZLIB_LIBRARIES} ${ADDITIONAL_LIBS}) target_link_libraries(rpcs3 ${CMAKE_DL_LIBS} -lpthread ZLIB::ZLIB ${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 libswscale.so) target_link_libraries(rpcs3 libavformat.so libavcodec.so libavutil.so libswscale.so)
@ -418,7 +418,7 @@ else()
endif() endif()
# For some reason GCC 7 requires manually linking with -latomic # 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)) if(CMAKE_COMPILER_IS_GNUCXX AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 7))
target_link_libraries(rpcs3 -latomic) target_link_libraries(rpcs3 -latomic)
endif() endif()

View file

@ -1,47 +0,0 @@
#
# Try to find GLEW library and include path.
# Once done this will define
#
# GLEW_FOUND
# GLEW_INCLUDE_PATH
# GLEW_LIBRARY
#
IF (WIN32)
FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
$ENV{PROGRAMFILES}/GLEW/include
${PROJECT_SOURCE_DIR}/src/nvgl/glew/include
DOC "The directory where GL/glew.h resides")
FIND_LIBRARY( GLEW_LIBRARY
NAMES glew GLEW glew32 glew32s
PATHS
$ENV{PROGRAMFILES}/GLEW/lib
${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin
${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib
DOC "The GLEW library")
ELSE (WIN32)
FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
/usr/include
/usr/local/include
/sw/include
/opt/local/include
DOC "The directory where GL/glew.h resides")
FIND_LIBRARY( GLEW_LIBRARY
NAMES GLEW glew
PATHS
/usr/lib64
/usr/lib
/usr/local/lib64
/usr/local/lib
/sw/lib
/opt/local/lib
DOC "The GLEW library")
ENDIF (WIN32)
IF (GLEW_INCLUDE_PATH)
SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
ELSE (GLEW_INCLUDE_PATH)
SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
ENDIF (GLEW_INCLUDE_PATH)
MARK_AS_ADVANCED( GLEW_FOUND )