Skip to content

Commit dfa341b

Browse files
hchunhuilotem
authored andcommitted
feat(CMakeList.txt): add plugin build support (#257)
* feat(CMakeList.txt): add plugin build support * chore(CMakeLists.txt): rename macro RIME_EXTRA_MODULES * refactor(plugins/CMakeLists.txt): rename variable plugin_modules * fix: do not embed the list of plugin modules in "extra" group when BUILD_MERGED_PLUGINS=OFF
1 parent 316a659 commit dfa341b

File tree

5 files changed

+56
-8
lines changed

5 files changed

+56
-8
lines changed

CMakeLists.txt

+10
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ set(rime_soversion 1)
1010
add_definitions(-DRIME_VERSION="${rime_version}")
1111

1212
option(BUILD_SHARED_LIBS "Build Rime as shared library" ON)
13+
option(BUILD_MERGED_PLUGINS "Merge plugins into one Rime library" ON)
1314
option(BUILD_STATIC "Build with dependencies as static libraries" OFF)
1415
option(BUILD_DATA "Build data for Rime" OFF)
1516
option(BUILD_TEST "Build and run tests" ON)
@@ -187,6 +188,15 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|DragonFly")
187188
endif()
188189
endif()
189190

191+
add_subdirectory(plugins)
192+
message(STATUS "rime_plugins_libs: ${rime_plugins_deps}")
193+
message(STATUS "rime_plugins_modules: ${rime_plugins_modules}")
194+
set(list "")
195+
foreach(mod ${rime_plugins_modules})
196+
set(list "${list},Q(${mod})")
197+
endforeach()
198+
add_definitions(-DRIME_EXTRA_MODULES=${list})
199+
190200
if(BUILD_SHARED_LIBS)
191201
add_definitions(-DRIME_BUILD_SHARED_LIBS)
192202
set(rime_library rime)

Makefile.xcode

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ release:
1010
cmake --build xbuild --config Release
1111

1212
debug:
13-
cmake . -Bxdebug -GXcode -DBUILD_STATIC=ON -DBUILD_SEPARATE_LIBS=ON
13+
cmake . -Bxdebug -GXcode -DBUILD_STATIC=ON
1414
cmake --build xdebug --config Debug
1515

1616
clean:

plugins/CMakeLists.txt

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
set(RIME_SOURCE_DIR ${PROJECT_SOURCE_DIR})
2+
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
3+
4+
unset(plugins_objs)
5+
unset(plugins_deps)
6+
unset(plugins_modules)
7+
file(GLOB plugin_files "*")
8+
foreach(file ${plugin_files})
9+
if (IS_DIRECTORY ${file})
10+
message(STATUS "Found plugin: ${file}")
11+
unset(plugin_name)
12+
unset(plugin_objs)
13+
unset(plugin_deps)
14+
unset(plugin_modules)
15+
add_subdirectory(${file})
16+
if(BUILD_MERGED_PLUGINS)
17+
set(plugins_objs ${plugins_objs} ${plugin_objs})
18+
set(plugins_deps ${plugins_deps} ${plugin_deps})
19+
set(plugins_modules ${plugins_modules} ${plugin_modules})
20+
else()
21+
message(STATUS "Plugin ${plugin_name} provides modules: ${plugin_modules}")
22+
add_library(${plugin_name} ${plugin_objs})
23+
target_link_libraries(${plugin_name} ${plugin_deps})
24+
if(XCODE_VERSION)
25+
set_target_properties(${plugin_name} PROPERTIES INSTALL_NAME_DIR "@rpath")
26+
endif(XCODE_VERSION)
27+
install(TARGETS ${plugin_name} DESTINATION ${LIB_INSTALL_DIR})
28+
endif()
29+
endif()
30+
endforeach(file)
31+
32+
set(rime_plugins_objs ${plugins_objs} PARENT_SCOPE)
33+
set(rime_plugins_deps ${plugins_deps} PARENT_SCOPE)
34+
set(rime_plugins_modules ${plugins_modules} PARENT_SCOPE)

src/CMakeLists.txt

+4-3
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ set(rime_core_deps
3939
${Glog_LIBRARY}
4040
${YamlCpp_LIBRARY}
4141
${CMAKE_THREAD_LIBS_INIT}
42-
${rime_optional_deps})
42+
${rime_optional_deps}
43+
${rime_plugins_deps})
4344
set(rime_extra_deps
4445
${ICONV_LIBRARIES}
4546
${LevelDb_LIBRARY}
@@ -58,7 +59,7 @@ else()
5859
endif()
5960

6061
if(BUILD_SHARED_LIBS)
61-
add_library(rime ${rime_src})
62+
add_library(rime ${rime_plugins_objs} ${rime_src})
6263
target_link_libraries(rime ${rime_deps})
6364
set_target_properties(rime PROPERTIES DEFINE_SYMBOL "RIME_EXPORTS")
6465
set_target_properties(rime PROPERTIES VERSION ${rime_version} SOVERSION ${rime_soversion})
@@ -77,7 +78,7 @@ if(BUILD_SHARED_LIBS)
7778
install(TARGETS rime-gears DESTINATION ${LIB_INSTALL_DIR})
7879
endif()
7980
else()
80-
add_library(rime-static STATIC ${rime_src})
81+
add_library(rime-static STATIC ${rime_plugins_objs} ${rime_src})
8182
target_link_libraries(rime-static ${rime_deps})
8283
set_target_properties(rime-static PROPERTIES OUTPUT_NAME "rime" PREFIX "lib")
8384
install(TARGETS rime-static DESTINATION ${LIB_INSTALL_DIR})

src/rime/setup.cc

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,19 @@
1111

1212
#include <rime_api.h>
1313
#include <rime/module.h>
14+
#include <rime/setup.h>
1415

1516
namespace rime {
1617

17-
RIME_API RIME_MODULE_LIST(kDefaultModules, "default");
18+
#define Q(x) #x
19+
RIME_API RIME_MODULE_LIST(kDefaultModules, "default" RIME_EXTRA_MODULES);
20+
#undef Q
1821
RIME_MODULE_LIST(kDeployerModules, "deployer");
1922
RIME_MODULE_LIST(kLegacyModules, "legacy");
2023

24+
RIME_REGISTER_MODULE_GROUP(default, "core", "dict", "gears")
25+
RIME_REGISTER_MODULE_GROUP(deployer, "core", "dict", "levers")
26+
2127
RIME_API void LoadModules(const char* module_names[]) {
2228
ModuleManager& mm(ModuleManager::instance());
2329
for (const char** m = module_names; *m; ++m) {
@@ -33,7 +39,4 @@ RIME_API void SetupLogging(const char* app_name) {
3339
#endif // RIME_ENABLE_LOGGING
3440
}
3541

36-
RIME_REGISTER_MODULE_GROUP(default, "core", "dict", "gears")
37-
RIME_REGISTER_MODULE_GROUP(deployer, "core", "dict", "levers")
38-
3942
} // namespace rime

0 commit comments

Comments
 (0)