Browse Source

Make CMake build functional on Linux.

At least on Ubuntu.
rude 9 years ago
parent
commit
7922c44d27

+ 75 - 3
CMakeLists.txt

@@ -23,13 +23,17 @@ if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_BINARY_DIR})
 	message(FATAL_ERROR "Prevented in-tree build.")
 	message(FATAL_ERROR "Prevented in-tree build.")
 endif()
 endif()
 
 
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 3.1)
 
 
 project(love)
 project(love)
 
 
 set(LOVE_EXE_NAME love)
 set(LOVE_EXE_NAME love)
 set(LOVE_LIB_NAME liblove)
 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)
 set (CMAKE_CXX_STANDARD 11)
 
 
 if(MSVC)
 if(MSVC)
@@ -157,19 +161,87 @@ if(MEGA)
 		# automatically.
 		# automatically.
 	endif()
 	endif()
 else()
 else()
-	message(FATAL_ERROR "
+	if(MSVC)
+		message(FATAL_ERROR "
 It is currently only possible to build with megasource on Windows.
 It is currently only possible to build with megasource on Windows.
 Please see http://bitbucket.org/rude/megasource
 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()
 endif()
 
 
 ###
 ###
 ### No Megasource-specific stuff beyond this point!
 ### 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)
 function(disable_warnings ARG_TARGET)
 	get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS)
 	get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS)
-	set(NEW_FLAGS -W0)
+	set(NEW_FLAGS ${DISABLE_WARNING_FLAG})
 	if(OLD_FLAGS)
 	if(OLD_FLAGS)
 		set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}")
 		set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}")
 	endif()
 	endif()

+ 25 - 0
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)

+ 25 - 0
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)

+ 25 - 0
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)

+ 25 - 0
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)

+ 31 - 0
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)

+ 30 - 0
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)