diff options
| -rw-r--r-- | CMakeLists.txt | 134 | 
1 files changed, 78 insertions, 56 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 79dd54d52..1f0af2d41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,25 @@  # CMake 3.6 required for FindBoost to define IMPORTED libs properly on unknown Boost versions  cmake_minimum_required(VERSION 3.6) -list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") -# This function downloads a binary library package from our external repo. -# Params: -#   remote_path: path to the file to download, relative to the remote repository root -#   prefix_var: name of a variable which will be set with the path to the extracted contents -function(download_bundled_external remote_path lib_name prefix_var) -    set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}") -    if (NOT EXISTS "${prefix}") -        message(STATUS "Downloading binaries for ${lib_name}...") -        file(DOWNLOAD -            https://github.com/citra-emu/ext-windows-bin/raw/master/${remote_path}${lib_name}.7z -            "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" SHOW_PROGRESS) -        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" -            WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") -    endif() -    message(STATUS "Using bundled binaries at ${prefix}") -    set(${prefix_var} "${prefix}" PARENT_SCOPE) -endfunction() +project(citra) + +option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) +option(CITRA_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" OFF) + +option(ENABLE_QT "Enable the Qt frontend" ON) +option(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" OFF) + +if(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit) +    message(STATUS "Copying pre-commit hook") +    file(COPY hooks/pre-commit +        DESTINATION ${CMAKE_SOURCE_DIR}/.git/hooks) +endif() + + +# Detect current compilation architecture and create standard definitions +# =======================================================================  include(CheckSymbolExists)  function(detect_architecture symbol arch) @@ -37,20 +38,6 @@ function(detect_architecture symbol arch)      endif()  endfunction() -project(citra) - -option(ENABLE_SDL2 "Enable the SDL2 frontend" ON) -option(CITRA_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" OFF) - -option(ENABLE_QT "Enable the Qt frontend" ON) -option(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" OFF) - -if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks/pre-commit) -    message(STATUS "Copying pre-commit hook") -    file(COPY hooks/pre-commit -        DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/.git/hooks) -endif() -  if (MSVC)      detect_architecture("_M_AMD64" x86_64)      detect_architecture("_M_IX86" x86) @@ -67,6 +54,10 @@ if (NOT DEFINED ARCHITECTURE)  endif()  message(STATUS "Target architecture: ${ARCHITECTURE}") + +# Configure compilation flags +# =========================== +  set(CMAKE_CXX_STANDARD 14)  set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -134,6 +125,28 @@ add_definitions(-DSINGLETHREADED)  set_property(DIRECTORY APPEND PROPERTY      COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG> $<$<NOT:$<CONFIG:Debug>>:NDEBUG>) + +# System imported libraries +# ====================== + +# This function downloads a binary library package from our external repo. +# Params: +#   remote_path: path to the file to download, relative to the remote repository root +#   prefix_var: name of a variable which will be set with the path to the extracted contents +function(download_bundled_external remote_path lib_name prefix_var) +    set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}") +    if (NOT EXISTS "${prefix}") +        message(STATUS "Downloading binaries for ${lib_name}...") +        file(DOWNLOAD +            https://github.com/citra-emu/ext-windows-bin/raw/master/${remote_path}${lib_name}.7z +            "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" SHOW_PROGRESS) +        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" +            WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") +    endif() +    message(STATUS "Using bundled binaries at ${prefix}") +    set(${prefix_var} "${prefix}" PARENT_SCOPE) +endfunction() +  find_package(PNG QUIET)  if (NOT PNG_FOUND)      message(STATUS "libpng not found. Some debugging features have been disabled.") @@ -148,11 +161,8 @@ if (NOT Boost_FOUND)      find_package(Boost QUIET REQUIRED)  endif() -# Include bundled CMake modules -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/cmake-modules") -  # Prefer the -pthread flag on Linux. -set (THREADS_PREFER_PTHREAD_FLAG ON) +set(THREADS_PREFER_PTHREAD_FLAG ON)  find_package(Threads REQUIRED)  if (ENABLE_SDL2) @@ -186,6 +196,32 @@ else()      set(SDL2_FOUND NO)  endif() +if (ENABLE_QT) +    if (CITRA_USE_BUNDLED_QT) +        if (MSVC14 AND ARCHITECTURE_x86_64) +            set(QT_VER qt-5.7-msvc2015_64) +        else() +            message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.") +        endif() + +        if (DEFINED QT_VER) +            download_bundled_external("qt/" ${QT_VER} QT_PREFIX) +        endif() + +        set(QT_PREFIX_HINT HINTS "${QT_PREFIX}") +    else() +        # Passing an empty HINTS seems to cause default system paths to get ignored in CMake 2.8 so +        # make sure to not pass anything if we don't have one. +        set(QT_PREFIX_HINT) +    endif() + +    find_package(Qt5 REQUIRED COMPONENTS Widgets OpenGL ${QT_PREFIX_HINT}) +endif() + + +# Platform-specific library requirements +# ====================================== +  IF (APPLE)      FIND_LIBRARY(COCOA_LIBRARY Cocoa)           # Umbrella framework for everything GUI-related      set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY}) @@ -214,27 +250,9 @@ if (UNIX OR MINGW)      endif()  endif() -if (ENABLE_QT) -    if (CITRA_USE_BUNDLED_QT) -        if (MSVC14 AND ARCHITECTURE_x86_64) -            set(QT_VER qt-5.7-msvc2015_64) -        else() -            message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.") -        endif() -        if (DEFINED QT_VER) -            download_bundled_external("qt/" ${QT_VER} QT_PREFIX) -        endif() - -        set(QT_PREFIX_HINT HINTS "${QT_PREFIX}") -    else() -        # Passing an empty HINTS seems to cause default system paths to get ignored in CMake 2.8 so -        # make sure to not pass anything if we don't have one. -        set(QT_PREFIX_HINT) -    endif() - -    find_package(Qt5 REQUIRED COMPONENTS Widgets OpenGL ${QT_PREFIX_HINT}) -endif() +# Include source code +# ===================  # This function should be passed a list of all files in a target. It will automatically generate  # file groups following the directory hierarchy, so that the layout of the files in IDEs matches the @@ -262,6 +280,10 @@ add_subdirectory(externals)  add_subdirectory(src)  enable_testing() + +# Installation instructions +# ========================= +  # Install freedesktop.org metadata files, following those specifications:  # http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html  # http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html  | 
