[Build] Share wx-related targets configuration
Breaking the main wx target down to multiple libraries had the side effect that many build options were not properly applied to libraries. This fixes the issue by having a common configuration function in CMake to share most of the configuration between all of the wx-related targets.
This commit is contained in:
parent
55c1477d69
commit
a48625855b
|
@ -179,13 +179,17 @@ if(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg")
|
||||||
set(wxWidgets_DIR "${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/share/wxwidgets")
|
set(wxWidgets_DIR "${VCPKG_ROOT}/installed/${VCPKG_TARGET_TRIPLET}/share/wxwidgets")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(ENABLE_OPENGL TRUE)
|
||||||
find_package(wxWidgets COMPONENTS xrc xml html adv net core base gl ${wx_find_extra})
|
find_package(wxWidgets COMPONENTS xrc xml html adv net core base gl ${wx_find_extra})
|
||||||
|
|
||||||
if(NOT wxWidgets_FOUND)
|
if(NOT wxWidgets_FOUND)
|
||||||
find_package(wxWidgets COMPONENTS xrc xml html adv net core base ${wx_find_extra} REQUIRED)
|
find_package(wxWidgets COMPONENTS xrc xml html adv net core base ${wx_find_extra} REQUIRED)
|
||||||
target_compile_definitions(visualboyadvance-m PRIVATE NO_OGL)
|
set(ENABLE_OPENGL FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Find OpenAL (required).
|
||||||
|
find_package(OpenAL REQUIRED)
|
||||||
|
|
||||||
# Workaround of static liblzma not being found on MSYS2.
|
# Workaround of static liblzma not being found on MSYS2.
|
||||||
if(VBAM_STATIC AND MSYS)
|
if(VBAM_STATIC AND MSYS)
|
||||||
unset(cleaned_up_wx_libs)
|
unset(cleaned_up_wx_libs)
|
||||||
|
@ -207,25 +211,101 @@ foreach(DEF ${wxWidgets_DEFINITIONS})
|
||||||
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D${DEF}")
|
list(APPEND CMAKE_REQUIRED_DEFINITIONS "-D${DEF}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
function(configure_wx_deps target)
|
# Configure common settings for wx-based targets, like linking, include
|
||||||
|
# directories, compile options, and definitions.
|
||||||
|
function(configure_wx_target target)
|
||||||
get_target_property(target_type ${target} TYPE)
|
get_target_property(target_type ${target} TYPE)
|
||||||
if(target_type STREQUAL "EXECUTABLE")
|
if(target_type STREQUAL "EXECUTABLE")
|
||||||
target_link_libraries(${target} ${wxWidgets_LIBRARIES})
|
set(target_is_executable TRUE)
|
||||||
target_include_directories(${target} PRIVATE ${wxWidgets_INCLUDE_DIRS})
|
|
||||||
target_compile_options(${target} PRIVATE ${wxWidgets_CXX_FLAGS})
|
|
||||||
target_compile_definitions(${target} PRIVATE ${wxWidgets_DEFINITIONS})
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
|
||||||
target_compile_definitions(${target} PRIVATE ${wxWidgets_DEFINITIONS_DEBUG})
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
target_link_libraries(${target} PUBLIC ${wxWidgets_LIBRARIES})
|
set(target_is_executable FALSE)
|
||||||
target_include_directories(${target} PUBLIC ${wxWidgets_INCLUDE_DIRS})
|
|
||||||
target_compile_options(${target} PUBLIC ${wxWidgets_CXX_FLAGS})
|
|
||||||
target_compile_definitions(${target} PUBLIC ${wxWidgets_DEFINITIONS})
|
|
||||||
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
|
||||||
target_compile_definitions(${target} PUBLIC ${wxWidgets_DEFINITIONS_DEBUG})
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
|
||||||
|
function(_add_link_libraries)
|
||||||
|
if(${target_is_executable})
|
||||||
|
target_link_libraries(${target} ${ARGN})
|
||||||
|
else()
|
||||||
|
target_link_libraries(${target} PUBLIC ${ARGN})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(_add_include_directories)
|
||||||
|
if(${target_is_executable})
|
||||||
|
target_include_directories(${target} PRIVATE ${ARGN})
|
||||||
|
else()
|
||||||
|
target_include_directories(${target} PUBLIC ${ARGN})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(_add_compile_options)
|
||||||
|
if(${target_is_executable})
|
||||||
|
target_compile_options(${target} PRIVATE ${ARGN})
|
||||||
|
else()
|
||||||
|
target_compile_options(${target} PUBLIC ${ARGN})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(_add_compile_definitions)
|
||||||
|
if(${target_is_executable})
|
||||||
|
target_compile_definitions(${target} PRIVATE ${ARGN})
|
||||||
|
else()
|
||||||
|
target_compile_definitions(${target} PUBLIC ${ARGN})
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Nonstd.
|
||||||
|
_add_link_libraries(nonstd-lib)
|
||||||
|
_add_include_directories(${NONSTD_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# wxWidgets.
|
||||||
|
_add_link_libraries(${wxWidgets_LIBRARIES})
|
||||||
|
_add_include_directories(${wxWidgets_INCLUDE_DIRS})
|
||||||
|
_add_compile_options(${wxWidgets_CXX_FLAGS})
|
||||||
|
_add_compile_definitions(${wxWidgets_DEFINITIONS})
|
||||||
|
if(CMAKE_BUILD_TYPE MATCHES "^(Debug|RelWithDebInfo)$")
|
||||||
|
_add_compile_definitions(${wxWidgets_DEFINITIONS_DEBUG})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# OpenAL.
|
||||||
|
if(OPENAL_STATIC)
|
||||||
|
_add_compile_definitions(AL_LIBTYPE_STATIC)
|
||||||
|
endif()
|
||||||
|
_add_include_directories(${OPENAL_INCLUDE_DIR})
|
||||||
|
_add_link_libraries(${OPENAL_LIBRARY})
|
||||||
|
|
||||||
|
# XAudio2.
|
||||||
|
if(ENABLE_XAUDIO2)
|
||||||
|
_add_compile_definitions(VBAM_ENABLE_XAUDIO2)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# FAudio.
|
||||||
|
if(ENABLE_FAUDIO)
|
||||||
|
_add_compile_definitions(VBAM_ENABLE_FAUDIO)
|
||||||
|
if(MSVC)
|
||||||
|
_add_link_libraries(FAudio::FAudio)
|
||||||
|
else()
|
||||||
|
_add_link_libraries(FAudio)
|
||||||
|
if(WIN32)
|
||||||
|
_add_link_libraries(dxguid uuid winmm ole32 advapi32 user32 mfplat mfreadwrite mfuuid propsys)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Direct3D.
|
||||||
|
if(NOT ENABLE_DIRECT3D)
|
||||||
|
_add_compile_definitions(NO_D3D)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SDL2.
|
||||||
|
_add_link_libraries(${VBAM_SDL2_LIBS})
|
||||||
|
|
||||||
|
# OpenGL.
|
||||||
|
if(ENABLE_OPENGL)
|
||||||
|
_add_link_libraries(${OPENGL_LIBRARIES})
|
||||||
|
else()
|
||||||
|
_add_compile_definitions(NO_OGL)
|
||||||
|
endif()
|
||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Sub-projects.
|
# Sub-projects.
|
||||||
|
@ -242,11 +322,10 @@ add_executable(
|
||||||
)
|
)
|
||||||
|
|
||||||
target_sources(visualboyadvance-m PRIVATE ${VBAM_WX_COMMON} ${VBAM_ICON_PATH})
|
target_sources(visualboyadvance-m PRIVATE ${VBAM_WX_COMMON} ${VBAM_ICON_PATH})
|
||||||
target_include_directories(visualboyadvance-m PRIVATE ${NONSTD_INCLUDE_DIR} ${SDL2_INCLUDE_DIRS})
|
target_include_directories(visualboyadvance-m PRIVATE ${SDL2_INCLUDE_DIRS})
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
visualboyadvance-m
|
visualboyadvance-m
|
||||||
nonstd-lib
|
|
||||||
vbam-core
|
vbam-core
|
||||||
vbam-components-draw-text
|
vbam-components-draw-text
|
||||||
vbam-components-filters
|
vbam-components-filters
|
||||||
|
@ -254,8 +333,6 @@ target_link_libraries(
|
||||||
vbam-components-filters-interframe
|
vbam-components-filters-interframe
|
||||||
vbam-components-user-config
|
vbam-components-user-config
|
||||||
vbam-wx-config
|
vbam-wx-config
|
||||||
${OPENGL_LIBRARIES}
|
|
||||||
${VBAM_SDL2_LIBS}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# adjust link command when making a static binary for gcc
|
# adjust link command when making a static binary for gcc
|
||||||
|
@ -362,40 +439,17 @@ if(CMAKE_COMPILER_IS_GNUCXX AND VBAM_STATIC)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# OpenAL.
|
|
||||||
find_package(OpenAL REQUIRED)
|
|
||||||
if(OPENAL_STATIC)
|
|
||||||
target_compile_definitions(visualboyadvance-m PRIVATE AL_LIBTYPE_STATIC)
|
|
||||||
endif()
|
|
||||||
target_include_directories(visualboyadvance-m PRIVATE ${OPENAL_INCLUDE_DIR})
|
|
||||||
target_link_libraries(visualboyadvance-m ${OPENAL_LIBRARY})
|
|
||||||
|
|
||||||
# XAudio2.
|
# XAudio2.
|
||||||
if(ENABLE_XAUDIO2)
|
if(ENABLE_XAUDIO2)
|
||||||
target_sources(visualboyadvance-m PRIVATE audio/internal/xaudio2.cpp)
|
target_sources(visualboyadvance-m PRIVATE audio/internal/xaudio2.cpp)
|
||||||
target_compile_definitions(visualboyadvance-m PRIVATE VBAM_ENABLE_XAUDIO2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Direct3D.
|
|
||||||
if(NOT ENABLE_DIRECT3D)
|
|
||||||
target_compile_definitions(visualboyadvance-m PRIVATE NO_D3D)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# FAudio.
|
# FAudio.
|
||||||
if(ENABLE_FAUDIO)
|
if(ENABLE_FAUDIO)
|
||||||
target_sources(visualboyadvance-m PRIVATE audio/internal/faudio.cpp)
|
target_sources(visualboyadvance-m PRIVATE audio/internal/faudio.cpp)
|
||||||
if(MSVC)
|
|
||||||
target_link_libraries(visualboyadvance-m FAudio::FAudio)
|
|
||||||
else()
|
|
||||||
target_link_libraries(visualboyadvance-m FAudio)
|
|
||||||
if(WIN32)
|
|
||||||
target_link_libraries(visualboyadvance-m dxguid uuid winmm ole32 advapi32 user32 mfplat mfreadwrite mfuuid propsys)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
target_compile_definitions(visualboyadvance-m PRIVATE VBAM_ENABLE_FAUDIO)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_wx_deps(visualboyadvance-m)
|
configure_wx_target(visualboyadvance-m)
|
||||||
|
|
||||||
# we make some direct gtk/gdk calls on linux and such
|
# we make some direct gtk/gdk calls on linux and such
|
||||||
# so need to link the gtk that wx was built with
|
# so need to link the gtk that wx was built with
|
||||||
|
|
|
@ -67,8 +67,7 @@ target_link_libraries(vbam-wx-config
|
||||||
vbam-core
|
vbam-core
|
||||||
)
|
)
|
||||||
|
|
||||||
configure_wx_deps(vbam-wx-config)
|
configure_wx_target(vbam-wx-config)
|
||||||
target_include_directories(vbam-wx-config PUBLIC ${NONSTD_INCLUDE_DIR})
|
|
||||||
|
|
||||||
if (BUILD_TESTING)
|
if (BUILD_TESTING)
|
||||||
add_executable(vbam-wx-config-tests
|
add_executable(vbam-wx-config-tests
|
||||||
|
@ -85,6 +84,7 @@ if (BUILD_TESTING)
|
||||||
GTest::gtest_main
|
GTest::gtest_main
|
||||||
)
|
)
|
||||||
|
|
||||||
|
configure_wx_target(vbam-wx-config-tests)
|
||||||
if (NOT CMAKE_CROSSCOMPILING)
|
if (NOT CMAKE_CROSSCOMPILING)
|
||||||
gtest_discover_tests(vbam-wx-config-tests)
|
gtest_discover_tests(vbam-wx-config-tests)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -12,4 +12,4 @@ target_sources(vbam-wx-fake-opts
|
||||||
fake_opts.cpp
|
fake_opts.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
configure_wx_deps(vbam-wx-fake-opts)
|
configure_wx_target(vbam-wx-fake-opts)
|
||||||
|
|
Loading…
Reference in New Issue