From ff57a7aadb321552306ea4451b8c13fdc88cbc82 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 24 Jan 2017 08:58:26 +0900 Subject: [PATCH] Apply -fvisibility to decrease binary size The binary sizes are decrease ise-engine-sunpinyin.so : 75KB -> 59KB libsunpinyin.so : 249KB -> 205KB Change-Id: I6904a17129b0299e1b6e68e72d8f17dc749ce109 Signed-off-by: Jihoon Kim --- packaging/ise-engine-sunpinyin.spec | 4 ++++ src/ime-core/ic_history.h | 4 ++-- src/ime-core/imi_data.h | 2 +- src/ime-core/imi_option_event.h | 2 +- src/ime-core/imi_options.h | 6 +++--- src/ime-core/imi_view.h | 2 +- src/ime-core/imi_view_classic.h | 2 +- src/ime-core/imi_winHandler.h | 2 +- src/ime-core/userdict.h | 2 +- src/pinyin/pinyin_seg.h | 6 +++--- src/pinyin/shuangpin_seg.h | 2 +- src/portability.h | 2 +- wrapper/scim/src/imi_scimwin.h | 2 +- wrapper/scim/src/sunpinyin_imengine.cpp | 8 ++++---- wrapper/scim/src/sunpinyin_imengine_setup.cpp | 18 +++++++++--------- 15 files changed, 34 insertions(+), 30 deletions(-) diff --git a/packaging/ise-engine-sunpinyin.spec b/packaging/ise-engine-sunpinyin.spec index 8d3b016..e0b7ced 100755 --- a/packaging/ise-engine-sunpinyin.spec +++ b/packaging/ise-engine-sunpinyin.spec @@ -27,6 +27,10 @@ This package contains Chinese Pinyin engine ISE header files and static librarie %setup -q %build +export CFLAGS+=" -fvisibility=hidden" +export CXXFLAGS+=" -fvisibility=hidden -fvisibility-inlines-hidden" +export CPPFLAGS+=" -DEXPORTED=__attribute__\(\(visibility\(\\\"default\\\"\)\)\)" + ./bootstrap %configure --disable-static make %{?jobs:-j%jobs} diff --git a/src/ime-core/ic_history.h b/src/ime-core/ic_history.h index ba5a929..f299204 100644 --- a/src/ime-core/ic_history.h +++ b/src/ime-core/ic_history.h @@ -48,7 +48,7 @@ /** * A forget all history memory */ -class CICHistory { +class EXPORTED CICHistory { public: /** don't care word id, or seperator word id */ static const uint32_t DCWID; @@ -113,7 +113,7 @@ public: virtual void initStopWords() = 0; }; -class CBigramHistory : public CICHistory { +class EXPORTED CBigramHistory : public CICHistory { public: static void initClass(); diff --git a/src/ime-core/imi_data.h b/src/ime-core/imi_data.h index 7e808b0..0776c55 100644 --- a/src/ime-core/imi_data.h +++ b/src/ime-core/imi_data.h @@ -51,7 +51,7 @@ void print_wide(const TWCHAR* wstr); /** * Data of the IM implementation shared by all Desktop/Session(IC) */ -class CIMIData { +class EXPORTED CIMIData { public: CIMIData() : m_pPinyinTrie(NULL), m_pLM(NULL) { } diff --git a/src/ime-core/imi_option_event.h b/src/ime-core/imi_option_event.h index 25e2539..5f979a3 100644 --- a/src/ime-core/imi_option_event.h +++ b/src/ime-core/imi_option_event.h @@ -57,7 +57,7 @@ struct COptionEvent { } value; }; -class IConfigurable +class EXPORTED IConfigurable { public: IConfigurable(); diff --git a/src/ime-core/imi_options.h b/src/ime-core/imi_options.h index 7043960..2ac65f8 100644 --- a/src/ime-core/imi_options.h +++ b/src/ime-core/imi_options.h @@ -55,7 +55,7 @@ #define SUNPINYIN_USERDATA_DIR_PREFIX ".sunpinyin" #endif -struct CSimplifiedChinesePolicy : public IConfigurable { +struct EXPORTED CSimplifiedChinesePolicy : public IConfigurable { CSimplifiedChinesePolicy (); bool loadResources(); @@ -103,7 +103,7 @@ public: typedef SingletonHolder ASimplifiedChinesePolicy; -struct CQuanpinSchemePolicy : IConfigurable { +struct EXPORTED CQuanpinSchemePolicy : IConfigurable { public: IPySegmentor* createPySegmentor(){ @@ -151,7 +151,7 @@ protected: ~CQuanpinSchemePolicy () {} typedef SingletonHolder AQuanpinSchemePolicy; -struct CShuangpinSchemePolicy : public IConfigurable { +struct EXPORTED CShuangpinSchemePolicy : public IConfigurable { public: CShuangpinSchemePolicy(); diff --git a/src/ime-core/imi_view.h b/src/ime-core/imi_view.h index fdbaaa3..9f96c68 100644 --- a/src/ime-core/imi_view.h +++ b/src/ime-core/imi_view.h @@ -48,7 +48,7 @@ #include "utils.h" #include -class CHotkeyProfile : private CNonCopyable +class EXPORTED CHotkeyProfile : private CNonCopyable { public: CHotkeyProfile(); diff --git a/src/ime-core/imi_view_classic.h b/src/ime-core/imi_view_classic.h index 135a932..138863c 100644 --- a/src/ime-core/imi_view_classic.h +++ b/src/ime-core/imi_view_classic.h @@ -43,7 +43,7 @@ #include "imi_view.h" -class CIMIClassicView : public CIMIView +class EXPORTED CIMIClassicView : public CIMIView { public: CIMIClassicView(); diff --git a/src/ime-core/imi_winHandler.h b/src/ime-core/imi_winHandler.h index f0182ed..f3f82dc 100644 --- a/src/ime-core/imi_winHandler.h +++ b/src/ime-core/imi_winHandler.h @@ -51,7 +51,7 @@ class CIMIView; /*@}*/ -class CIMIWinHandler +class EXPORTED CIMIWinHandler { public: enum { diff --git a/src/ime-core/userdict.h b/src/ime-core/userdict.h index 24c21a1..cf6e8e1 100644 --- a/src/ime-core/userdict.h +++ b/src/ime-core/userdict.h @@ -45,7 +45,7 @@ #include "lexicon/pytrie.h" #include "imi_defines.h" -class CUserDict +class EXPORTED CUserDict { public: CUserDict () : m_fname(NULL), m_db(NULL) {} diff --git a/src/pinyin/pinyin_seg.h b/src/pinyin/pinyin_seg.h index 2933c0d..7e318f7 100644 --- a/src/pinyin/pinyin_seg.h +++ b/src/pinyin/pinyin_seg.h @@ -48,7 +48,7 @@ #include #include -class CGetCorrectionPairOp : private CNonCopyable +class EXPORTED CGetCorrectionPairOp : private CNonCopyable { public: typedef std::pair CCorrectionPair; @@ -69,7 +69,7 @@ private: bool m_bEnabled; }; -class CGetFuzzySegmentsOp : private CNonCopyable +class EXPORTED CGetFuzzySegmentsOp : private CNonCopyable { public: typedef std::map -class CShuangpinSegmentor : public IPySegmentor +class EXPORTED CShuangpinSegmentor : public IPySegmentor { public: CShuangpinSegmentor (EShuangpinType shpType); diff --git a/src/portability.h b/src/portability.h index d6116f5..3307aff 100644 --- a/src/portability.h +++ b/src/portability.h @@ -193,7 +193,7 @@ size_t MBSTOWCS(TWCHAR *pwcs, const char* s, size_t n); size_t WCSTOMBS(char* s, const TWCHAR* pwcs, size_t n); -size_t WCSLEN(const TWCHAR* ws); +EXPORTED size_t WCSLEN(const TWCHAR* ws); namespace std { #ifdef HOST_OS_GNUC_2 diff --git a/wrapper/scim/src/imi_scimwin.h b/wrapper/scim/src/imi_scimwin.h index 5e27def..f47911e 100644 --- a/wrapper/scim/src/imi_scimwin.h +++ b/wrapper/scim/src/imi_scimwin.h @@ -41,7 +41,7 @@ class SunPyInstance; -class CScimWinHandler : public CIMIWinHandler +class EXPORTED CScimWinHandler : public CIMIWinHandler { public: CScimWinHandler(SunPyInstance* ime, SunLookupTable* lookup_table); diff --git a/wrapper/scim/src/sunpinyin_imengine.cpp b/wrapper/scim/src/sunpinyin_imengine.cpp index 634907e..69570d5 100644 --- a/wrapper/scim/src/sunpinyin_imengine.cpp +++ b/wrapper/scim/src/sunpinyin_imengine.cpp @@ -109,20 +109,20 @@ static Property _punct_property (SCIM_PROP_PUNCT, ""); static char g_common_symbol[]={'#','$','%','^','&','*','@'}; extern "C" { - void scim_module_init (void) + EXPORTED void scim_module_init (void) { SCIM_DEBUG_IMENGINE (3) << "scim_module_init\n"; bindtextdomain (GETTEXT_PACKAGE, SCIM_SUNPINYIN_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); } - void scim_module_exit (void) + EXPORTED void scim_module_exit (void) { _scim_pinyin_factory.reset (); _scim_config.reset (); } - uint32 scim_imengine_module_init (const ConfigPointer &config) + EXPORTED uint32 scim_imengine_module_init (const ConfigPointer &config) { SCIM_DEBUG_IMENGINE (3) << "module_init\n"; _status_property.set_tip (_("The status of the current input method. Click to change it.")); @@ -140,7 +140,7 @@ extern "C" { return 1; } - IMEngineFactoryPointer scim_imengine_module_create_factory (uint32 engine) + EXPORTED IMEngineFactoryPointer scim_imengine_module_create_factory (uint32 engine) { SCIM_DEBUG_IMENGINE (3) << "entering scim_imengine_module_create_factory()\n"; if (engine != 0) return IMEngineFactoryPointer (0); diff --git a/wrapper/scim/src/sunpinyin_imengine_setup.cpp b/wrapper/scim/src/sunpinyin_imengine_setup.cpp index 9e69098..c05dea8 100644 --- a/wrapper/scim/src/sunpinyin_imengine_setup.cpp +++ b/wrapper/scim/src/sunpinyin_imengine_setup.cpp @@ -83,17 +83,17 @@ static bool query_changed (); // Module Interface. extern "C" { - void scim_module_init (void) + EXPORTED void scim_module_init (void) { bindtextdomain (GETTEXT_PACKAGE, SCIM_SUNPINYIN_LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); } - void scim_module_exit (void) + EXPORTED void scim_module_exit (void) { } - GtkWidget * scim_setup_module_create_ui (void) + EXPORTED GtkWidget * scim_setup_module_create_ui (void) { static GtkWidget *setup_ui = NULL; if (setup_ui == NULL) @@ -101,32 +101,32 @@ extern "C" { return setup_ui; } - String scim_setup_module_get_category (void) + EXPORTED String scim_setup_module_get_category (void) { return String ("IMEngine"); } - String scim_setup_module_get_name (void) + EXPORTED String scim_setup_module_get_name (void) { return String (_("SunPinyin")); } - String scim_setup_module_get_description (void) + EXPORTED String scim_setup_module_get_description (void) { return String (_("A Statistical Language Model Based Intelligent IMEngine Module for Simplified Chinese.")); } - void scim_setup_module_load_config (const ConfigPointer &config) + EXPORTED void scim_setup_module_load_config (const ConfigPointer &config) { load_config (config); } - void scim_setup_module_save_config (const ConfigPointer &config) + EXPORTED void scim_setup_module_save_config (const ConfigPointer &config) { save_config (config); } - bool scim_setup_module_query_changed () + EXPORTED bool scim_setup_module_query_changed () { return query_changed (); } -- 2.7.4