From 89cffddb15a441c03be2ef22ac3bb684b6d83842 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Sat, 17 Feb 2024 11:42:14 +0100 Subject: [PATCH] Build each module as its own static library Which means everything still mostly behaves the same, except we now have cmake targets which we can manipulate, rather than a bunch of global variables. For ease of use I've matched the existing variables, so love.event is split into love_event_root and love_event_sdl, and there is a separate (pseudo) target love_event which combines them both. I have also simplified the windows-specific additions to liblove. Instead of altering the variables, they now just add to the liblove target. Unfortunately, it does mean we lose the global include directory list, so we need to add dependencies on a per-module basis. The upside is that this more accurately models the dependencies. If you remove a module, its dependencies should now automatically go unused. --- CMakeLists.txt | 523 ++++++++++++++++++++++++++++--------------------- 1 file changed, 295 insertions(+), 228 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f339789e3..80111d168 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -247,7 +247,7 @@ endfunction() # common # -set(LOVE_SRC_COMMON +add_library(love_common STATIC src/common/android.cpp src/common/android.h src/common/b64.cpp @@ -297,23 +297,27 @@ set(LOVE_SRC_COMMON src/common/Vector.h src/common/version.h ) +target_link_libraries(love_common PUBLIC + lovedep::Lua + lovedep::SDL2 +) if (APPLE) - set(LOVE_SRC_COMMON ${LOVE_SRC_COMMON} + target_sources(love_common PRIVATE src/common/macos.mm ) - set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} objc) - set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} "-framework CoreFoundation") - set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} "-framework AppKit") + target_link_libraries(love_common PUBLIC + objc + "-framework CoreFoundation" + "-framework AppKit" + ) endif() -source_group("common" FILES ${LOVE_SRC_COMMON}) - # # love.audio # -set(LOVE_SRC_MODULE_AUDIO_ROOT +add_library(love_audio_root STATIC src/modules/audio/Audio.cpp src/modules/audio/Audio.h src/modules/audio/Source.cpp @@ -331,8 +335,12 @@ set(LOVE_SRC_MODULE_AUDIO_ROOT src/modules/audio/wrap_RecordingDevice.cpp src/modules/audio/wrap_RecordingDevice.h ) +target_link_libraries(love_audio_root PUBLIC + lovedep::Lua + lovedep::OpenAL +) -set(LOVE_SRC_MODULE_AUDIO_NULL +add_library(love_audio_null STATIC src/modules/audio/null/Audio.cpp src/modules/audio/null/Audio.h src/modules/audio/null/Source.cpp @@ -341,7 +349,7 @@ set(LOVE_SRC_MODULE_AUDIO_NULL src/modules/audio/null/RecordingDevice.h ) -set(LOVE_SRC_MODULE_AUDIO_OPENAL +add_library(love_audio_openal STATIC src/modules/audio/openal/Audio.cpp src/modules/audio/openal/Audio.h src/modules/audio/openal/Pool.cpp @@ -355,22 +363,22 @@ set(LOVE_SRC_MODULE_AUDIO_OPENAL src/modules/audio/openal/Effect.cpp src/modules/audio/openal/Effect.h ) - -set(LOVE_SRC_MODULE_AUDIO - ${LOVE_SRC_MODULE_AUDIO_ROOT} - ${LOVE_SRC_MODULE_AUDIO_NULL} - ${LOVE_SRC_MODULE_AUDIO_OPENAL} +target_link_libraries(love_audio_openal PUBLIC + lovedep::OpenAL ) -source_group("modules\\audio" FILES ${LOVE_SRC_MODULE_AUDIO_ROOT}) -source_group("modules\\audio\\null" FILES ${LOVE_SRC_MODULE_AUDIO_NULL}) -source_group("modules\\audio\\openal" FILES ${LOVE_SRC_MODULE_AUDIO_OPENAL}) +add_library(love_audio INTERFACE) +target_link_libraries(love_audio INTERFACE + love_audio_root + love_audio_null + love_audio_openal +) # # love.data # -set(LOVE_SRC_MODULE_DATA +add_library(love_data STATIC src/modules/data/ByteData.cpp src/modules/data/ByteData.h src/modules/data/CompressedData.cpp @@ -396,38 +404,45 @@ set(LOVE_SRC_MODULE_DATA src/modules/data/wrap_DataView.cpp src/modules/data/wrap_DataView.h ) - -source_group("modules\\data" FILES ${LOVE_SRC_MODULE_DATA}) +target_link_libraries(love_data PUBLIC + lovedep::Lua + lovedep::Zlib +) # # love.event # -set(LOVE_SRC_MODULE_EVENT_ROOT +add_library(love_event_root STATIC src/modules/event/Event.cpp src/modules/event/Event.h src/modules/event/wrap_Event.cpp src/modules/event/wrap_Event.h ) +target_link_libraries(love_event_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_EVENT_SDL +add_library(love_event_sdl STATIC src/modules/event/sdl/Event.cpp src/modules/event/sdl/Event.h ) - -set(LOVE_SRC_MODULE_EVENT - ${LOVE_SRC_MODULE_EVENT_ROOT} - ${LOVE_SRC_MODULE_EVENT_SDL} +target_link_libraries(love_event_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\event" FILES ${LOVE_SRC_MODULE_EVENT_ROOT}) -source_group("modules\\event\\sdl" FILES ${LOVE_SRC_MODULE_EVENT_SDL}) +add_library(love_event INTERFACE) +target_link_libraries(love_event INTERFACE + love_event_root + love_event_sdl +) # # love.filesystem # -set(LOVE_SRC_MODULE_FILESYSTEM_ROOT +add_library(love_filesystem_root STATIC src/modules/filesystem/File.cpp src/modules/filesystem/File.h src/modules/filesystem/FileData.cpp @@ -445,8 +460,12 @@ set(LOVE_SRC_MODULE_FILESYSTEM_ROOT src/modules/filesystem/wrap_NativeFile.cpp src/modules/filesystem/wrap_NativeFile.h ) +target_link_libraries(love_filesystem_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_FILESYSTEM_PHYSFS +add_library(love_filesystem_physfs STATIC src/modules/filesystem/physfs/File.cpp src/modules/filesystem/physfs/File.h src/modules/filesystem/physfs/Filesystem.cpp @@ -454,20 +473,23 @@ set(LOVE_SRC_MODULE_FILESYSTEM_PHYSFS src/modules/filesystem/physfs/PhysfsIo.h src/modules/filesystem/physfs/PhysfsIo.cpp ) +if(ANDROID) + target_link_libraries(love_filesystem_physfs PUBLIC + lovedep::SDL2 + ) +endif() -set(LOVE_SRC_MODULE_FILESYSTEM - ${LOVE_SRC_MODULE_FILESYSTEM_ROOT} - ${LOVE_SRC_MODULE_FILESYSTEM_PHYSFS} +add_library(love_filesystem INTERFACE) +target_link_libraries(love_filesystem INTERFACE + love_filesystem_root + love_filesystem_physfs ) -source_group("modules\\filesystem" FILES ${LOVE_SRC_MODULE_FILESYSTEM_ROOT}) -source_group("modules\\filesystem\\physfs" FILES ${LOVE_SRC_MODULE_FILESYSTEM_PHYSFS}) - # # love.font # -set(LOVE_SRC_MODULE_FONT_ROOT +add_library(love_font_root STATIC src/modules/font/BMFontRasterizer.cpp src/modules/font/BMFontRasterizer.h src/modules/font/Font.cpp @@ -491,8 +513,12 @@ set(LOVE_SRC_MODULE_FONT_ROOT src/modules/font/wrap_Rasterizer.cpp src/modules/font/wrap_Rasterizer.h ) +target_link_libraries(love_font_root PUBLIC + lovedep::Lua + lovedep::Freetype +) -set(LOVE_SRC_MODULE_FONT_FREETYPE +add_library(love_font_freetype STATIC src/modules/font/freetype/Font.cpp src/modules/font/freetype/Font.h src/modules/font/freetype/HarfbuzzShaper.cpp @@ -500,20 +526,22 @@ set(LOVE_SRC_MODULE_FONT_FREETYPE src/modules/font/freetype/TrueTypeRasterizer.cpp src/modules/font/freetype/TrueTypeRasterizer.h ) - -set(LOVE_SRC_MODULE_FONT - ${LOVE_SRC_MODULE_FONT_ROOT} - ${LOVE_SRC_MODULE_FONT_FREETYPE} +target_link_libraries(love_font_freetype PUBLIC + lovedep::Freetype + lovedep::Harfbuzz ) -source_group("modules\\font" FILES ${LOVE_SRC_MODULE_FONT_ROOT}) -source_group("modules\\font\\freetype" FILES ${LOVE_SRC_MODULE_FONT_FREETYPE}) +add_library(love_font INTERFACE) +target_link_libraries(love_font INTERFACE + love_font_root + love_font_freetype +) # # love.graphics # -set(LOVE_SRC_MODULE_GRAPHICS_ROOT +add_library(love_graphics_root STATIC src/modules/graphics/Buffer.cpp src/modules/graphics/Buffer.h src/modules/graphics/Deprecations.cpp @@ -580,8 +608,11 @@ set(LOVE_SRC_MODULE_GRAPHICS_ROOT src/modules/graphics/wrap_Video.cpp src/modules/graphics/wrap_Video.h ) +target_link_libraries(love_graphics_root PUBLIC + lovedep::Lua +) -set(LOVE_SRC_MODULE_GRAPHICS_OPENGL +add_library(love_graphics_opengl STATIC src/modules/graphics/opengl/Buffer.cpp src/modules/graphics/opengl/Buffer.h src/modules/graphics/opengl/FenceSync.cpp @@ -601,8 +632,11 @@ set(LOVE_SRC_MODULE_GRAPHICS_OPENGL src/modules/graphics/opengl/Texture.cpp src/modules/graphics/opengl/Texture.h ) +target_link_libraries(love_graphics_opengl PUBLIC + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_GRAPHICS_VULKAN +add_library(love_graphics_vulkan STATIC src/modules/graphics/vulkan/Graphics.h src/modules/graphics/vulkan/Graphics.cpp src/modules/graphics/vulkan/GraphicsReadback.h @@ -619,23 +653,24 @@ set(LOVE_SRC_MODULE_GRAPHICS_VULKAN src/modules/graphics/vulkan/Texture.cpp src/modules/graphics/vulkan/Vulkan.h src/modules/graphics/vulkan/Vulkan.cpp - src/modules/graphics/vulkan/VulkanWrapper.h) - -set(LOVE_SRC_MODULE_GRAPHICS - ${LOVE_SRC_MODULE_GRAPHICS_ROOT} - ${LOVE_SRC_MODULE_GRAPHICS_OPENGL} - ${LOVE_SRC_MODULE_GRAPHICS_VULKAN} + src/modules/graphics/vulkan/VulkanWrapper.h +) +target_link_libraries(love_graphics_vulkan PUBLIC + lovedep::SDL2 ) -source_group("modules\\graphics" FILES ${LOVE_SRC_MODULE_GRAPHICS_ROOT}) -source_group("modules\\graphics\\opengl" FILES ${LOVE_SRC_MODULE_GRAPHICS_OPENGL}) -source_group("modules\\graphics\\vulkan" FILES ${LOVE_SRC_MODULE_GRAPHICS_VULKAN}) +add_library(love_graphics INTERFACE) +target_link_libraries(love_graphics INTERFACE + love_graphics_root + love_graphics_opengl + love_graphics_vulkan +) # # love.image # -set(LOVE_SRC_MODULE_IMAGE_ROOT +add_library(love_image_root STATIC src/modules/image/CompressedImageData.cpp src/modules/image/CompressedImageData.h src/modules/image/CompressedSlice.cpp @@ -655,8 +690,11 @@ set(LOVE_SRC_MODULE_IMAGE_ROOT src/modules/image/wrap_ImageData.cpp src/modules/image/wrap_ImageData.h ) +target_link_libraries(love_image_root PUBLIC + lovedep::Lua +) -set(LOVE_SRC_MODULE_IMAGE_MAGPIE +add_library(love_image_magpie STATIC src/modules/image/magpie/ASTCHandler.cpp src/modules/image/magpie/ASTCHandler.h src/modules/image/magpie/ddsHandler.cpp @@ -674,20 +712,21 @@ set(LOVE_SRC_MODULE_IMAGE_MAGPIE src/modules/image/magpie/STBHandler.cpp src/modules/image/magpie/STBHandler.h ) - -set(LOVE_SRC_MODULE_IMAGE - ${LOVE_SRC_MODULE_IMAGE_ROOT} - ${LOVE_SRC_MODULE_IMAGE_MAGPIE} +target_link_libraries(love_image_magpie PUBLIC + lovedep::Zlib ) -source_group("modules\\image" FILES ${LOVE_SRC_MODULE_IMAGE_ROOT}) -source_group("modules\\image\\magpie" FILES ${LOVE_SRC_MODULE_IMAGE_MAGPIE}) +add_library(love_image INTERFACE) +target_link_libraries(love_image INTERFACE + love_image_root + love_image_magpie +) # # love.joystick # -set(LOVE_SRC_MODULE_JOYSTICK_ROOT +add_library(love_joystick_root STATIC src/modules/joystick/Joystick.cpp src/modules/joystick/Joystick.h src/modules/joystick/JoystickModule.h @@ -696,51 +735,60 @@ set(LOVE_SRC_MODULE_JOYSTICK_ROOT src/modules/joystick/wrap_JoystickModule.cpp src/modules/joystick/wrap_JoystickModule.h ) +target_link_libraries(love_joystick_root PUBLIC + lovedep::Lua +) -set(LOVE_SRC_MODULE_JOYSTICK_SDL +add_library(love_joystick_sdl STATIC src/modules/joystick/sdl/Joystick.cpp src/modules/joystick/sdl/Joystick.h src/modules/joystick/sdl/JoystickModule.cpp src/modules/joystick/sdl/JoystickModule.h ) - -set(LOVE_SRC_MODULE_JOYSTICK - ${LOVE_SRC_MODULE_JOYSTICK_ROOT} - ${LOVE_SRC_MODULE_JOYSTICK_SDL} +target_link_libraries(love_joystick_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\joystick" FILES ${LOVE_SRC_MODULE_JOYSTICK_ROOT}) -source_group("modules\\joystick\\sdl" FILES ${LOVE_SRC_MODULE_JOYSTICK_SDL}) +add_library(love_joystick INTERFACE) +target_link_libraries(love_joystick INTERFACE + love_joystick_root + love_joystick_sdl +) # # love.keyboard # -set(LOVE_SRC_MODULE_KEYBOARD_ROOT +add_library(love_keyboard_root STATIC src/modules/keyboard/Keyboard.cpp src/modules/keyboard/Keyboard.h src/modules/keyboard/wrap_Keyboard.cpp src/modules/keyboard/wrap_Keyboard.h ) +target_link_libraries(love_keyboard_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_KEYBOARD_SDL +add_library(love_keyboard_sdl STATIC src/modules/keyboard/sdl/Keyboard.cpp src/modules/keyboard/sdl/Keyboard.h ) - -set(LOVE_SRC_MODULE_KEYBOARD - ${LOVE_SRC_MODULE_KEYBOARD_ROOT} - ${LOVE_SRC_MODULE_KEYBOARD_SDL} +target_link_libraries(love_keyboard_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\keyboard" FILES ${LOVE_SRC_MODULE_KEYBOARD_ROOT}) -source_group("modules\\keyboard\\sdl" FILES ${LOVE_SRC_MODULE_KEYBOARD_SDL}) +add_library(love_keyboard INTERFACE) +target_link_libraries(love_keyboard INTERFACE + love_keyboard_root + love_keyboard_sdl +) # # love.math # -set(LOVE_SRC_MODULE_MATH +add_library(love_math STATIC src/modules/math/BezierCurve.cpp src/modules/math/BezierCurve.h src/modules/math/MathModule.cpp @@ -758,24 +806,15 @@ set(LOVE_SRC_MODULE_MATH src/modules/math/wrap_Transform.cpp src/modules/math/wrap_Transform.h ) - -source_group("modules\\math" FILES ${LOVE_SRC_MODULE_MATH}) - -# -# love (module) -# -set(LOVE_SRC_MODULE_LOVE - src/modules/love/love.cpp - src/modules/love/love.h +target_link_libraries(love_math PUBLIC + lovedep::Lua ) -source_group("modules\\love" FILES ${LOVE_SRC_MODULE_LOVE}) - # # love.mouse # -set(LOVE_SRC_MODULE_MOUSE_ROOT +add_library(love_mouse_root STATIC src/modules/mouse/Cursor.cpp src/modules/mouse/Cursor.h src/modules/mouse/Mouse.h @@ -784,27 +823,32 @@ set(LOVE_SRC_MODULE_MOUSE_ROOT src/modules/mouse/wrap_Mouse.cpp src/modules/mouse/wrap_Mouse.h ) +target_link_libraries(love_mouse_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_MOUSE_SDL +add_library(love_mouse_sdl STATIC src/modules/mouse/sdl/Cursor.cpp src/modules/mouse/sdl/Cursor.h src/modules/mouse/sdl/Mouse.cpp src/modules/mouse/sdl/Mouse.h ) - -set(LOVE_SRC_MODULE_MOUSE - ${LOVE_SRC_MODULE_MOUSE_ROOT} - ${LOVE_SRC_MODULE_MOUSE_SDL} +target_link_libraries(love_mouse_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\mouse" FILES ${LOVE_SRC_MODULE_MOUSE_ROOT}) -source_group("modules\\mouse\\sdl" FILES ${LOVE_SRC_MODULE_MOUSE_SDL}) +add_library(love_mouse INTERFACE) +target_link_libraries(love_mouse INTERFACE + love_mouse_root + love_mouse_sdl +) # # love.physics # -set(LOVE_SRC_MODULE_PHYSICS_ROOT +add_library(love_physics_root STATIC src/modules/physics/Body.cpp src/modules/physics/Body.h src/modules/physics/Joint.cpp @@ -813,7 +857,7 @@ set(LOVE_SRC_MODULE_PHYSICS_ROOT src/modules/physics/Shape.h ) -set(LOVE_SRC_MODULE_PHYSICS_BOX2D +add_library(love_physics_box2d STATIC src/modules/physics/box2d/Body.cpp src/modules/physics/box2d/Body.h src/modules/physics/box2d/ChainShape.cpp @@ -899,44 +943,50 @@ set(LOVE_SRC_MODULE_PHYSICS_BOX2D src/modules/physics/box2d/wrap_World.cpp src/modules/physics/box2d/wrap_World.h ) - -set(LOVE_SRC_MODULE_PHYSICS - ${LOVE_SRC_MODULE_PHYSICS_ROOT} - ${LOVE_SRC_MODULE_PHYSICS_BOX2D} +target_link_libraries(love_physics_box2d PUBLIC + lovedep::Lua ) -source_group("modules\\physics" FILES ${LOVE_SRC_MODULE_PHYSICS_ROOT}) -source_group("modules\\physics\\box2d" FILES ${LOVE_SRC_MODULE_PHYSICS_BOX2D}) +add_library(love_physics INTERFACE) +target_link_libraries(love_physics INTERFACE + love_physics_root + love_physics_box2d +) # # love.sensor # -set(LOVE_SRC_MODULE_SENSOR_ROOT +add_library(love_sensor_root STATIC src/modules/sensor/Sensor.cpp src/modules/sensor/Sensor.h src/modules/sensor/wrap_Sensor.cpp src/modules/sensor/wrap_Sensor.h ) +target_link_libraries(love_sensor_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_SENSOR_SDL +add_library(love_sensor_sdl STATIC src/modules/sensor/sdl/Sensor.cpp src/modules/sensor/sdl/Sensor.h ) - -set(LOVE_SRC_MODULE_SENSOR - ${LOVE_SRC_MODULE_SENSOR_ROOT} - ${LOVE_SRC_MODULE_SENSOR_SDL} +target_link_libraries(love_sensor_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\sensor" FILES ${LOVE_SRC_MODULE_SENSOR_ROOT}) -source_group("modules\\sensor\\sdl" FILES ${LOVE_SRC_MODULE_SENSOR_SDL}) +add_library(love_sensor INTERFACE) +target_link_libraries(love_sensor INTERFACE + love_sensor_root + love_sensor_sdl +) # # love.sound # -set(LOVE_SRC_MODULE_SOUND_ROOT +add_library(love_sound_root STATIC src/modules/sound/Decoder.cpp src/modules/sound/Decoder.h src/modules/sound/Sound.cpp @@ -950,8 +1000,11 @@ set(LOVE_SRC_MODULE_SOUND_ROOT src/modules/sound/wrap_SoundData.cpp src/modules/sound/wrap_SoundData.h ) +target_link_libraries(love_sound_root PUBLIC + lovedep::Lua +) -set(LOVE_SRC_MODULE_SOUND_LULLABY +add_library(love_sound_lullaby STATIC src/modules/sound/lullaby/FLACDecoder.cpp src/modules/sound/lullaby/FLACDecoder.h src/modules/sound/lullaby/ModPlugDecoder.cpp @@ -965,44 +1018,52 @@ set(LOVE_SRC_MODULE_SOUND_LULLABY src/modules/sound/lullaby/WaveDecoder.cpp src/modules/sound/lullaby/WaveDecoder.h ) - -set(LOVE_SRC_MODULE_SOUND - ${LOVE_SRC_MODULE_SOUND_ROOT} - ${LOVE_SRC_MODULE_SOUND_LULLABY} +target_link_libraries(love_sound_lullaby PUBLIC + lovedep::Modplug + lovedep::Vorbis + lovedep::Ogg ) -source_group("modules\\sound" FILES ${LOVE_SRC_MODULE_SOUND_ROOT}) -source_group("modules\\sound\\lullaby" FILES ${LOVE_SRC_MODULE_SOUND_LULLABY}) +add_library(love_sound INTERFACE) +target_link_libraries(love_sound INTERFACE + love_sound_root + love_sound_lullaby +) # # love.system # -set(LOVE_SRC_MODULE_SYSTEM_ROOT +add_library(love_system_root STATIC src/modules/system/System.cpp src/modules/system/System.h src/modules/system/wrap_System.cpp src/modules/system/wrap_System.h ) +target_link_libraries(love_system_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_SYSTEM_SDL +add_library(love_system_sdl STATIC src/modules/system/sdl/System.cpp src/modules/system/sdl/System.h ) - -set(LOVE_SRC_MODULE_SYSTEM - ${LOVE_SRC_MODULE_SYSTEM_ROOT} - ${LOVE_SRC_MODULE_SYSTEM_SDL} +target_link_libraries(love_system_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\system" FILES ${LOVE_SRC_MODULE_SYSTEM_ROOT}) -source_group("modules\\system\\sdl" FILES ${LOVE_SRC_MODULE_SYSTEM_SDL}) +add_library(love_system INTERFACE) +target_link_libraries(love_system INTERFACE + love_system_root + love_system_sdl +) # # love.thread # -set(LOVE_SRC_MODULE_THREAD_ROOT +add_library(love_thread_root STATIC src/modules/thread/Channel.cpp src/modules/thread/Channel.h src/modules/thread/LuaThread.cpp @@ -1019,63 +1080,72 @@ set(LOVE_SRC_MODULE_THREAD_ROOT src/modules/thread/wrap_ThreadModule.cpp src/modules/thread/wrap_ThreadModule.h ) +target_link_libraries(love_thread_root PUBLIC + lovedep::Lua +) -set(LOVE_SRC_MODULE_THREAD_SDL +add_library(love_thread_sdl STATIC src/modules/thread/sdl/Thread.cpp src/modules/thread/sdl/Thread.h src/modules/thread/sdl/threads.cpp src/modules/thread/sdl/threads.h ) - -set(LOVE_SRC_MODULE_THREAD - ${LOVE_SRC_MODULE_THREAD_ROOT} - ${LOVE_SRC_MODULE_THREAD_SDL} +target_link_libraries(love_thread_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\thread" FILES ${LOVE_SRC_MODULE_THREAD_ROOT}) -source_group("modules\\thread\\sdl" FILES ${LOVE_SRC_MODULE_THREAD_SDL}) +add_library(love_thread INTERFACE) +target_link_libraries(love_thread INTERFACE + love_thread_root + love_thread_sdl +) # # love.timer # -set(LOVE_SRC_MODULE_TIMER +add_library(love_timer STATIC src/modules/timer/Timer.cpp src/modules/timer/Timer.h src/modules/timer/wrap_Timer.cpp src/modules/timer/wrap_Timer.h ) - -source_group("modules\\timer" FILES ${LOVE_SRC_MODULE_TIMER}) +target_link_libraries(love_timer PUBLIC + lovedep::Lua +) # # love.touch # -set(LOVE_SRC_MODULE_TOUCH_ROOT +add_library(love_touch_root STATIC src/modules/touch/Touch.h src/modules/touch/wrap_Touch.cpp src/modules/touch/wrap_Touch.h ) +target_link_libraries(love_touch_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_TOUCH_SDL +add_library(love_touch_sdl STATIC src/modules/touch/sdl/Touch.cpp src/modules/touch/sdl/Touch.h ) - -set(LOVE_SRC_MODULE_TOUCH - ${LOVE_SRC_MODULE_TOUCH_ROOT} - ${LOVE_SRC_MODULE_TOUCH_SDL} +target_link_libraries(love_touch_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\touch" FILES ${LOVE_SRC_MODULE_TOUCH_ROOT}) -source_group("modules\\touch\\sdl" FILES ${LOVE_SRC_MODULE_TOUCH_SDL}) - +add_library(love_touch INTERFACE) +target_link_libraries(love_touch INTERFACE + love_touch_root + love_touch_sdl +) # # love.video # -set(LOVE_SRC_MODULE_VIDEO_ROOT +add_library(love_video_root STATIC src/modules/video/Video.h src/modules/video/VideoStream.cpp src/modules/video/VideoStream.h @@ -1084,8 +1154,13 @@ set(LOVE_SRC_MODULE_VIDEO_ROOT src/modules/video/wrap_VideoStream.cpp src/modules/video/wrap_VideoStream.h ) +target_link_libraries(love_video_root PUBLIC + lovedep::Lua + lovedep::Theora + lovedep::Ogg +) -set(LOVE_SRC_MODULE_VIDEO_THEORA +add_library(love_video_theora STATIC src/modules/video/theora/Video.cpp src/modules/video/theora/Video.h src/modules/video/theora/OggDemuxer.cpp @@ -1093,38 +1168,45 @@ set(LOVE_SRC_MODULE_VIDEO_THEORA src/modules/video/theora/TheoraVideoStream.cpp src/modules/video/theora/TheoraVideoStream.h ) - -set(LOVE_SRC_MODULE_VIDEO - ${LOVE_SRC_MODULE_VIDEO_ROOT} - ${LOVE_SRC_MODULE_VIDEO_THEORA} +target_link_libraries(love_video_theora PUBLIC + lovedep::Theora + lovedep::Ogg ) -source_group("modules\\video" FILES ${LOVE_SRC_MODULE_VIDEO_ROOT}) -source_group("modules\\video\\theora" FILES ${LOVE_SRC_MODULE_VIDEO_THEORA}) +add_library(love_video INTERFACE) +target_link_libraries(love_video INTERFACE + love_video_root + love_video_theora +) # # love.window # -set(LOVE_SRC_MODULE_WINDOW_ROOT +add_library(love_window_root STATIC src/modules/window/Window.cpp src/modules/window/Window.h src/modules/window/wrap_Window.cpp src/modules/window/wrap_Window.h ) +target_link_libraries(love_window_root PUBLIC + lovedep::Lua + lovedep::SDL2 +) -set(LOVE_SRC_MODULE_WINDOW_SDL +add_library(love_window_sdl STATIC src/modules/window/sdl/Window.cpp src/modules/window/sdl/Window.h ) - -set(LOVE_SRC_MODULE_WINDOW - ${LOVE_SRC_MODULE_WINDOW_ROOT} - ${LOVE_SRC_MODULE_WINDOW_SDL} +target_link_libraries(love_window_sdl PUBLIC + lovedep::SDL2 ) -source_group("modules\\window" FILES ${LOVE_SRC_MODULE_WINDOW_ROOT}) -source_group("modules\\window\\sdl" FILES ${LOVE_SRC_MODULE_WINDOW_SDL}) +add_library(love_window INTERFACE) +target_link_libraries(love_window INTERFACE + love_window_root + love_window_sdl +) ################################### # Third-party libraries @@ -1745,32 +1827,6 @@ add_library(love_3p_xxhash # # liblove # -set(LOVE_LIB_SRC - ${LOVE_SRC_COMMON} - # Modules - ${LOVE_SRC_MODULE_AUDIO} - ${LOVE_SRC_MODULE_DATA} - ${LOVE_SRC_MODULE_EVENT} - ${LOVE_SRC_MODULE_FILESYSTEM} - ${LOVE_SRC_MODULE_FONT} - ${LOVE_SRC_MODULE_GRAPHICS} - ${LOVE_SRC_MODULE_IMAGE} - ${LOVE_SRC_MODULE_JOYSTICK} - ${LOVE_SRC_MODULE_KEYBOARD} - ${LOVE_SRC_MODULE_LOVE} - ${LOVE_SRC_MODULE_MATH} - ${LOVE_SRC_MODULE_MOUSE} - ${LOVE_SRC_MODULE_PHYSICS} - ${LOVE_SRC_MODULE_SENSOR} - ${LOVE_SRC_MODULE_SOUND} - ${LOVE_SRC_MODULE_SYSTEM} - ${LOVE_SRC_MODULE_THREAD} - ${LOVE_SRC_MODULE_TIMER} - ${LOVE_SRC_MODULE_TOUCH} - ${LOVE_SRC_MODULE_VIDEO} - ${LOVE_SRC_MODULE_WINDOW} -) - include_directories( BEFORE src @@ -1781,45 +1837,43 @@ include_directories( link_directories(${LOVE_LINK_DIRS}) -set(LOVE_RC) - -if(MSVC OR MINGW) - set(LOVE_LINK_LIBRARIES ${LOVE_LINK_LIBRARIES} - ws2_32${WIN32_LIB_EXT} - winmm${WIN32_LIB_EXT} - dwmapi${WIN32_LIB_EXT} - ) - - set(LOVE_RC - extra/windows/love.rc - extra/windows/love.ico - ) - - if(MINGW) - # UTF-16 flags passed to windres. windres invokes gcc as preprocessor - # -> gcc outputs utf8, so windres must read-in codepage 65001 (utf8) - set(CMAKE_RC_FLAGS ${CMAKE_RC_FLAGS} "-c 65001 --preprocessor-arg=-finput-charset=UTF-16LE") - endif() +if(MINGW) + # UTF-16 flags passed to windres. windres invokes gcc as preprocessor + # -> gcc outputs utf8, so windres must read-in codepage 65001 (utf8) + set(CMAKE_RC_FLAGS ${CMAKE_RC_FLAGS} "-c 65001 --preprocessor-arg=-finput-charset=UTF-16LE") endif() -add_library(liblove SHARED ${LOVE_LIB_SRC} ${LOVE_RC}) +add_library(liblove SHARED + src/modules/love/love.cpp + src/modules/love/love.h +) 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 - lovedep::SDL2 - lovedep::Freetype - lovedep::Harfbuzz - lovedep::OpenAL - lovedep::Modplug - lovedep::Theora - lovedep::Vorbis - lovedep::Lua - lovedep::Ogg - lovedep::Zlib - lovedep::Lua + love_common + love_audio + love_data + love_event + love_filesystem + love_font + love_graphics + love_image + love_joystick + love_keyboard + love_math + love_mouse + love_physics + love_sensor + love_sound + love_system + love_thread + love_timer + love_touch + love_video + love_window love_3p_box2d love_3p_ddsparse love_3p_enet @@ -1846,6 +1900,19 @@ if(MSVC) set_target_properties(liblove PROPERTIES DEBUG_OUTPUT_NAME "love" PDB_NAME "liblove" IMPORT_PREFIX "lib") endif() +if(MSVC OR MINGW) + target_link_libraries(liblove + ws2_32${WIN32_LIB_EXT} + winmm${WIN32_LIB_EXT} + dwmapi${WIN32_LIB_EXT} + ) + + target_sources(liblove PUBLIC + extra/windows/love.rc + extra/windows/love.ico + ) +endif() + # # love (executable) # @@ -1856,7 +1923,7 @@ else() add_executable(love WIN32) endif() -target_sources(love PRIVATE src/love.cpp ${LOVE_RC}) +target_sources(love PRIVATE src/love.cpp) target_link_libraries(love liblove) set_target_properties(love PROPERTIES C_VISIBILITY_PRESET hidden @@ -1865,7 +1932,7 @@ set_target_properties(love PROPERTIES OUTPUT_NAME ${LOVE_EXE_NAME}) if(MSVC OR MINGW) - add_executable(lovec src/love.cpp ${LOVE_RC}) + add_executable(lovec src/love.cpp) target_link_libraries(lovec liblove) set_target_properties(lovec PROPERTIES OUTPUT_NAME ${LOVE_CONSOLE_EXE_NAME})