Skip to content

Commit

Permalink
Merge pull request #2051 from learn-more/vs_grouping
Browse files Browse the repository at this point in the history
Group liblove and lovedep projects in Visual Studio
  • Loading branch information
slime73 authored Jun 20, 2024
2 parents 8b37337 + ce173dd commit 8ceae23
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
20 changes: 19 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.")
Expand All @@ -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)

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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")
Expand Down
33 changes: 33 additions & 0 deletions extra/cmake/LoveMacros.cmake
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit 8ceae23

Please sign in to comment.