Browse Source

Use custom targets for dependencies

Not the most beautiful system, but provides us with a simple way to
unify megasource and non-megasource builds.

Also replaces LOVE_LUA_LIBRARY, since we now have a target to name.
Bart van Strien 1 year ago
parent
commit
032e30b8ef
1 changed files with 77 additions and 89 deletions
  1. 77 89
      CMakeLists.txt

+ 77 - 89
CMakeLists.txt

@@ -98,16 +98,22 @@ endif()
 
 
 message(STATUS "Target platform: ${LOVE_TARGET_PLATFORM}")
 message(STATUS "Target platform: ${LOVE_TARGET_PLATFORM}")
 
 
+add_library(lovedep::SDL2 INTERFACE IMPORTED)
+add_library(lovedep::Freetype INTERFACE IMPORTED)
+add_library(lovedep::Harfbuzz INTERFACE IMPORTED)
+add_library(lovedep::OpenAL INTERFACE IMPORTED)
+add_library(lovedep::Modplug INTERFACE IMPORTED)
+add_library(lovedep::Theora INTERFACE IMPORTED)
+add_library(lovedep::Vorbis INTERFACE IMPORTED)
+add_library(lovedep::Ogg INTERFACE IMPORTED)
+add_library(lovedep::Zlib INTERFACE IMPORTED)
+add_library(lovedep::Lua INTERFACE IMPORTED)
+
 if(MEGA)
 if(MEGA)
 	# LOVE_MSVC_DLLS contains runtime DLLs that should be bundled with the love
 	# LOVE_MSVC_DLLS contains runtime DLLs that should be bundled with the love
 	# binary (in e.g. the installer). Example: msvcp140.dll.
 	# binary (in e.g. the installer). Example: msvcp140.dll.
 	set(LOVE_MSVC_DLLS ${MEGA_MSVC_DLLS})
 	set(LOVE_MSVC_DLLS ${MEGA_MSVC_DLLS})
 
 
-	# LOVE_INCLUDE_DIRS contains the search directories for #include. It's mostly
-	# not needed for MEGA builds, since almost all the libraries (except LuaJIT)
-	# are CMake targets, causing include paths to be added automatically.
-	set(LOVE_INCLUDE_DIRS)
-
 	if(APPLE)
 	if(APPLE)
 		# Some files do #include <SDL2/SDL.h>, but building with megasource
 		# Some files do #include <SDL2/SDL.h>, but building with megasource
 		# requires #include <SDL.h>.
 		# requires #include <SDL.h>.
@@ -118,20 +124,6 @@ if(MEGA)
 	# pull those libraries in for linkage because we link with SDL2.
 	# pull those libraries in for linkage because we link with SDL2.
 	set(LOVE_LINK_DIRS ${SDL_LINK_DIR})
 	set(LOVE_LINK_DIRS ${SDL_LINK_DIR})
 
 
-	set(LOVE_LINK_LIBRARIES
-		${MEGA_FREETYPE}
-		${MEGA_HARFBUZZ}
-		${MEGA_LIBOGG}
-		${MEGA_LIBVORBISFILE}
-		${MEGA_LIBVORBIS}
-		${MEGA_LIBTHEORA}
-		${MEGA_MODPLUG}
-		${MEGA_OPENAL}
-		${MEGA_SDL2MAIN}
-		${MEGA_SDL2}
-		${MEGA_ZLIB}
-	)
-
 	# These DLLs are moved next to the love binary in a post-build step to
 	# These DLLs are moved next to the love binary in a post-build step to
 	# love runnable from inside Visual Studio.
 	# love runnable from inside Visual Studio.
 	#
 	#
@@ -151,36 +143,33 @@ if(MEGA)
 		set(LOVE_EXTRA_DLLS)
 		set(LOVE_EXTRA_DLLS)
 	endif()
 	endif()
 
 
+	target_link_libraries(lovedep::SDL2 INTERFACE ${MEGA_SDL2} ${MEGA_SDL2MAIN})
+	target_link_libraries(lovedep::Freetype INTERFACE ${MEGA_FREETYPE})
+	target_link_libraries(lovedep::Harfbuzz INTERFACE ${MEGA_HARFBUZZ})
+	target_link_libraries(lovedep::OpenAL INTERFACE ${MEGA_OPENAL})
+	target_link_libraries(lovedep::Modplug INTERFACE ${MEGA_MODPLUG})
+	target_link_libraries(lovedep::Theora INTERFACE ${MEGA_LIBTHEORA})
+	target_link_libraries(lovedep::Vorbis INTERFACE ${MEGA_LIBVORBIS} ${MEGA_LIBVORBISFILE})
+	target_link_libraries(lovedep::Ogg INTERFACE ${MEGA_LIBOGG})
+	target_link_libraries(lovedep::Zlib INTERFACE ${MEGA_ZLIB})
+
 	if(LOVE_JIT)
 	if(LOVE_JIT)
-		set(LOVE_LUA_LIBRARY ${MEGA_LUAJIT_LIB})
+		target_include_directories(lovedep::Lua INTERFACE ${MEGA_LUAJIT_INCLUDE})
+		target_link_libraries(lovedep::Lua INTERFACE ${MEGA_LUAJIT_LIB})
 		set(LOVE_EXTRA_DLLS ${LOVE_EXTRA_DLLS} ${MEGA_LUAJIT_DLL})
 		set(LOVE_EXTRA_DLLS ${LOVE_EXTRA_DLLS} ${MEGA_LUAJIT_DLL})
 		set(LOVE_EXTRA_DEPENDECIES luajit)
 		set(LOVE_EXTRA_DEPENDECIES luajit)
-
-		set(LOVE_INCLUDE_DIRS
-			${LOVE_INCLUDE_DIRS}
-			${MEGA_LUAJIT_INCLUDE}
-		)
-		set(LOVE_LINK_LIBRARIES
-			${LOVE_LINK_LIBRARIES}
-			${LOVE_LUA_LIBRARY}
-		)
 		set(LOVE_MOVE_DLLS
 		set(LOVE_MOVE_DLLS
 			${LOVE_MOVE_DLLS}
 			${LOVE_MOVE_DLLS}
 			${MEGA_LUAJIT_DLL}
 			${MEGA_LUAJIT_DLL}
 		)
 		)
 	else()
 	else()
-		set(LOVE_LUA_LIBRARY ${MEGA_LUA51})
-
-		set(LOVE_LINK_LIBRARIES
-			${LOVE_LINK_LIBRARIES}
-			${LOVE_LUA_LIBRARY}
-		)
+		# MEGA_LUA51 is a CMake target, so includes are handled
+		# automatically.
+		target_link_libraries(lovedep::Lua INTERFACE ${MEGA_LUA51})
 		set(LOVE_MOVE_DLLS
 		set(LOVE_MOVE_DLLS
 			${LOVE_MOVE_DLLS}
 			${LOVE_MOVE_DLLS}
-			${LOVE_LUA_LIBRARY}
+			${MEGA_LUA51}
 		)
 		)
-		# MEGA_LUA51 is a CMake target, so includes are handled
-		# automatically.
 	endif()
 	endif()
 else()
 else()
 	if(MSVC OR ANDROID)
 	if(MSVC OR ANDROID)
@@ -190,64 +179,54 @@ Please see https://github.com/love2d/megasource
 ")
 ")
 	endif()
 	endif()
 
 
+	# required for enet
+	add_definitions(-D HAS_SOCKLEN_T)
+
+	find_package(SDL2 2.0.9 REQUIRED CONFIG COMPONENTS SDL2main)
+	target_include_directories(lovedep::SDL2 INTERFACE ${SDL2_INCLUDE_DIRS})
+	target_link_libraries(lovedep::SDL2 INTERFACE ${SDL2_LIBRARIES})
+
 	find_package(Freetype REQUIRED)
 	find_package(Freetype REQUIRED)
+	target_include_directories(lovedep::Freetype INTERFACE ${FREETYPE_INCLUDE_DIRS})
+	target_link_libraries(lovedep::Freetype INTERFACE ${FREETYPE_LIBRARY})
+
 	find_package(Harfbuzz REQUIRED)
 	find_package(Harfbuzz REQUIRED)
-	find_package(ModPlug REQUIRED)
+	target_include_directories(lovedep::Harfbuzz INTERFACE ${HARFBUZZ_INCLUDE_DIR})
+	target_link_libraries(lovedep::Harfbuzz INTERFACE ${HARFBUZZ_LIBRARY})
+
 	find_package(OpenAL REQUIRED)
 	find_package(OpenAL REQUIRED)
-	find_package(SDL2 2.0.9 REQUIRED CONFIG COMPONENTS SDL2main)
+	target_include_directories(lovedep::OpenAL INTERFACE ${OPENAL_INCLUDE_DIR})
+	target_link_libraries(lovedep::OpenAL INTERFACE ${OPENAL_LIBRARY})
+
+	find_package(ModPlug REQUIRED)
+	target_include_directories(lovedep::Modplug INTERFACE ${MODPLUG_INCLUDE_DIR})
+	target_link_libraries(lovedep::Modplug INTERFACE ${MODPLUG_LIBRARY})
+
 	find_package(Theora REQUIRED)
 	find_package(Theora REQUIRED)
-	find_package(Vorbis REQUIRED)
-	find_package(ZLIB REQUIRED)
-	find_package(Ogg REQUIRED)
+	target_include_directories(lovedep::Theora INTERFACE ${THEORA_INCLUDE_DIR})
+	target_link_libraries(lovedep::Theora INTERFACE ${THEORA_LIBRARY} ${THEORADEC_LIBRARY})
 
 
-	# required for enet
-	add_definitions(-D HAS_SOCKLEN_T)
+	find_package(Vorbis REQUIRED)
+	target_include_directories(lovedep::Vorbis INTERFACE ${VORBIS_INCLUDE_DIR})
+	target_link_libraries(lovedep::Vorbis INTERFACE ${VORBISFILE_LIBRARY})
 
 
-	set(LOVE_INCLUDE_DIRS
-		${SDL2_INCLUDE_DIRS}
-		${FREETYPE_INCLUDE_DIRS}
-		${HARFBUZZ_INCLUDE_DIR}
-		${VORBIS_INCLUDE_DIR}
-		${OPENAL_INCLUDE_DIR}
-		${ZLIB_INCLUDE_DIRS}
-		${MODPLUG_INCLUDE_DIR}
-		${OGG_INCLUDE_DIR}
-		${THEORA_INCLUDE_DIR}
-	)
+	find_package(Ogg REQUIRED)
+	target_include_directories(lovedep::Ogg INTERFACE ${OGG_INCLUDE_DIR})
+	target_link_libraries(lovedep::Ogg INTERFACE ${OGG_LIBRARY})
 
 
-	set(LOVE_LINK_LIBRARIES
-		${SDL2_LIBRARIES}
-		${FREETYPE_LIBRARY}
-		${HARFBUZZ_LIBRARY}
-		${OPENAL_LIBRARY}
-		${MODPLUG_LIBRARY}
-		${THEORA_LIBRARY}
-		${THEORADEC_LIBRARY}
-		${VORBISFILE_LIBRARY}
-		${LOVE_LUA_LIBRARY}
-		${OGG_LIBRARY}
-		${ZLIB_LIBRARY}
-	)
+	find_package(ZLIB REQUIRED)
+	target_include_directories(lovedep::Zlib INTERFACE ${ZLIB_INCLUDE_DIRS})
+	target_link_libraries(lovedep::Zlib INTERFACE ${ZLIB_LIBRARY})
 
 
 	if(LOVE_JIT)
 	if(LOVE_JIT)
 		find_package(LuaJIT REQUIRED)
 		find_package(LuaJIT REQUIRED)
-		set(LOVE_LUA_LIBRARY ${LUAJIT_LIBRARY})
-		set(LOVE_LUA_INCLUDE_DIR ${LUAJIT_INCLUDE_DIR})
+		target_include_directories(lovedep::Lua INTERFACE ${LUAJIT_INCLUDE_DIR})
+		target_link_libraries(lovedep::Lua INTERFACE ${LUAJIT_LIBRARY})
 	else()
 	else()
 		find_package(Lua51 REQUIRED)
 		find_package(Lua51 REQUIRED)
-		set(LOVE_LUA_LIBRARY ${LUA_LIBRARY})
-		set(LOVE_LUA_INCLUDE_DIR ${LUA_INCLUDE_DIR})
+		target_include_directories(lovedep::Lua INTERFACE ${LUA_INCLUDE_DIR})
+		target_link_libraries(lovedep::Lua INTERFACE ${LUA_LIBRARY})
 	endif()
 	endif()
-
-	set(LOVE_INCLUDE_DIRS
-		${LOVE_INCLUDE_DIRS}
-		${LOVE_LUA_INCLUDE_DIR}
-	)
-	set(LOVE_LINK_LIBRARIES
-		${LOVE_LINK_LIBRARIES}
-		${LOVE_LUA_LIBRARY}
-	)
-
 endif()
 endif()
 
 
 ###
 ###
@@ -1268,7 +1247,7 @@ add_library(love_3p_enet
 	src/libraries/enet/libenet/include/enet/win32.h
 	src/libraries/enet/libenet/include/enet/win32.h
 )
 )
 love_disable_warnings(love_3p_enet)
 love_disable_warnings(love_3p_enet)
-target_link_libraries(love_3p_enet ${LOVE_LUA_LIBRARY})
+target_link_libraries(love_3p_enet lovedep::Lua)
 target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include)
 target_include_directories(love_3p_enet PUBLIC src/libraries/enet/libenet/include)
 if(MINGW)
 if(MINGW)
 	target_link_libraries(love_3p_enet winmm.a)
 	target_link_libraries(love_3p_enet winmm.a)
@@ -1464,7 +1443,7 @@ add_library(love_3p_luasocket
 	src/libraries/luasocket/libluasocket/unixstream.c
 	src/libraries/luasocket/libluasocket/unixstream.c
 	src/libraries/luasocket/libluasocket/unixstream.h
 	src/libraries/luasocket/libluasocket/unixstream.h
 )
 )
-target_link_libraries(love_3p_luasocket ${LOVE_LUA_LIBRARY})
+target_link_libraries(love_3p_luasocket lovedep::Lua)
 love_disable_warnings(love_3p_luasocket)
 love_disable_warnings(love_3p_luasocket)
 
 
 if(MSVC OR MINGW)
 if(MSVC OR MINGW)
@@ -1495,7 +1474,7 @@ add_library(love_3p_lua53
 	src/libraries/lua53/lutf8lib.c
 	src/libraries/lua53/lutf8lib.c
 	src/libraries/lua53/lutf8lib.h
 	src/libraries/lua53/lutf8lib.h
 )
 )
-target_link_libraries(love_3p_lua53 ${LOVE_LUA_LIBRARY})
+target_link_libraries(love_3p_lua53 lovedep::Lua)
 
 
 #
 #
 # Lua HTTPS
 # Lua HTTPS
@@ -1527,7 +1506,7 @@ add_library(love_3p_luahttps
 	src/libraries/luahttps/src/windows/WinINetClient.cpp
 	src/libraries/luahttps/src/windows/WinINetClient.cpp
 	src/libraries/luahttps/src/windows/WinINetClient.h
 	src/libraries/luahttps/src/windows/WinINetClient.h
 )
 )
-target_link_libraries(love_3p_luahttps ${LOVE_LUA_LIBRARY})
+target_link_libraries(love_3p_luahttps lovedep::Lua)
 
 
 if (APPLE)
 if (APPLE)
 	target_sources(love_3p_luahttps PRIVATE
 	target_sources(love_3p_luahttps PRIVATE
@@ -1798,7 +1777,6 @@ include_directories(
 	src/libraries
 	src/libraries
 	src/libraries/box2D
 	src/libraries/box2D
 	src/modules
 	src/modules
-	${LOVE_INCLUDE_DIRS}
 )
 )
 
 
 link_directories(${LOVE_LINK_DIRS})
 link_directories(${LOVE_LINK_DIRS})
@@ -1831,7 +1809,17 @@ set_target_properties(liblove PROPERTIES
 	VISIBILITY_INLINES_HIDDEN ON
 	VISIBILITY_INLINES_HIDDEN ON
 	LIBRARY_OUTPUT_NAME "${LOVE_LIB_NAME}")
 	LIBRARY_OUTPUT_NAME "${LOVE_LIB_NAME}")
 target_link_libraries(liblove
 target_link_libraries(liblove
-	${LOVE_LINK_LIBRARIES}
+	lovedep::SDL2
+	lovedep::Freetype
+	lovedep::Harfbuzz
+	lovedep::OpenAL
+	lovedep::Modplug
+	lovedep::Theora
+	lovedep::Vorbis
+	lovedep::Lua
+	lovedep::Ogg
+	lovedep::Zlib
+	lovedep::Lua
 	love_3p_box2d
 	love_3p_box2d
 	love_3p_ddsparse
 	love_3p_ddsparse
 	love_3p_enet
 	love_3p_enet