Skip to content
This repository has been archived by the owner on May 13, 2024. It is now read-only.

Commit

Permalink
Specify dependencies on object library targets
Browse files Browse the repository at this point in the history
The minimum CMake version was updated to 3.12 in #270. This cleans up
the build using the feature to use target_link_libraries on object
library targets that was added in CMake 3.12.

It has been tested on Linux with OpenGL. I will test it with more
settings and on more systems as the work progresses.
  • Loading branch information
JosiahWI committed Jan 20, 2024
1 parent 66786d0 commit 129edf6
Showing 1 changed file with 63 additions and 39 deletions.
102 changes: 63 additions & 39 deletions source/Irrlicht/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -297,42 +297,10 @@ elseif(NOT USE_SDL2)
endif()
endif()

set(link_includes
"${PROJECT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}"

"${ZLIB_INCLUDE_DIR}"
"${JPEG_INCLUDE_DIR}"
"${PNG_INCLUDE_DIR}"
"$<$<BOOL:${USE_SDL2}>:${SDL2_INCLUDE_DIRS}>"

${OPENGL_INCLUDE_DIR}
${OPENGLES2_INCLUDE_DIR}
${EGL_INCLUDE_DIR}

"$<$<PLATFORM_ID:Android>:${ANDROID_NDK}/sources/android/native_app_glue>"
"$<$<BOOL:${USE_X11}>:${X11_INCLUDE_DIR}>"
)

set(link_libs
"${ZLIB_LIBRARY}"
"${JPEG_LIBRARY}"
"${PNG_LIBRARY}"
"$<$<BOOL:${USE_SDL2}>:${SDL2_LIBRARIES}>"

"$<$<BOOL:${OPENGL_DIRECT_LINK}>:${OPENGL_LIBRARIES}>"
"$<$<BOOL:${OPENGLES_DIRECT_LINK}>:${OPENGLES_LIBRARY}>"
"$<$<BOOL:${OPENGLES2_DIRECT_LINK}>:${OPENGLES2_LIBRARIES}>"
${EGL_LIBRARY}

"$<$<PLATFORM_ID:Android>:-landroid -llog>"
${COCOA_LIB}
${IOKIT_LIB}
"$<$<PLATFORM_ID:Windows>:gdi32>"
"$<$<PLATFORM_ID:Windows>:winmm>"
"$<$<BOOL:${USE_X11}>:${X11_X11_LIB}>"
"$<$<BOOL:${USE_X11}>:${X11_Xi_LIB}>"
)
# These includes are needed across the whole project, so they
# are included globally so we do not have to include them for
# each new OBJECT library target.
include_directories("${PROJECT_SOURCE_DIR}/include")

# Source files

Expand Down Expand Up @@ -406,6 +374,23 @@ add_library(IRRVIDEOOBJ OBJECT
${IRRIMAGEOBJ}
)

target_link_libraries(IRRVIDEOOBJ
PUBLIC
# TODO Create imported targets if they do not already exist,
# and only link the correct one for the enabled backend.
"$<$<BOOL:${OPENGL_DIRECT_LINK}>:${OPENGL_LIBRARIES}>"
"$<$<BOOL:${OPENGLES_DIRECT_LINK}>:${OPENGLES_LIBRARY}>"
"$<$<BOOL:${OPENGLES2_DIRECT_LINK}>:${OPENGLES2_LIBRARIES}>"
"${EGL_LIBRARY}"
JPEG::JPEG
PRIVATE
PNG::PNG
)

if(USE_X11)
target_include_directories(IRRVIDEOOBJ PUBLIC "${X11_INCLUDE_DIR}")
endif()

if(USE_SDLGL)
target_sources(IRRVIDEOOBJ PRIVATE
OpenGL/Driver.cpp
Expand Down Expand Up @@ -448,6 +433,11 @@ add_library(IRRIOOBJ OBJECT
CAttributes.cpp
)

target_link_libraries(IRRIOOBJ
PRIVATE
ZLIB::ZLIB
)

add_library(IRROTHEROBJ OBJECT
CIrrDeviceSDL.cpp
CIrrDeviceLinux.cpp
Expand All @@ -459,6 +449,24 @@ add_library(IRROTHEROBJ OBJECT
os.cpp
)

if(USE_SDL2)
target_link_libraries(IRROTHEROBJ
PUBLIC
SDL2::SDL2
)
endif()

if(USE_X11)
target_include_directories(IRROTHEROBJ PUBLIC "${X11_INCLUDE_DIR}")
target_link_libraries(IRROTHEROBJ
PUBLIC
# TODO Create imported targets if they do not already
# exist.
"${X11_X11_LIB}"
"${X11_Xi_LIB}"
)
endif()

if(ENABLE_OPENGL3)
target_compile_definitions(IRROTHEROBJ PRIVATE ENABLE_OPENGL3)
endif()
Expand Down Expand Up @@ -529,11 +537,27 @@ target_include_directories(IrrlichtMt
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include/>"
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/irrlichtmt>"
PRIVATE
${link_includes}
)

target_link_libraries(IrrlichtMt PRIVATE ${link_libs})
target_link_libraries(IrrlichtMt
PRIVATE
# FIXME this will not propogate dependencies to IrrlichtMt
# dependants, but I do not want to clutter the export with
# object libraries, either.
<$BUILD_INTERFACE:IRROBJ>
<$BUILD_INTERFACE:IRROTHEROBJ>
<$BUILD_INTERFACE:IRRVIDEOOBJ>

# TODO These need to be linked to the appropriate object
# library targets. I have an MSVC build on another computer
# I can test the Windows ones with. I do not yet know how to
# test the Android and OS X ones.
"$<$<PLATFORM_ID:Android>:-landroid -llog>"
${COCOA_LIB}
${IOKIT_LIB}
"$<$<PLATFORM_ID:Windows>:gdi32>"
"$<$<PLATFORM_ID:Windows>:winmm>"
)

if(WIN32)
target_compile_definitions(IrrlichtMt INTERFACE _IRR_WINDOWS_API_) # used in _IRR_DEBUG_BREAK_IF definition in a public header
Expand Down

0 comments on commit 129edf6

Please sign in to comment.