From 03f96b29c51e20b77efdbb6ba3656195e6dfb504 Mon Sep 17 00:00:00 2001 From: "gregory.hainaut" Date: Fri, 4 Jun 2010 17:17:55 +0000 Subject: [PATCH] [cmake] * Select automatically module (include pcsx2, libutilities&libx86emitter) to build based on dependency available. * rewrite SearchForStuff. More clean and it will better support mix between library and 3rdparty on linux. (see issue 736) git-svn-id: http://pcsx2.googlecode.com/svn/trunk@3153 96395faa-99c1-11dd-bbfe-3dabce05a288 --- CMakeLists.txt | 11 +- cmake/SearchForStuff.cmake | 289 ++++++++++++++------------------- cmake/SelectPcsx2Plugins.cmake | 53 +++++- 3 files changed, 179 insertions(+), 174 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2427a819e7..ca46ebe4ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,8 +32,7 @@ include(SearchForStuff) include(SelectPcsx2Plugins) # add additional project-wide include directories -include_directories(${PROJECT_SOURCE_DIR}/3rdparty - ${PROJECT_SOURCE_DIR}/common/include +include_directories(${PROJECT_SOURCE_DIR}/common/include ${PROJECT_SOURCE_DIR}/common/include/Utilities ${PROJECT_SOURCE_DIR}/common/include/x86emitter) @@ -41,13 +40,17 @@ include_directories(${PROJECT_SOURCE_DIR}/3rdparty add_subdirectory(3rdparty) # make common -add_subdirectory(common) +if(common_libs) + add_subdirectory(common) +endif(common_libs) # make tools add_subdirectory(tools) # make pcsx2 -add_subdirectory(pcsx2) +if(pcsx2_core) + add_subdirectory(pcsx2) +endif(pcsx2_core) # make plugins add_subdirectory(plugins) diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake index b4e9517e83..711bab77dd 100644 --- a/cmake/SearchForStuff.cmake +++ b/cmake/SearchForStuff.cmake @@ -16,215 +16,176 @@ detectOperatingSystem() SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS " ") SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS " ") +#------------------------------------------------------------------------------- +# Search all libraries on the system +#------------------------------------------------------------------------------- # Do not search Lib in /usr/lib64. Hope it is not overwritten in find_package or others macro SET(FIND_LIBRARY_USE_LIB64_PATHS FALSE) -#------------------------------------------------------------------------------- -# FindStuff -#------------------------------------------------------------------------------- -#---------------------------------------- -# Required -#---------------------------------------- -if(Linux) # Linux only - # gtk required - find_package(GTK2 REQUIRED gtk) - - # gtk found - if(GTK2_FOUND) - # add gtk include directories - include_directories(${GTK2_INCLUDE_DIRS}) - #else(GTK2_FOUND) - # message(FATAL_ERROR "GTK2 libraries and include files not found. - # Please install GTK2 version ${minimal_GTK2_version} or higher.") - endif(GTK2_FOUND) - -endif(Linux) - -#------------------------------------------------------------ - -# wx required -find_package(wxWidgets REQUIRED base core adv) - -# wx found -if(wxWidgets_FOUND) - if(Linux) # Linux only - # Force the use of 32 bit library - STRING(REGEX REPLACE "/usr/lib/wx" "${32_LD_LIBRARY_PATH}/wx" - wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") - endif(Linux) - include(${wxWidgets_USE_FILE}) -#else(wxWidgets_FOUND) -# message(FATAL_ERROR "wxWidgets libraries and include files not found.\ -# Please install wxWidgets version ${minimal_wxWidgets_version} \ -# or higher.") -endif(wxWidgets_FOUND) - -#------------------------------------------------------------ - -# zlib required (no require flag, because we can use project one as fallback) -find_package(ZLIB) - -# if we found zlib on the system, use it else use project one -if(ZLIB_FOUND AND NOT FORCE_INTERNAL_ZLIB) - # add zlib include directories - include_directories(${ZLIB_INCLUDE_DIRS}) -else(ZLIB_FOUND AND NOT FORCE_INTERNAL_ZLIB) - # use project one - set(projectZLIB TRUE) - set(ZLIB_LIBRARIES zlib) - set(ZLIB_FOUND TRUE) -endif(ZLIB_FOUND AND NOT FORCE_INTERNAL_ZLIB) - -#------------------------------------------------------------ - - -#---------------------------------------- -# Optional -#---------------------------------------- -if(Linux) # Linux only - # x11 optional - find_package(X11) - - # x11 found - if(X11_FOUND) - # add x11 include directories - include_directories(${X11_INCLUDE_DIR}) - #else(X11_FOUND) - # message(FATAL_ERROR "X11 libraries and include files not found. - # Please install X11.") - endif(X11_FOUND) -endif(Linux) - +# Linux libraries +if(Linux) + find_package(GTK2 REQUIRED gtk) + find_package(X11) # Manually find Xxf86vm because it is not done in the module... FIND_LIBRARY(X11_Xxf86vm_LIB Xxf86vm ${X11_LIB_SEARCH_PATH}) MARK_AS_ADVANCED(X11_Xxf86vm_LIB) - -#------------------------------------------------------------ - -# A52 optional +endif(Linux) +# Use cmake package to find module +find_package(ALSA) +find_package(BZip2) +find_package(OpenGL) +# Tell cmake that we use SDL as a library and not as an application +set(SDL_BUILDING_LIBRARY TRUE) +find_package(SDL) +find_package(Subversion) +find_package(wxWidgets REQUIRED base core adv) +find_package(ZLIB) +# Use pcsx2 package to find module include(FindA52) +include(FindCg) +include(FindGlew) +include(FindPortAudio) +include(FindSoundTouch) -# if we found A52 on the system, -# use it else use project one -if(A52_FOUND AND NOT FORCE_INTERNAL_A52) - # add a52 include directories - include_directories(${A52_INCLUDE_DIR}) -else(A52_FOUND AND NOT FORCE_INTERNAL_A52) +# Note for include_directory: The order is important to avoid a mess between include file from your system and the one of pcsx2 +# If you include first 3rdparty, all 3rdpary include will have a higer priority... +# If you include first /usr/include, all system include will have a higer priority over the pcsx2 one... +# Current implementation: +# 1/ include 3rdparty sub-directory that we will used (either request or fallback) +# 2/ include system one +# 3/ include 3rdpary main (just in case we miss some include files) +#---------------------------------------- +# Fallback on 3rdparty libraries +#---------------------------------------- +# Note to avoid some conflict with system include, we must include 3rdparty first +if(NOT ZLIB_FOUND OR FORCE_INTERNAL_ZLIB) + # use project one + set(projectZLIB TRUE) + set(ZLIB_FOUND TRUE) + # Set path + set(ZLIB_LIBRARIES zlib) + # XXX Need to be updated when repository will be updated + # For the moment include are done with the last fallback in bottom of the file + # include_directories(${PROJECT_SOURCE_DIR}/3rdparty/zlib) +endif(NOT ZLIB_FOUND OR FORCE_INTERNAL_ZLIB) + +if(NOT BZIP2_FOUND OR FORCE_INTERNAL_BZIP2) + # use project one + set(projectBZip2 TRUE) + set(BZIP2_FOUND TRUE) + # Set path + set(BZIP2_LIBRARIES bzip2) + # XXX Need to be updated when repository will be updated + # For the moment include are done with the last fallback in bottom of the file + # include_directories(${PROJECT_SOURCE_DIR}/3rdparty/bzip) +endif(NOT BZIP2_FOUND OR FORCE_INTERNAL_BZIP2) + +if(NOT SOUNDTOUCH_FOUND OR FORCE_INTERNAL_SOUNDTOUCH) + # use project one + set(projectSoundTouch TRUE) + set(SOUNDTOUCH_FOUND TRUE) + # Set path + set(SOUNDTOUCH_LIBRARIES SoundTouch) + # XXX Need to be updated when repository will be updated + # For the moment include are done with the last fallback in bottom of the file + # include_directories(${PROJECT_SOURCE_DIR}/3rdparty/soundtouch_internal) +endif(NOT SOUNDTOUCH_FOUND OR FORCE_INTERNAL_SOUNDTOUCH) + +if(NOT A52_FOUND OR FORCE_INTERNAL_A52) # use project one set(projectA52 TRUE) - set(A52_LIBRARIES A52) set(A52_FOUND TRUE) -endif(A52_FOUND AND NOT FORCE_INTERNAL_A52) + # Set path + set(A52_LIBRARIES A52) + # XXX Need to be updated when repository will be updated + # For the moment include are done with the last fallback in bottom of the file + # include_directories(${PROJECT_SOURCE_DIR}/3rdparty/a52_internal) +endif(NOT A52_FOUND OR FORCE_INTERNAL_A52) +#---------------------------------------- +# Use system include (if not 3rdparty one) +#---------------------------------------- +if(Linux) + # GTK2 + if(GTK2_FOUND) + include_directories(${GTK2_INCLUDE_DIRS}) + endif(GTK2_FOUND) -# ALSA optional -find_package(ALSA) + # x11 + if(X11_FOUND) + include_directories(${X11_INCLUDE_DIR}) + endif(X11_FOUND) +endif(Linux) -# ALSA found +# A52 +if(A52_FOUND AND NOT projectA52) + include_directories(${A52_INCLUDE_DIR}) +endif(A52_FOUND AND NOT projectA52) + +# ALSA if(ALSA_FOUND) - # add ALSA include directories include_directories(${ALSA_INCLUDE_DIRS}) endif(ALSA_FOUND) -#------------------------------------------------------------ - -# bzip2 optional -find_package(BZip2) - -# if we found bzip2 on the system, -# use it else use project one -if(BZIP2_FOUND AND NOT FORCE_INTERNAL_BZIP2) - # add bzip include directories +# bzip2 +if(BZIP2_FOUND AND NOT projectBZip2) include_directories(${BZIP2_INCLUDE_DIR}) -else(BZIP2_FOUND AND NOT FORCE_INTERNAL_BZIP2) - # use project one - set(projectBZip2 TRUE) - set(BZIP2_LIBRARIES bzip2) - set(BZIP2_FOUND TRUE) -endif(BZIP2_FOUND AND NOT FORCE_INTERNAL_BZIP2) +endif(BZIP2_FOUND AND NOT projectBZip2) -#------------------------------------------------------------ - -# Cg optional -include(FindCg) - -# found Cg +# Cg if(CG_FOUND) - # add Cg include directories include_directories(${CG_INCLUDE_DIR}) endif(CG_FOUND) -#------------------------------------------------------------ - -# GLEW optional -include(FindGlew) - -# found GLEW +# GLEW if(GLEW_FOUND) - # add GLEW include directories include_directories(${GLEW_INCLUDE_PATH}) endif(GLEW_FOUND) -#------------------------------------------------------------ - -# OpenGL optional -find_package(OpenGL) - -# opengl found +# OpenGL if(OPENGL_FOUND) - # add OpenGL include directories include_directories(${OPENGL_INCLUDE_DIR}) endif(OPENGL_FOUND) -#------------------------------------------------------------ - -# PortAudio optional -include(FindPortAudio) - -# found PortAudio +# PortAudio if(PORTAUDIO_FOUND) - # add PortAudio include directories include_directories(${PORTAUDIO_INCLUDE_DIR}) endif(PORTAUDIO_FOUND) -#------------------------------------------------------------ - -# SDL optional -set(SDL_BUILDING_LIBRARY TRUE) -find_package(SDL) - -# SDL found +# SDL if(SDL_FOUND) - # add SDL include directories include_directories(${SDL_INCLUDE_DIR}) endif(SDL_FOUND) -#------------------------------------------------------------ - -# SoundTouch optional -#include(FindSoundTouch) - -# found SoundTouch -if(SOUNDTOUCH_FOUND AND NOT FORCE_INTERNAL_SOUNDTOUCH) - # add SoundTouch include directories +# SoundTouch +if(SOUNDTOUCH_FOUND AND NOT projectSoundTouch) include_directories(${SOUNDTOUCH_INCLUDE_DIR}) -else(SOUNDTOUCH_FOUND AND NOT FORCE_INTERNAL_SOUNDTOUCH) - # use project one - set(projectSoundTouch TRUE) - set(SOUNDTOUCH_LIBRARIES SoundTouch) - - # found - set(SOUNDTOUCH_FOUND TRUE) -endif(SOUNDTOUCH_FOUND AND NOT FORCE_INTERNAL_SOUNDTOUCH) - -#------------------------------------------------------------ +endif(SOUNDTOUCH_FOUND AND NOT projectSoundTouch) +# Note: subversion it only used to detect the current revision of your build # Subversion optional -find_package(Subversion) - -# subversion found if(Subversion_FOUND) set(SVN TRUE) else(Subversion_FOUND) set(SVN FALSE) endif(Subversion_FOUND) + +# Wx +if(wxWidgets_FOUND) + if(Linux) + # Force the use of 32 bit library + STRING(REGEX REPLACE "/usr/lib/wx" "${32_LD_LIBRARY_PATH}/wx" + wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") + endif(Linux) + include(${wxWidgets_USE_FILE}) +endif(wxWidgets_FOUND) + +# Zlib +if(ZLIB_FOUND AND NOT projectZLIB) + include_directories(${ZLIB_INCLUDE_DIRS}) +endif(ZLIB_FOUND AND NOT projectZLIB) + +#---------------------------------------- +# In all others situation fallback to the 3rdparty +#---------------------------------------- +include_directories(${PROJECT_SOURCE_DIR}/3rdparty) diff --git a/cmake/SelectPcsx2Plugins.cmake b/cmake/SelectPcsx2Plugins.cmake index 54fdd2cf59..8d3f89cceb 100644 --- a/cmake/SelectPcsx2Plugins.cmake +++ b/cmake/SelectPcsx2Plugins.cmake @@ -1,3 +1,42 @@ +#------------------------------------------------------------------------------- +# Pcsx2 core & common libs +#------------------------------------------------------------------------------- +# Check for additional dependencies. +# If all dependencies are available, including OS, build it +#------------------------------------------------------------------------------- + +#--------------------------------------- +# Common libs +# requires: -wx +#--------------------------------------- +if(wxWidgets_FOUND) + set(common_libs TRUE) +else(wxWidgets_FOUND) + set(common_libs FALSE) + message(STATUS "Skip build of common libraries: miss some dependencies") +endif(wxWidgets_FOUND) + +#--------------------------------------- +# Pcsx2 core +# requires: -wx +# -gtk2 (linux) +# -zlib +# -common_libs +#--------------------------------------- +# Common dependancy +if(wxWidgets_FOUND AND ZLIB_FOUND AND common_libs) + set(pcsx2_core TRUE) +else(wxWidgets_FOUND AND ZLIB_FOUND AND common_libs) + set(pcsx2_core FALSE) + message(STATUS "Skip build of pcsx2 core: miss some dependencies") +endif(wxWidgets_FOUND AND ZLIB_FOUND AND common_libs) +# Linux need also gtk2 +if(Linux AND NOT GTK2_FOUND) + set(pcsx2_core FALSE) + message(STATUS "Skip build of pcsx2 core: miss some dependencies") +endif(Linux AND NOT GTK2_FOUND) + + #------------------------------------------------------------------------------- # Plugins #------------------------------------------------------------------------------- @@ -65,13 +104,14 @@ endif(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND) # -OpenGL # -X11 # -CG +# -common_libs #--------------------------------------- -if(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND) +if(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND AND common_libs) set(zzogl TRUE) -else(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND) +else(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND AND common_libs) set(zzogl FALSE) message(STATUS "Skip build of zzogl: miss some dependencies") -endif(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND) +endif(GLEW_FOUND AND OPENGL_FOUND AND X11_FOUND AND CG_FOUND AND common_libs) #--------------------------------------- #--------------------------------------- @@ -119,13 +159,14 @@ set(SPU2null TRUE) # -ALSA # -Portaudio # -A52 +# -common_libs #--------------------------------------- -if(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND) +if(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND AND common_libs) set(spu2-x TRUE) -else(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND) +else(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND AND common_libs) set(spu2-x FALSE) message(STATUS "Skip build of spu2-x: miss some dependencies") -endif(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND) +endif(A52_FOUND AND ALSA_FOUND AND PORTAUDIO_FOUND AND SOUNDTOUCH_FOUND AND common_libs) #--------------------------------------- #---------------------------------------