-
Notifications
You must be signed in to change notification settings - Fork 501
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
build: rework how dependencies are linked
This is a big rework of how dependencies are handled internally. All the calls to CMake functions changing directory-wide properties that were previously used to link to external and internal dependencies have been replaced with their "target_" counterparts. This makes it possible to express more clearly the relationships between different targets and should also make the build script more robust in general. In doing this, I've also made it possible to link to system libraries if so desired; the versioned calls to find_package() will make sure that the found dependencies are compatible with the ones required by Cemu, and will abort the build otherwise. Cemu's internal targets are deeply interconnected, making it hard to fully benefit from a target-based approach. Nonetheless, I did my best to mark PUBLIC dependencies as such, for example when an internal target like CemuGui exposes a dependency as part of its API, i.e. it includes a third party header in one of its public headers. This will significantly help with improving the build experience on Linux, thus helping a bit with the resolution of #1.
- Loading branch information
Showing
18 changed files
with
354 additions
and
88 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it> | ||
# SPDX-License-Identifier: ISC | ||
|
||
find_package(PkgConfig) | ||
|
||
if (PKG_CONFIG_FOUND) | ||
pkg_search_module(zarchive IMPORTED_TARGET GLOBAL zarchive) | ||
if (zarchive_FOUND) | ||
add_library(ZArchive::zarchive ALIAS PkgConfig::zarchive) | ||
endif() | ||
endif() | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(ZArchive | ||
REQUIRED_VARS | ||
zarchive_LINK_LIBRARIES | ||
zarchive_FOUND | ||
VERSION_VAR | ||
zarchive_VERSION | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it> | ||
# SPDX-License-Identifier: ISC | ||
|
||
include(FindPackageHandleStandardArgs) | ||
|
||
find_package(imgui CONFIG) | ||
if (imgui_FOUND) | ||
# Use upstream imguiConfig.cmake if possible | ||
find_package_handle_standard_args(imgui CONFIG_MODE) | ||
else() | ||
# Fallback to pkg-config otherwise | ||
find_package(PkgConfig) | ||
if (PKG_CONFIG_FOUND) | ||
pkg_search_module(imgui IMPORTED_TARGET GLOBAL imgui) | ||
if (imgui_FOUND) | ||
add_library(imgui::imgui ALIAS PkgConfig::imgui) | ||
endif() | ||
endif() | ||
|
||
find_package_handle_standard_args(imgui | ||
REQUIRED_VARS | ||
imgui_LINK_LIBRARIES | ||
imgui_FOUND | ||
VERSION_VAR | ||
imgui_VERSION | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it> | ||
# SPDX-License-Identifier: ISC | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package(wxWidgets CONFIG COMPONENTS ${wxWidgets_FIND_COMPONENTS}) | ||
|
||
if (wxWidgets_FOUND) | ||
# Use upstream wxWidgetsConfig.cmake if possible | ||
find_package_handle_standard_args(wxWidgets CONFIG_MODE) | ||
else() | ||
# Fall back to CMake's FindwxWidgets | ||
# Temporarily unset CMAKE_MODULE_PATH to avoid calling the current find | ||
# module recursively | ||
set(_tmp_module_path "${CMAKE_MODULE_PATH}") | ||
set(CMAKE_MODULE_PATH "") | ||
|
||
find_package(wxWidgets MODULE QUIET COMPONENTS ${wxWidgets_FIND_COMPONENTS}) | ||
|
||
set(CMAKE_MODULE_PATH "${_tmp_module_path}") | ||
unset(_tmp_module_path) | ||
|
||
if (wxWidgets_FOUND) | ||
add_library(wx::base IMPORTED INTERFACE) | ||
target_include_directories(wx::base INTERFACE ${wxWidgets_INCLUDE_DIRS}) | ||
target_link_libraries(wx::base INTERFACE ${wxWidgets_LIBRARIES}) | ||
target_link_directories(wx::base INTERFACE ${wxWidgets_LIBRARY_DIRS}) | ||
target_compile_definitions(wx::base INTERFACE ${wxWidgets_DEFINITIONS}) | ||
target_compile_options(wx::base INTERFACE ${wxWidgets_CXX_FLAGS}) | ||
|
||
# FindwxWidgets sets everything into a single set of variables, so it is | ||
# impossible to tell what libraries are required for what component. | ||
# To be compatible with wxWidgetsConfig, we create an alias for each | ||
# component so that the user can still use target_link_libraries(wx::gl) | ||
foreach(component ${wxWidgets_FIND_COMPONENTS}) | ||
if (NOT component STREQUAL "base") | ||
# don't alias base to itself | ||
add_library(wx::${component} ALIAS wx::base) | ||
endif() | ||
endforeach() | ||
endif() | ||
|
||
find_package_handle_standard_args(wxWidgets | ||
REQUIRED_VARS | ||
wxWidgets_LIBRARIES | ||
wxWidgets_FOUND | ||
VERSION_VAR | ||
wxWidgets_VERSION_STRING | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it> | ||
# SPDX-License-Identifier: ISC | ||
|
||
include(FindPackageHandleStandardArgs) | ||
|
||
find_package(zstd CONFIG) | ||
if (zstd_FOUND) | ||
# Use upstream zstdConfig.cmake if possible | ||
if (NOT TARGET zstd::zstd) | ||
if (TARGET zstd::libzstd_static) | ||
add_library(zstd::zstd ALIAS zstd::libzstd_static) | ||
elseif (TARGET zstd::libzstd_shared) | ||
add_library(zstd::zstd ALIAS zstd::libzstd_shared) | ||
endif() | ||
endif() | ||
find_package_handle_standard_args(zstd CONFIG_MODE) | ||
else() | ||
# Fallback to pkg-config otherwise | ||
find_package(PkgConfig) | ||
if (PKG_CONFIG_FOUND) | ||
pkg_search_module(libzstd IMPORTED_TARGET GLOBAL libzstd) | ||
if (libzstd_FOUND) | ||
add_library(zstd::zstd ALIAS PkgConfig::libzstd) | ||
endif() | ||
endif() | ||
|
||
find_package_handle_standard_args(zstd | ||
REQUIRED_VARS | ||
libzstd_LINK_LIBRARIES | ||
libzstd_FOUND | ||
VERSION_VAR libzstd_VERSION | ||
) | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.