Skip to content

Commit a4017c3

Browse files
committed
Add plugin interface target.
- Add rpplugin::PLUGIN_ID target for plugins. - Add config and target cmake file for plugins.
1 parent 9da5ed2 commit a4017c3

File tree

25 files changed

+1106
-414
lines changed

25 files changed

+1106
-414
lines changed

CMakeLists.txt

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Author: Younguk Kim (bluekyu)
2-
# Date : 2017-01-25
2+
# Date : 2017-05-12
33

44
cmake_minimum_required(VERSION 3.6)
55
project(render_pipeline)
@@ -26,34 +26,24 @@ add_subdirectory("${PROJECT_SOURCE_DIR}/src/rpplugins")
2626

2727
# === project specific packages ===
2828
# find spdlog
29-
find_package(spdlog REQUIRED)
29+
if(NOT TARGET spdlog::spdlog)
30+
find_package(spdlog REQUIRED)
31+
endif()
3032

3133
# find yaml-cpp
32-
find_package(yaml-cpp REQUIRED)
34+
if(NOT TARGET yaml-cpp)
35+
find_package(yaml-cpp REQUIRED)
36+
endif()
3337

3438
# find freetype
3539
find_package(FreeType REQUIRED)
3640
if(FREETYPE_FOUND)
3741
message(STATUS "freetype include path: ${FREETYPE_INCLUDE_DIRS}")
3842
endif()
39-
# ================================
40-
41-
# platform specific configure
42-
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
43-
# build type
44-
if(NOT CMAKE_BUILD_TYPE)
45-
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
46-
"Choose the type of build, options are: None Debug Release."
47-
FORCE)
48-
endif()
49-
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
50-
endif()
51-
52-
# set input files
53-
include("${PROJECT_SOURCE_DIR}/files.cmake")
5443
# ==================================================================================================
5544

5645
# === target =======================================================================================
46+
include("${PROJECT_SOURCE_DIR}/files.cmake")
5747
add_library(${PROJECT_NAME} SHARED ${render_pipeline_sources} ${render_pipeline_headers})
5848

5949
target_compile_features(${PROJECT_NAME} PUBLIC cxx_final PRIVATE cxx_auto_type)
@@ -68,7 +58,7 @@ target_include_directories(${PROJECT_NAME}
6858
$<INSTALL_INTERFACE:include>
6959
$<INSTALL_INTERFACE:share>
7060

71-
PRIVATE "${PROJECT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/src"
61+
PRIVATE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/src"
7262
${FREETYPE_INCLUDE_DIRS} ${YAML_CPP_INCLUDE_DIR}
7363
)
7464

@@ -81,13 +71,15 @@ target_link_libraries(${PROJECT_NAME}
8171
)
8272

8373
set_target_properties(${PROJECT_NAME} PROPERTIES
74+
FOLDER "render_pipeline"
8475
DEFINE_SYMBOL "RPCPP_BUILD"
8576
DEBUG_POSTFIX "-debug"
8677
RELWITHDEBINFO_POSTFIX "-reldeb"
8778
VERSION ${PROJECT_VERSION}
8879
)
8980

9081
# configure package
82+
set(PACKAGE_NAME "${PROJECT_NAME}")
9183
set(PACKAGE_VERSION_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake")
9284
set(PACKAGE_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake")
9385
set(TARGET_EXPORT_NAME "${PROJECT_NAME}-targets")
@@ -96,11 +88,17 @@ set(PACKAGE_CMAKE_INSTALL_DIR "lib/${PROJECT_NAME}/cmake")
9688
include(CMakePackageConfigHelpers)
9789
write_basic_package_version_file(${PACKAGE_VERSION_CONFIG_FILE}
9890
VERSION ${PROJECT_VERSION}
99-
COMPATIBILITY SameMajorVersion)
91+
COMPATIBILITY SameMajorVersion
92+
)
10093
configure_package_config_file("${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
10194
${PACKAGE_CONFIG_FILE}
102-
INSTALL_DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR})
103-
export(TARGETS ${PROJECT_NAME} FILE ${PROJECT_BINARY_DIR}/${TARGET_EXPORT_NAME}.cmake)
95+
INSTALL_DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR}
96+
)
97+
98+
export(TARGETS ${PROJECT_NAME}
99+
FILE ${PROJECT_BINARY_DIR}/${TARGET_EXPORT_NAME}.cmake
100+
)
101+
export(PACKAGE ${PACKAGE_NAME})
104102
# ==================================================================================================
105103

106104
# === install ======================================================================================
@@ -125,7 +123,7 @@ install(DIRECTORY "${PROJECT_SOURCE_DIR}/resources/effects" DESTINATION "share/$
125123
install(DIRECTORY "${PROJECT_SOURCE_DIR}/resources/rpcore" DESTINATION "share/${PROJECT_NAME}/")
126124

127125
install(FILES ${PACKAGE_CONFIG_FILE} ${PACKAGE_VERSION_CONFIG_FILE} DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR})
128-
install(EXPORT ${TARGET_EXPORT_NAME} DESTINATION "lib/${PROJECT_NAME}/cmake")
126+
install(EXPORT ${TARGET_EXPORT_NAME} DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR})
129127

130128
# documents
131129
if(RPCPP_BUILD_DOCUMENTS AND DOXYGEN_FOUND)

cmake/plugin_install.cmake

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1-
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "plugin")
2-
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER ${RPPLUGINS_FOLDER_NAME})
1+
install(TARGETS ${PROJECT_NAME}
2+
DESTINATION ${RPPLUGIN_INSTALL_DIR}
3+
)
4+
install(TARGETS ${RPPLUGIN_INTERFACE_TARGET}
5+
EXPORT ${TARGET_EXPORT_NAME}
6+
)
37

4-
# library
5-
set(RPPLUGINS_INSTALL_DIR "share/render_pipeline/${RPPLUGINS_FOLDER_NAME}/${PROJECT_NAME}")
6-
install(TARGETS ${PROJECT_NAME} DESTINATION "${RPPLUGINS_INSTALL_DIR}/")
7-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/resources/" DESTINATION ${RPPLUGINS_INSTALL_DIR})
8+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/resources/" DESTINATION ${RPPLUGIN_INSTALL_DIR})
89
if(EXISTS "${PROJECT_SOURCE_DIR}/include")
9-
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include" DESTINATION ${RPPLUGINS_INSTALL_DIR})
10+
install(DIRECTORY "${PROJECT_SOURCE_DIR}/include" DESTINATION ${RPPLUGIN_INSTALL_DIR})
1011
endif()
12+
13+
install(FILES ${PACKAGE_CONFIG_FILE} ${PACKAGE_VERSION_CONFIG_FILE} DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR})
14+
install(EXPORT ${TARGET_EXPORT_NAME}
15+
NAMESPACE ${TARGET_NAMESPACE}
16+
DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR}
17+
)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
@PACKAGE_INIT@
22

33
include(${CMAKE_CURRENT_LIST_DIR}/@TARGET_EXPORT_NAME@.cmake)
4-
check_required_components(render_pipeline)
4+
check_required_components(@PACKAGE_NAME@)

src/rpplugins/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# Author: Younguk Kim (bluekyu)
2-
# Date : 2016-08-02
2+
# Date : 2017-05-12
33

44
cmake_minimum_required(VERSION 3.6)
55

66
# === configure ====================================================================================
7-
# rpplugins
8-
set(RPPLUGINS_FOLDER_NAME "rpplugins")
7+
# common variable
8+
set(RPPLUGIN_CONFIG_IN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/rpplugin-config.cmake.in")
99

1010
set(RPCPP_PLUGINS "ao" "bloom" "clouds" "color_correction" "dof" "env_probes" "forward_shading"
1111
"motion_blur" "pssm" "scattering" "skin_shading" "sky_ao" "smaa" "ssr" "volumetrics" "vxgi")

src/rpplugins/ao/CMakeLists.txt

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
11
# Author: Younguk Kim (bluekyu)
2-
# Date : 2016-08-02
2+
# Date : 2017-05-12
33

44
cmake_minimum_required(VERSION 3.6)
5-
project(ao)
5+
6+
get_filename_component(RPPLUGIN_ID ${CMAKE_CURRENT_LIST_DIR} NAME)
7+
project(${RPPLUGIN_ID})
68

79
# === configure ====================================================================================
810
set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Project Grouping
911

12+
set(RPPLUGIN_INSTALL_DIR "share/render_pipeline/rpplugins/${RPPLUGIN_ID}")
13+
14+
set(PROJECT_VERSION_MAJOR "0")
15+
set(PROJECT_VERSION_MINOR "1")
16+
set(PROJECT_VERSION_PATCH "0")
17+
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
18+
1019
# === plugin specific packages ===
11-
# ================================
12-
13-
# platform specific configure
14-
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
15-
# build type
16-
if(NOT CMAKE_BUILD_TYPE)
17-
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
18-
"Choose the type of build, options are: None Debug RelWithDebInfo Release."
19-
FORCE)
20-
endif()
21-
message("${PROJECT_NAME} Build Type: ${CMAKE_BUILD_TYPE}")
22-
endif()
20+
# ==================================================================================================
2321

24-
# set input files
22+
# === target =======================================================================================
2523
set(plugin_sources
26-
"${PROJECT_SOURCE_DIR}/src/plugin.hpp"
2724
"${PROJECT_SOURCE_DIR}/src/plugin.cpp"
25+
"${PROJECT_SOURCE_DIR}/src/plugin.hpp"
26+
"${PROJECT_SOURCE_DIR}/src/ao_stage.cpp"
2827
"${PROJECT_SOURCE_DIR}/src/ao_stage.hpp"
29-
"${PROJECT_SOURCE_DIR}/src/ao_stage.cpp")
30-
# ==================================================================================================
31-
32-
# === target =======================================================================================
28+
)
3329
add_library(${PROJECT_NAME} MODULE ${plugin_sources})
3430

3531
target_compile_features(${PROJECT_NAME} PRIVATE cxx_auto_type)
@@ -40,17 +36,61 @@ else()
4036
endif()
4137

4238
target_compile_definitions(${PROJECT_NAME}
43-
PRIVATE RPCPP_PLUGIN_ID_STRING="${PROJECT_NAME}"
39+
PRIVATE RPCPP_PLUGIN_ID_STRING="${RPPLUGIN_ID}"
4440
)
4541

4642
target_include_directories(${PROJECT_NAME}
47-
PRIVATE "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}"
48-
"${CMAKE_CURRENT_SOURCE_DIR}/src"
43+
PRIVATE "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/src"
4944
)
5045

5146
target_link_libraries(${PROJECT_NAME}
5247
PRIVATE render_pipeline
5348
)
5449

50+
set_target_properties(${PROJECT_NAME} PROPERTIES
51+
FOLDER "render_pipeline/rpplugins"
52+
OUTPUT_NAME "plugin"
53+
)
54+
55+
# create plugin interface target
56+
set(RPPLUGIN_INTERFACE_TARGET ${RPPLUGIN_ID}_interface)
57+
add_library(${RPPLUGIN_INTERFACE_TARGET} INTERFACE)
58+
59+
target_include_directories(${RPPLUGIN_INTERFACE_TARGET}
60+
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
61+
$<INSTALL_INTERFACE:${RPPLUGIN_INSTALL_DIR}/include>
62+
)
63+
64+
target_link_libraries(${RPPLUGIN_INTERFACE_TARGET}
65+
INTERFACE render_pipeline
66+
)
67+
68+
# configure package
69+
set(PACKAGE_NAME "rpplugin_${RPPLUGIN_ID}")
70+
set(TARGET_NAMESPACE "rpplugin::")
71+
set(PACKAGE_VERSION_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake")
72+
set(PACKAGE_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake")
73+
set(TARGET_EXPORT_NAME "${PACKAGE_NAME}-targets")
74+
set(PACKAGE_CMAKE_INSTALL_DIR "${RPPLUGIN_INSTALL_DIR}/cmake")
75+
76+
include(CMakePackageConfigHelpers)
77+
write_basic_package_version_file(${PACKAGE_VERSION_CONFIG_FILE}
78+
VERSION ${PROJECT_VERSION}
79+
COMPATIBILITY SameMajorVersion
80+
)
81+
configure_package_config_file(${RPPLUGIN_CONFIG_IN_FILE}
82+
${PACKAGE_CONFIG_FILE}
83+
INSTALL_DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR}
84+
)
85+
86+
add_library(${TARGET_NAMESPACE}${PROJECT_NAME} ALIAS ${RPPLUGIN_INTERFACE_TARGET})
87+
export(TARGETS ${RPPLUGIN_INTERFACE_TARGET}
88+
NAMESPACE ${TARGET_NAMESPACE}
89+
FILE "${PROJECT_BINARY_DIR}/${TARGET_EXPORT_NAME}.cmake"
90+
)
91+
export(PACKAGE ${PACKAGE_NAME})
92+
# ==================================================================================================
93+
94+
# === install ======================================================================================
5595
include(plugin_install)
5696
# ==================================================================================================

src/rpplugins/bloom/CMakeLists.txt

Lines changed: 63 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,31 @@
11
# Author: Younguk Kim (bluekyu)
2-
# Date : 2016-08-02
2+
# Date : 2017-05-12
33

44
cmake_minimum_required(VERSION 3.6)
5-
project(bloom)
5+
6+
get_filename_component(RPPLUGIN_ID ${CMAKE_CURRENT_LIST_DIR} NAME)
7+
project(${RPPLUGIN_ID})
68

79
# === configure ====================================================================================
810
set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Project Grouping
911

12+
set(RPPLUGIN_INSTALL_DIR "share/render_pipeline/rpplugins/${RPPLUGIN_ID}")
13+
14+
set(PROJECT_VERSION_MAJOR "0")
15+
set(PROJECT_VERSION_MINOR "1")
16+
set(PROJECT_VERSION_PATCH "0")
17+
set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
18+
1019
# === plugin specific packages ===
11-
# ================================
12-
13-
# platform specific configure
14-
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
15-
# build type
16-
if(NOT CMAKE_BUILD_TYPE)
17-
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
18-
"Choose the type of build, options are: None Debug RelWithDebInfo Release."
19-
FORCE)
20-
endif()
21-
message("${PROJECT_NAME} Build Type: ${CMAKE_BUILD_TYPE}")
22-
endif()
20+
# ==================================================================================================
2321

24-
# set input files
22+
# === target =======================================================================================
2523
set(plugin_sources
26-
"${PROJECT_SOURCE_DIR}/src/plugin.hpp"
2724
"${PROJECT_SOURCE_DIR}/src/plugin.cpp"
25+
"${PROJECT_SOURCE_DIR}/src/plugin.hpp"
26+
"${PROJECT_SOURCE_DIR}/src/bloom_stage.cpp"
2827
"${PROJECT_SOURCE_DIR}/src/bloom_stage.hpp"
29-
"${PROJECT_SOURCE_DIR}/src/bloom_stage.cpp")
30-
# ==================================================================================================
31-
32-
# === target =======================================================================================
28+
)
3329
add_library(${PROJECT_NAME} MODULE ${plugin_sources})
3430

3531
target_compile_features(${PROJECT_NAME} PRIVATE cxx_auto_type)
@@ -40,17 +36,61 @@ else()
4036
endif()
4137

4238
target_compile_definitions(${PROJECT_NAME}
43-
PRIVATE RPCPP_PLUGIN_ID_STRING="${PROJECT_NAME}"
39+
PRIVATE RPCPP_PLUGIN_ID_STRING="${RPPLUGIN_ID}"
4440
)
4541

4642
target_include_directories(${PROJECT_NAME}
47-
PRIVATE "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}"
48-
"${CMAKE_CURRENT_SOURCE_DIR}/src"
43+
PRIVATE "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/src"
4944
)
5045

5146
target_link_libraries(${PROJECT_NAME}
5247
PRIVATE render_pipeline
5348
)
5449

50+
set_target_properties(${PROJECT_NAME} PROPERTIES
51+
FOLDER "render_pipeline/rpplugins"
52+
OUTPUT_NAME "plugin"
53+
)
54+
55+
# create plugin interface target
56+
set(RPPLUGIN_INTERFACE_TARGET ${RPPLUGIN_ID}_interface)
57+
add_library(${RPPLUGIN_INTERFACE_TARGET} INTERFACE)
58+
59+
target_include_directories(${RPPLUGIN_INTERFACE_TARGET}
60+
INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
61+
$<INSTALL_INTERFACE:${RPPLUGIN_INSTALL_DIR}/include>
62+
)
63+
64+
target_link_libraries(${RPPLUGIN_INTERFACE_TARGET}
65+
INTERFACE render_pipeline
66+
)
67+
68+
# configure package
69+
set(PACKAGE_NAME "rpplugin_${RPPLUGIN_ID}")
70+
set(TARGET_NAMESPACE "rpplugin::")
71+
set(PACKAGE_VERSION_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake")
72+
set(PACKAGE_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake")
73+
set(TARGET_EXPORT_NAME "${PACKAGE_NAME}-targets")
74+
set(PACKAGE_CMAKE_INSTALL_DIR "${RPPLUGIN_INSTALL_DIR}/cmake")
75+
76+
include(CMakePackageConfigHelpers)
77+
write_basic_package_version_file(${PACKAGE_VERSION_CONFIG_FILE}
78+
VERSION ${PROJECT_VERSION}
79+
COMPATIBILITY SameMajorVersion
80+
)
81+
configure_package_config_file(${RPPLUGIN_CONFIG_IN_FILE}
82+
${PACKAGE_CONFIG_FILE}
83+
INSTALL_DESTINATION ${PACKAGE_CMAKE_INSTALL_DIR}
84+
)
85+
86+
add_library(${TARGET_NAMESPACE}${PROJECT_NAME} ALIAS ${RPPLUGIN_INTERFACE_TARGET})
87+
export(TARGETS ${RPPLUGIN_INTERFACE_TARGET}
88+
NAMESPACE ${TARGET_NAMESPACE}
89+
FILE "${PROJECT_BINARY_DIR}/${TARGET_EXPORT_NAME}.cmake"
90+
)
91+
export(PACKAGE ${PACKAGE_NAME})
92+
# ==================================================================================================
93+
94+
# === install ======================================================================================
5595
include(plugin_install)
5696
# ==================================================================================================

0 commit comments

Comments
 (0)