Browse Source
CMake cleanup
CMake cleanup
Several cleanups to the buildsystem: - Do better factoring of common libs between platforms. - Add support to building on Windows. - Remove Qt4 support. - Re-sort file lists and add missing headers.pull/15/merge
9 changed files with 265 additions and 150 deletions
-
12.travis-deps.sh
-
143CMakeLists.txt
-
15externals/qhexedit/CMakeLists.txt
-
9src/CMakeLists.txt
-
24src/citra/CMakeLists.txt
-
39src/citra_qt/CMakeLists.txt
-
23src/common/CMakeLists.txt
-
103src/core/CMakeLists.txt
-
39src/video_core/CMakeLists.txt
@ -1,78 +1,131 @@ |
|||
cmake_minimum_required(VERSION 2.8.7) |
|||
# CMake 2.8.11 required for Qt5 settings to be applied automatically on |
|||
# dependent libraries. |
|||
cmake_minimum_required(VERSION 2.8.11) |
|||
|
|||
project(citra) |
|||
|
|||
SET(CXX_COMPILE_FLAGS "-std=c++11") |
|||
|
|||
# silence some spam |
|||
add_definitions(-Wno-attributes) |
|||
if (NOT MSVC) |
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-attributes") |
|||
else() |
|||
# Silence deprecation warnings |
|||
add_definitions(/D_CRT_SECURE_NO_WARNINGS) |
|||
endif() |
|||
add_definitions(-DSINGLETHREADED) |
|||
add_definitions(${CXX_COMPILE_FLAGS}) |
|||
|
|||
find_package(PNG) |
|||
if (PNG_FOUND) |
|||
add_definitions(-DHAVE_PNG) |
|||
endif () |
|||
|
|||
# dependency checking |
|||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules/") |
|||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeTests) |
|||
include(FindX11 REQUIRED) |
|||
find_package(PkgConfig REQUIRED) |
|||
# Include bundled CMake modules |
|||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/externals/cmake-modules") |
|||
|
|||
find_package(OpenGL REQUIRED) |
|||
include_directories(${OPENGL_INCLUDE_DIR}) |
|||
|
|||
option(ENABLE_GLFW "Enable the GLFW frontend" ON) |
|||
if (ENABLE_GLFW) |
|||
if (WIN32) |
|||
# Detect toolchain and platform |
|||
if (MSVC) |
|||
if (CMAKE_SIZEOF_VOID_P EQUAL 8) |
|||
set(TMP_ARCH "x64") |
|||
else() |
|||
set(TMP_ARCH "Win32") |
|||
endif() |
|||
|
|||
if (MSVC11) # Visual C++ 2012 |
|||
set(TMP_TOOLSET "v110") |
|||
elseif (MSVC12) # Visual C++ 2013 |
|||
set(TMP_TOOLSET "v120") |
|||
else() |
|||
set(TMP_TOOLSET "UNSUPPORTED") |
|||
message(SEND_ERROR "We don't supply GLFW binaries for your version of MSVC, you might have to provide them yourself.") |
|||
endif() |
|||
|
|||
set(TMP_TOOLSET "msvc_${TMP_TOOLSET}-${TMP_ARCH}") |
|||
else() |
|||
# Assume mingw |
|||
if (CMAKE_SIZEOF_VOID_P EQUAL 8) |
|||
set(TMP_ARCH "x86_64") |
|||
else() |
|||
set(TMP_ARCH "i686") |
|||
endif() |
|||
|
|||
set(TMP_TOOLSET "mingw-${TMP_ARCH}") |
|||
endif() |
|||
|
|||
set(GLFW_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/externals/glfw-3.0.4.bin") |
|||
set(GLFW_INCLUDE_DIRS "${GLFW_PREFIX}/include" CACHE PATH "Path to GLFW3 headers") |
|||
set(GLFW_LIBRARY_DIRS "${GLFW_PREFIX}/lib-${TMP_TOOLSET}" CACHE PATH "Path to GLFW3 libraries") |
|||
|
|||
# Clean up after ourselves |
|||
unset(TMP_TOOLSET) |
|||
unset(TMP_ARCH) |
|||
|
|||
set(GLFW_LIBRARIES glfw3) |
|||
else() |
|||
find_package(X11 REQUIRED) |
|||
find_package(PkgConfig REQUIRED) |
|||
pkg_search_module(GLFW REQUIRED glfw3) |
|||
endif() |
|||
|
|||
include_directories(${GLFW_INCLUDE_DIRS}) |
|||
link_directories(${GLFW_LIBRARY_DIRS}) |
|||
endif() |
|||
|
|||
# corefoundation is required only on OSX |
|||
IF (APPLE) |
|||
# CoreFoundation is required only on OSX |
|||
FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation) |
|||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") |
|||
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") |
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") |
|||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") |
|||
ENDIF (APPLE) |
|||
|
|||
#external includes |
|||
include_directories(${GLFW_INCLUDE_DIRS}) |
|||
include_directories(${OPENGL_INCLUDE_DIR}) |
|||
|
|||
# workaround for GLFW linking on OSX |
|||
link_directories(${GLFW_LIBRARY_DIRS}) |
|||
|
|||
option(DISABLE_QT "Disable Qt GUI" OFF) |
|||
option(USE_QT5 "Use Qt5 when available" ON) |
|||
if (NOT DISABLE_QT) |
|||
if(USE_QT5) |
|||
find_package(Qt5Gui) |
|||
find_package(Qt5Widgets) |
|||
find_package(Qt5OpenGL) |
|||
if(NOT Qt5Gui_FOUND OR NOT Qt5Widgets_FOUND OR NOT Qt5OpenGL_FOUND) |
|||
message("Qt5 libraries not found! Using Qt4 instead.") |
|||
set(USE_QT5 OFF) |
|||
option(ENABLE_QT "Enable the Qt frontend" ON) |
|||
option(CITRA_FORCE_QT4 "Use Qt4 even if Qt5 is available." OFF) |
|||
if (ENABLE_QT) |
|||
# Set CMAKE_PREFIX_PATH if QTDIR is defined in the environment This allows CMake to |
|||
# automatically find the Qt packages on Windows |
|||
if (DEFINED ENV{QTDIR}) |
|||
list(APPEND CMAKE_PREFIX_PATH "$ENV{QTDIR}") |
|||
endif() |
|||
endif() |
|||
if(NOT USE_QT5) |
|||
include(FindQt4) |
|||
find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL) |
|||
|
|||
if(QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND AND QT_QTOPENGL_FOUND) |
|||
include(${QT_USE_FILE}) |
|||
include_directories(${QT_INCLUDES}) |
|||
else() |
|||
message("Qt4 libraries not found! Disabling Qt GUI") |
|||
set(DISABLE_QT ON) |
|||
if (NOT CITRA_FORCE_QT4) |
|||
find_package(Qt5 COMPONENTS Widgets OpenGL) |
|||
set(CITRA_QT_LIBS Qt5::Widgets Qt5::OpenGL) |
|||
endif() |
|||
|
|||
if (CITRA_FORCE_QT4 OR NOT Qt5_FOUND) |
|||
# Try to fallback to Qt4 |
|||
find_package(Qt4 REQUIRED COMPONENTS QtGui QtOpenGL) |
|||
set(CITRA_QT_LIBS Qt4::QtGui Qt4::QtOpenGL) |
|||
endif() |
|||
endif() |
|||
|
|||
# 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 |
|||
# one in the filesystem. |
|||
function(create_directory_groups) |
|||
# Place any files that aren't in the source list in a separate group so that they don't get in |
|||
# the way. |
|||
source_group("Other Files" REGULAR_EXPRESSION ".") |
|||
|
|||
foreach(file_name ${ARGV}) |
|||
get_filename_component(dir_name "${file_name}" PATH) |
|||
# Group names use '\' as a separator even though the entire rest of CMake uses '/'... |
|||
string(REPLACE "/" "\\" group_name "${dir_name}") |
|||
source_group("${group_name}" FILES "${file_name}") |
|||
endforeach() |
|||
endfunction() |
|||
|
|||
# generate git revision information |
|||
include(GetGitRevisionDescription) |
|||
get_git_head_revision(GIT_REF_SPEC GIT_REV) |
|||
git_describe(GIT_DESC --always --long --dirty) |
|||
git_branch_name(GIT_BRANCH) |
|||
|
|||
# internal includes |
|||
include_directories(src) |
|||
|
|||
# process subdirectories |
|||
if(NOT DISABLE_QT) |
|||
if(ENABLE_QT) |
|||
include_directories(externals/qhexedit) |
|||
add_subdirectory(externals/qhexedit) |
|||
endif() |
|||
|
|||
@ -1,9 +1,12 @@ |
|||
# Enable modules to include each other's files |
|||
include_directories(.) |
|||
|
|||
add_subdirectory(common) |
|||
add_subdirectory(core) |
|||
add_subdirectory(video_core) |
|||
if (ENABLE_GLFW) |
|||
add_subdirectory(citra) |
|||
endif() |
|||
if (ENABLE_QT) |
|||
add_subdirectory(citra_qt) |
|||
|
|||
if(QT4_FOUND AND QT_QTCORE_FOUND AND QT_QTGUI_FOUND AND QT_QTOPENGL_FOUND AND NOT DISABLE_QT4) |
|||
#add_subdirectory(citra_qt) |
|||
endif() |
|||
@ -1,29 +1,42 @@ |
|||
set(SRCS clipper.cpp |
|||
set(SRCS |
|||
renderer_opengl/generated/gl_3_2_core.c |
|||
renderer_opengl/renderer_opengl.cpp |
|||
renderer_opengl/gl_shader_util.cpp |
|||
debug_utils/debug_utils.cpp |
|||
clipper.cpp |
|||
command_processor.cpp |
|||
primitive_assembly.cpp |
|||
rasterizer.cpp |
|||
utils.cpp |
|||
vertex_shader.cpp |
|||
video_core.cpp |
|||
renderer_opengl/generated/gl_3_2_core.c |
|||
renderer_opengl/renderer_opengl.cpp |
|||
renderer_opengl/gl_shader_util.cpp |
|||
debug_utils/debug_utils.cpp) |
|||
) |
|||
|
|||
set(HEADERS clipper.h |
|||
set(HEADERS |
|||
debug_utils/debug_utils.h |
|||
renderer_opengl/generated/gl_3_2_core.h |
|||
renderer_opengl/gl_shader_util.h |
|||
renderer_opengl/gl_shaders.h |
|||
renderer_opengl/renderer_opengl.h |
|||
clipper.h |
|||
command_processor.h |
|||
gpu_debugger.h |
|||
math.h |
|||
pica.h |
|||
primitive_assembly.h |
|||
rasterizer.h |
|||
utils.h |
|||
video_core.h |
|||
renderer_base.h |
|||
utils.h |
|||
vertex_shader.h |
|||
video_core.h |
|||
renderer_opengl/generated/gl_3_2_core.h |
|||
renderer_opengl/renderer_opengl.h |
|||
renderer_opengl/gl_shader_util.h |
|||
renderer_opengl/gl_shaders.h |
|||
debug_utils/debug_utils.h) |
|||
) |
|||
|
|||
create_directory_groups(${SRCS} ${HEADERS}) |
|||
|
|||
add_library(video_core STATIC ${SRCS} ${HEADERS}) |
|||
|
|||
if (PNG_FOUND) |
|||
target_link_libraries(video_core ${PNG_LIBRARIES}) |
|||
include_directories(${PNG_INCLUDE_DIRS}) |
|||
add_definitions(${PNG_DEFINITIONS}) |
|||
endif() |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue