diff --git a/CMakeLists.txt b/CMakeLists.txt index 505ce80b3..d226e6123 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,13 +23,17 @@ if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR}) message(FATAL_ERROR "Prevented in-tree build.") endif() -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.1) project(love) set(LOVE_EXE_NAME love) set(LOVE_LIB_NAME liblove) +set(CMAKE_MODULE_PATH "${love_SOURCE_DIR}/extra/cmake" ${CMAKE_MODULE_PATH}) +# Needed for shared libs on Linux. (-fPIC). +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + set (CMAKE_CXX_STANDARD 11) if(MSVC) @@ -157,19 +161,87 @@ if(MEGA) # automatically. endif() else() - message(FATAL_ERROR " + if(MSVC) + message(FATAL_ERROR " It is currently only possible to build with megasource on Windows. Please see http://bitbucket.org/rude/megasource ") + endif() + + find_package(Freetype REQUIRED) + find_package(ModPlug REQUIRED) + find_package(OpenAL REQUIRED) + find_package(OpenGL REQUIRED) + find_package(PhysFS REQUIRED) + find_package(SDL2 REQUIRED) + find_package(Theora REQUIRED) + find_package(Vorbis REQUIRED) + + # required for enet + add_definitions(-D HAS_SOCKLEN_T) + + set(LOVE_INCLUDE_DIRS + ${SDL2_INCLUDE_DIR} + ${PHYSFS_INCLUDE_DIR} + ${FREETYPE_INCLUDE_DIRS} + ${VORBIS_INCLUDE_DIR} + ) + + set(LOVE_LINK_LIBRARIES + ${OPENGL_gl_LIBRARY} + ${SDL2_LIBRARY} + ${FREETYPE_LIBRARY} + ${OPENAL_LIBRARY} + ${MODPLUG_LIBRARY} + ${PHYSFS_LIBRARY} + ${THEORA_LIBRARY} + ${THEORADEC_LIBRARY} + ${VORBISFILE_LIBRARY} + ${LOVE_LUA_LIBRARY} + ) + + if(LOVE_MPG123) + find_package(MPG123 REQUIRED) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${MPG123_LIBRARY} + ) + endif() + + if(LOVE_JIT) + find_package(LuaJIT REQUIRED) + set(LOVE_LUA_LIBRARY ${LUAJIT_LIBRARY}) + set(LOVE_LUA_INCLUDE_DIR ${LUAJIT_INCLUDE_DIR}) + else() + find_package(Lua51 REQUIRED) + set(LOVE_LUA_LIBRARY ${LUA_LIBRARY}) + set(LOVE_LUA_INCLUDE_DIR ${LUA_INCLUDE_DIR}) + endif() + + set(LOVE_INCLUDE_DIRS + ${LOVE_INCLUDE_DIRS} + ${LOVE_LUA_INCLUDE_DIR} + ) + set(LOVE_LINK_LIBRARIES + ${LOVE_LINK_LIBRARIES} + ${LOVE_LUA_LIBRARY} + ) + endif() ### ### No Megasource-specific stuff beyond this point! ### +if(MSVC) + set(DISABLE_WARNING_FLAG -W0) +else() + set(DISABLE_WARNING_FLAG -w) +endif() + function(disable_warnings ARG_TARGET) get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS) - set(NEW_FLAGS -W0) + set(NEW_FLAGS ${DISABLE_WARNING_FLAG}) if(OLD_FLAGS) set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}") endif() diff --git a/extra/cmake/FindLuaJIT.cmake b/extra/cmake/FindLuaJIT.cmake new file mode 100644 index 000000000..a48410195 --- /dev/null +++ b/extra/cmake/FindLuaJIT.cmake @@ -0,0 +1,25 @@ +# Sets the following variables: +# +# LUAJIT_FOUND +# LUAJIT_INCLUDE_DIR +# LUAJIT_LIBRARY + +set(LUAJIT_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(LUAJIT_INCLUDE_DIR + NAMES luajit.h + PATH_SUFFIXES include include/luajit-2.0 + PATHS ${LUAJIT_SEARCH_PATHS}) + +find_library(LUAJIT_LIBRARY + NAMES luajit-5.1 + PATH_SUFFIXES lib + PATHS ${LUAJIT_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LuaJIT DEFAULT_MSG LUAJIT_LIBRARY LUAJIT_INCLUDE_DIR) + +mark_as_advanced(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARY) diff --git a/extra/cmake/FindMPG123.cmake b/extra/cmake/FindMPG123.cmake new file mode 100644 index 000000000..6cda993b2 --- /dev/null +++ b/extra/cmake/FindMPG123.cmake @@ -0,0 +1,25 @@ +# Sets the following variables: +# +# MPG123_FOUND +# MPG123_INCLUDE_DIR +# MPG123_LIBRARY + +set(MPG123_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(MPG123_INCLUDE_DIR + NAMES mpg123.h + PATH_SUFFIXES include + PATHS ${MPG123_SEARCH_PATHS}) + +find_library(MPG123_LIBRARY + NAMES mpg123 + PATH_SUFFIXES lib + PATHS ${MPG123_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MPG123 DEFAULT_MSG MPG123_LIBRARY MPG123_INCLUDE_DIR) + +mark_as_advanced(MPG123_INCLUDE_DIR MPG123_LIBRARY) diff --git a/extra/cmake/FindModPlug.cmake b/extra/cmake/FindModPlug.cmake new file mode 100644 index 000000000..16641d3be --- /dev/null +++ b/extra/cmake/FindModPlug.cmake @@ -0,0 +1,25 @@ +# Sets the following variables: +# +# MODPLUG_FOUND +# MODPLUG_INCLUDE_DIR +# MODPLUG_LIBRARY + +set(MODPLUG_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(MODPLUG_INCLUDE_DIR + NAMES libmodplug/modplug.h + PATH_SUFFIXES include + PATHS ${MODPLUG_SEARCH_PATHS}) + +find_library(MODPLUG_LIBRARY + NAMES modplug + PATH_SUFFIXES lib + PATHS ${MODPLUG_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(ModPlug DEFAULT_MSG MODPLUG_LIBRARY MODPLUG_INCLUDE_DIR) + +mark_as_advanced(MODPLUG_INCLUDE_DIR MODPLUG_LIBRARY) diff --git a/extra/cmake/FindSDL2.cmake b/extra/cmake/FindSDL2.cmake new file mode 100644 index 000000000..81de07ffd --- /dev/null +++ b/extra/cmake/FindSDL2.cmake @@ -0,0 +1,25 @@ +# Sets the following variables: +# +# SDL2_FOUND +# SDL2_INCLUDE_DIR +# SDL2_LIBRARY + +set(SDL2_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(SDL2_INCLUDE_DIR + NAMES SDL.h + PATH_SUFFIXES include include/SDL2 + PATHS ${SDL2_SEARCH_PATHS}) + +find_library(SDL2_LIBRARY + NAMES SDL2 + PATH_SUFFIXES lib + PATHS ${SDL2_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SDL2 DEFAULT_MSG SDL2_LIBRARY SDL2_INCLUDE_DIR) + +mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY) diff --git a/extra/cmake/FindTheora.cmake b/extra/cmake/FindTheora.cmake new file mode 100644 index 000000000..4a3804a5b --- /dev/null +++ b/extra/cmake/FindTheora.cmake @@ -0,0 +1,31 @@ +# Sets the following variables: +# +# THEORA_FOUND +# THEORA_INCLUDE_DIR +# THEORA_LIBRARY +# THEORADEC_LIBRARY + +set(THEORA_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(THEORA_INCLUDE_DIR + NAMES theora/codec.h + PATH_SUFFIXES include + PATHS ${THEORA_SEARCH_PATHS}) + +find_library(THEORA_LIBRARY + NAMES theora + PATH_SUFFIXES lib + PATHS ${THEORA_SEARCH_PATHS}) + +find_library(THEORADEC_LIBRARY + NAMES theoradec + PATH_SUFFIXES lib + PATHS ${THEORA_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Theora DEFAULT_MSG THEORA_LIBRARY THEORA_INCLUDE_DIR) + +mark_as_advanced(THEORA_INCLUDE_DIR THEORA_LIBRARY) diff --git a/extra/cmake/FindVorbis.cmake b/extra/cmake/FindVorbis.cmake new file mode 100644 index 000000000..6a263a4c8 --- /dev/null +++ b/extra/cmake/FindVorbis.cmake @@ -0,0 +1,30 @@ +# Sets the following variables: +# +# VORBIS_FOUND +# VORBIS_INCLUDE_DIR +# VORBIS_LIBRARY +# VORBISFILE_LIBRARY + +set(VORBIS_SEARCH_PATHS + /usr/local + /usr + ) + +find_path(VORBIS_INCLUDE_DIR vorbis/vorbisfile.h + PATH_SUFFIXES include + PATHS ${VORBIS_SEARCH_PATHS}) + +find_library(VORBIS_LIBRARY + NAMES vorbis + PATH_SUFFIXES lib + PATHS ${VORBIS_SEARCH_PATHS}) + +find_library(VORBISFILE_LIBRARY + NAMES vorbisfile + PATH_SUFFIXES lib + PATHS ${VORBIS_SEARCH_PATHS}) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Vorbis DEFAULT_MSG VORBIS_LIBRARY VORBISFILE_LIBRARY VORBIS_INCLUDE_DIR) + +mark_as_advanced(VORBIS_INCLUDE_DIR VORBIS_LIBRARY VORBISFILE_LIBRARY)