Browse Source

Build separate love target on android too

Instead of smushing love.cpp into liblove and having an extra "codepath" for that, just build the love target as a shared library.
Bart van Strien 1 year ago
parent
commit
12f57109e1
1 changed files with 40 additions and 43 deletions
  1. 40 43
      CMakeLists.txt

+ 40 - 43
CMakeLists.txt

@@ -1993,14 +1993,6 @@ if(MSVC OR MINGW)
 	endif()
 endif()
 
-if(ANDROID)
-	# In Android, the LOVE main entrypoint needs to be compiled
-	# as shared library, so change the library name and add love.cpp
-	set(LOVE_LIB_NAME ${LOVE_EXE_NAME})
-	set(LOVE_LIB_SRC ${LOVE_LIB_SRC} src/love.cpp)
-	set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} android)
-endif()
-
 add_library(liblove SHARED ${LOVE_LIB_SRC} ${LOVE_RC})
 set_target_properties(liblove PROPERTIES
 	C_VISIBILITY_PRESET hidden
@@ -2021,44 +2013,49 @@ endif()
 #
 # love (executable)
 #
-if(NOT ANDROID)
-	add_executable(love WIN32 src/love.cpp ${LOVE_RC})
-	target_link_libraries(love liblove)
-	set_target_properties(love PROPERTIES
-		C_VISIBILITY_PRESET hidden
-		CXX_VISIBILITY_PRESET hidden
-		VISIBILITY_INLINES_HIDDEN ON
-		OUTPUT_NAME ${LOVE_EXE_NAME})
-
-	if(MSVC OR MINGW)
-		add_executable(lovec src/love.cpp ${LOVE_RC})
-		target_link_libraries(lovec liblove)
-		set_target_properties(lovec PROPERTIES
-			OUTPUT_NAME ${LOVE_CONSOLE_EXE_NAME})
-	endif()
+if(ANDROID)
+	add_library(love SHARED) # On Android, the LOVE main entrypoint needs to be compiled as shared library
+	target_link_libraries(liblove android)
+else()
+	add_executable(love WIN32)
+endif()
 
-	function(post_step_move_dll ARG_POST_TARGET ARG_TARGET_OR_FILE)
-		if(TARGET ${ARG_TARGET_OR_FILE})
-			add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
-				COMMAND ${CMAKE_COMMAND} -E copy
-				$<TARGET_FILE:${ARG_TARGET_OR_FILE}>
-				${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET_OR_FILE}>)
-		else()
-			get_filename_component(TEMP_FILENAME ${ARG_TARGET_OR_FILE} NAME)
-			add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
-				COMMAND ${CMAKE_COMMAND} -E copy
-				${ARG_TARGET_OR_FILE}
-				${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${TEMP_FILENAME})
-		endif()
-	endfunction()
+target_sources(love PRIVATE src/love.cpp ${LOVE_RC})
+target_link_libraries(love liblove)
+set_target_properties(love PROPERTIES
+	C_VISIBILITY_PRESET hidden
+	CXX_VISIBILITY_PRESET hidden
+	VISIBILITY_INLINES_HIDDEN ON
+	OUTPUT_NAME ${LOVE_EXE_NAME})
 
-	# Add post build steps to move the DLLs next to the binary. Otherwise
-	# running/debugging the binary will not work from inside VS.
-	if(LOVE_MOVE_DLLS)
-		foreach(DLL ${LOVE_MOVE_DLLS})
-			post_step_move_dll(love ${DLL})
-		endforeach()
+if(MSVC OR MINGW)
+	add_executable(lovec src/love.cpp ${LOVE_RC})
+	target_link_libraries(lovec liblove)
+	set_target_properties(lovec PROPERTIES
+		OUTPUT_NAME ${LOVE_CONSOLE_EXE_NAME})
+endif()
+
+function(post_step_move_dll ARG_POST_TARGET ARG_TARGET_OR_FILE)
+	if(TARGET ${ARG_TARGET_OR_FILE})
+		add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
+			COMMAND ${CMAKE_COMMAND} -E copy
+			$<TARGET_FILE:${ARG_TARGET_OR_FILE}>
+			${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET_OR_FILE}>)
+	else()
+		get_filename_component(TEMP_FILENAME ${ARG_TARGET_OR_FILE} NAME)
+		add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
+			COMMAND ${CMAKE_COMMAND} -E copy
+			${ARG_TARGET_OR_FILE}
+			${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${TEMP_FILENAME})
 	endif()
+endfunction()
+
+# Add post build steps to move the DLLs next to the binary. Otherwise
+# running/debugging the binary will not work from inside VS.
+if(LOVE_MOVE_DLLS)
+	foreach(DLL ${LOVE_MOVE_DLLS})
+		post_step_move_dll(love ${DLL})
+	endforeach()
 endif()
 
 if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")