Browse Source

Use fixed cmake target names and set OUTPUT_NAME instead

That means we can still change the target name, while having consistent names throughout the file.
And while I'm at it, deal with the version number in the library name for linux in the same code path.
Also upgrade the variables to cache variables, so you can easily change the names. This was previously impossible because they were target names.
Bart van Strien 1 year ago
parent
commit
fa5566e7d4
1 changed files with 33 additions and 26 deletions
  1. 33 26
      CMakeLists.txt

+ 33 - 26
CMakeLists.txt

@@ -27,14 +27,9 @@ cmake_minimum_required(VERSION 3.18)
 
 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 17)
+set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) # Needed for shared libs on Linux. (-fPIC).
+set(CMAKE_CXX_STANDARD 17)
 
 if(APPLE)
 	message(WARNING "CMake is not an officially supported build system for love on Apple platforms.")
@@ -65,10 +60,16 @@ set(LOVE_VERSION_STR "${LOVE_VERSION_MAJOR}.${LOVE_VERSION_MINOR}")
 
 message(STATUS "Version: ${LOVE_VERSION_STR}")
 
-if(MSVC OR MINGW)
-	set(LOVE_CONSOLE_EXE_NAME lovec)
+set(LOVE_EXE_NAME love CACHE STRING "The name of the executable, usually 'love'")
+
+set(LOVE_DEFAULT_LIB_NAME liblove)
+if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+	set(LOVE_DEFAULT_LIB_NAME "${LOVE_EXE_NAME}-${LOVE_VERSION_STR}")
 endif()
 
+set(LOVE_LIB_NAME ${LOVE_DEFAULT_LIB_NAME} CACHE STRING "The name of the lua library, usually 'liblove' or 'love'")
+set(LOVE_CONSOLE_EXE_NAME "${LOVE_EXE_NAME}c" CACHE STRING "The name of the console version of the executable, usually 'lovec'")
+
 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 	set(LOVE_X64 TRUE)
 	set(LOVE_TARGET_PLATFORM x64)
@@ -2000,34 +2001,40 @@ if(ANDROID)
 	set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} android)
 endif()
 
-add_library(${LOVE_LIB_NAME} SHARED ${LOVE_LIB_SRC} ${LOVE_RC})
-set_target_properties(${LOVE_LIB_NAME} PROPERTIES C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON)
-target_link_libraries(${LOVE_LIB_NAME} ${LOVE_LINK_LIBRARIES} ${LOVE_3P})
-
-if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
-	set_target_properties(${LOVE_LIB_NAME} PROPERTIES LIBRARY_OUTPUT_NAME "${LOVE_EXE_NAME}-${LOVE_VERSION_STR}")
-endif()
+add_library(liblove SHARED ${LOVE_LIB_SRC} ${LOVE_RC})
+set_target_properties(liblove PROPERTIES
+	C_VISIBILITY_PRESET hidden
+	CXX_VISIBILITY_PRESET hidden
+	VISIBILITY_INLINES_HIDDEN ON
+	LIBRARY_OUTPUT_NAME "${LOVE_LIB_NAME}")
+target_link_libraries(liblove ${LOVE_LINK_LIBRARIES} ${LOVE_3P})
 
 if(LOVE_EXTRA_DEPENDECIES)
-	add_dependencies(${LOVE_LIB_NAME} ${LOVE_EXTRA_DEPENDECIES})
+	add_dependencies(liblove ${LOVE_EXTRA_DEPENDECIES})
 endif()
 
 if(MSVC)
-	set_target_properties(${LOVE_LIB_NAME} PROPERTIES RELEASE_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
-	set_target_properties(${LOVE_LIB_NAME} PROPERTIES DEBUG_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
+	set_target_properties(liblove PROPERTIES RELEASE_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
+	set_target_properties(liblove PROPERTIES DEBUG_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib")
 endif()
 
 #
 # love (executable)
 #
 if(NOT ANDROID)
-	add_executable(${LOVE_EXE_NAME} WIN32 src/love.cpp ${LOVE_RC})
-	target_link_libraries(${LOVE_EXE_NAME} ${LOVE_LIB_NAME})
-	set_target_properties(${LOVE_EXE_NAME} PROPERTIES C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN ON)
+	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(${LOVE_CONSOLE_EXE_NAME} src/love.cpp ${LOVE_RC})
-		target_link_libraries(${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME})
+		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)
@@ -2058,7 +2065,7 @@ if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
 	###################################
 	# CPack
 	###################################
-	install(TARGETS ${LOVE_EXE_NAME} ${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME} RUNTIME DESTINATION .)
+	install(TARGETS love lovec liblove RUNTIME DESTINATION .)
 
 	# Our install script (and NSIS) doesn't fully support Windows ARM64 yet.
 	if(MEGA_ARM64)
@@ -2180,7 +2187,7 @@ elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
 
 	configure_file(platform/unix/love.desktop.in love.desktop @ONLY)
 
-	install(TARGETS ${LOVE_EXE_NAME} ${LOVE_LIB_NAME})
+	install(TARGETS love liblove)
 	install(FILES platform/unix/love.6
 			DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
 			RENAME love.1)