Merge pull request #2051 from learn-more/vs_grouping

Group liblove and lovedep projects in Visual Studio
This commit is contained in:
Sasha Szpakowski
2024-06-20 18:38:10 -03:00
committed by GitHub
2 changed files with 52 additions and 1 deletions
+19 -1
View File
@@ -30,6 +30,7 @@ project(love)
set(CMAKE_MODULE_PATH "${love_SOURCE_DIR}/extra/cmake" ${CMAKE_MODULE_PATH})
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) # Needed for shared libs on Linux. (-fPIC).
set(CMAKE_CXX_STANDARD 17)
set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Allow grouping projects in Visual Studio
if(APPLE)
message(WARNING "CMake is not an officially supported build system for love on Apple platforms.")
@@ -42,6 +43,8 @@ if(MINGW)
message(WARNING "Please see https://github.com/love2d/megasource")
endif()
include(LoveMacros)
# Extract version.h contents.
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/version.h LOVE_VERSION_FILE_CONTENTS)
@@ -1915,7 +1918,7 @@ set_target_properties(liblove PROPERTIES
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
LIBRARY_OUTPUT_NAME "${LOVE_LIB_NAME}")
target_link_libraries(liblove
set(LIBLOVE_DEPENDENCIES
love_common
love_audio
love_data
@@ -1937,6 +1940,8 @@ target_link_libraries(liblove
love_touch
love_video
love_window
)
set(LIBLOVE_LIBRARIES
love_3p_box2d
love_3p_ddsparse
love_3p_enet
@@ -1953,11 +1958,24 @@ target_link_libraries(liblove
love_3p_wuff
love_3p_xxhash
)
target_link_libraries(liblove ${LIBLOVE_DEPENDENCIES} ${LIBLOVE_LIBRARIES})
if(LOVE_EXTRA_DEPENDECIES)
add_dependencies(liblove ${LOVE_EXTRA_DEPENDECIES})
endif()
#
# Group projects in Visual Studio
#
love_group_projects(NAME "liblove" NESTED TARGETS ${LIBLOVE_DEPENDENCIES})
love_group_projects(NAME "liblove/libraries" NESTED TARGETS ${LIBLOVE_LIBRARIES})
love_group_projects(NAME "liblove" TARGETS liblove ${LOVE_EXTRA_DEPENDECIES})
love_group_projects(NAME "lovedep" TARGETS lovedep::SDL2 lovedep::Freetype lovedep::Harfbuzz lovedep::OpenAL lovedep::Modplug lovedep::Theora lovedep::Vorbis lovedep::Ogg lovedep::Zlib lovedep::Lua)
love_group_projects(NAME "lovedep" TARGETS lua51 alcommon al-excommon harfbuzz-subset zlib)
if(MSVC)
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")
+33
View File
@@ -0,0 +1,33 @@
# Group all related stuff in folders in Visual Studio
function(love_group_projects)
set(options NESTED)
set(oneValueArgs NAME)
set(multiValueArgs TARGETS)
cmake_parse_arguments(LOVE_GROUP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
foreach(TARGET_NAME ${LOVE_GROUP_TARGETS})
if (TARGET ${TARGET_NAME})
get_target_property(TARGET_TYPE ${TARGET_NAME} TYPE)
# If this is an interface target, walk the children
if (${TARGET_TYPE} STREQUAL "INTERFACE_LIBRARY")
get_target_property(TARGET_LIBS ${TARGET_NAME} INTERFACE_LINK_LIBRARIES)
foreach(TARGET_LIB ${TARGET_LIBS})
# Is this a target? (Could also be a .lib file)
if (TARGET ${TARGET_LIB})
# Do we want to nest per-project?
if (LOVE_GROUP_NESTED)
set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}/${TARGET_NAME}")
else()
set_target_properties(${TARGET_LIB} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
endif()
endif()
endforeach()
else()
# This is no interface library, so group it under the root 'NAME' node
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "${LOVE_GROUP_NAME}")
endif()
endif()
endforeach()
endfunction()