… | |
… | |
3891 | If you need to shave off some kilobytes of code at the expense of some |
3891 | If you need to shave off some kilobytes of code at the expense of some |
3892 | speed (but with the full API), you can define this symbol to request |
3892 | speed (but with the full API), you can define this symbol to request |
3893 | certain subsets of functionality. The default is to enable all features |
3893 | certain subsets of functionality. The default is to enable all features |
3894 | that can be enabled on the platform. |
3894 | that can be enabled on the platform. |
3895 | |
3895 | |
3896 | Note that using autoconf will usually override most of the features, so |
|
|
3897 | using this symbol makes sense mostly when embedding libev. |
|
|
3898 | |
|
|
3899 | A typical way to use this symbol is to define it to C<0> (or to a bitset |
3896 | A typical way to use this symbol is to define it to C<0> (or to a bitset |
3900 | with some broad features you want) and then selectively re-enable |
3897 | with some broad features you want) and then selectively re-enable |
3901 | additional parts you want, for example if you want everything minimal, |
3898 | additional parts you want, for example if you want everything minimal, |
3902 | but multiple event loop support, async and child watchers and the poll |
3899 | but multiple event loop support, async and child watchers and the poll |
3903 | backend, use this: |
3900 | backend, use this: |
… | |
… | |
3918 | Use larger code to speed up some operations. |
3915 | Use larger code to speed up some operations. |
3919 | |
3916 | |
3920 | Currently this is used to override some inlining decisions (enlarging the roughly |
3917 | Currently this is used to override some inlining decisions (enlarging the roughly |
3921 | 30% code size on amd64. |
3918 | 30% code size on amd64. |
3922 | |
3919 | |
3923 | Also disables C<assert>'s in the code, unless you define C<NDEBUG> |
3920 | When optimising for size, use of compiler flags such as C<-Os> with |
3924 | explicitly to C<0>. |
3921 | gcc recommended, as well as C<-DNDEBUG>, as libev contains a number of |
3925 | |
3922 | assertions. |
3926 | Use of compiler flags such as C<-Os> with gcc that optimise for size are |
|
|
3927 | recommended when disabling this feature. |
|
|
3928 | |
3923 | |
3929 | =item C<2> - faster/larger data structures |
3924 | =item C<2> - faster/larger data structures |
3930 | |
3925 | |
3931 | Replaces the small 2-heap for timer management by a faster 4-heap, larger |
3926 | Replaces the small 2-heap for timer management by a faster 4-heap, larger |
3932 | hash table sizes and so on. This will usually further increase codesize |
3927 | hash table sizes and so on. This will usually further increase codesize |
… | |
… | |
3936 | =item C<4> - full API configuration |
3931 | =item C<4> - full API configuration |
3937 | |
3932 | |
3938 | This enables priorities (sets C<EV_MAXPRI>=2 and C<EV_MINPRI>=-2), and |
3933 | This enables priorities (sets C<EV_MAXPRI>=2 and C<EV_MINPRI>=-2), and |
3939 | enables multiplicity (C<EV_MULTIPLICITY>=1). |
3934 | enables multiplicity (C<EV_MULTIPLICITY>=1). |
3940 | |
3935 | |
|
|
3936 | =item C<8> - full API |
|
|
3937 | |
3941 | It also enables a lot of the "lesser used" core API functions. See C<ev.h> |
3938 | This enables a lot of the "lesser used" API functions. See C<ev.h> for |
3942 | for details on which parts of the API are still available without this |
3939 | details on which parts of the API are still available without this |
3943 | feature, and do not complain if this subset changes over time. |
3940 | feature, and do not complain if this subset changes over time. |
3944 | |
3941 | |
3945 | =item C<8> - enable all optional watcher types |
3942 | =item C<16> - enable all optional watcher types |
3946 | |
3943 | |
3947 | Enables all optional watcher types. If you want to selectively enable |
3944 | Enables all optional watcher types. If you want to selectively enable |
3948 | only some watcher types other than I/O and timers (e.g. prepare, |
3945 | only some watcher types other than I/O and timers (e.g. prepare, |
3949 | embed, async, child...) you can enable them manually by defining |
3946 | embed, async, child...) you can enable them manually by defining |
3950 | C<EV_watchertype_ENABLE> to C<1> instead. |
3947 | C<EV_watchertype_ENABLE> to C<1> instead. |
3951 | |
3948 | |
3952 | =item C<16> - enable all backends |
3949 | =item C<32> - enable all backends |
3953 | |
3950 | |
3954 | This enables all backends - without this feature, you need to enable at |
3951 | This enables all backends - without this feature, you need to enable at |
3955 | least one backend manually (C<EV_USE_SELECT> is a good choice). |
3952 | least one backend manually (C<EV_USE_SELECT> is a good choice). |
3956 | |
3953 | |
3957 | =item C<32> - enable OS-specific "helper" APIs |
3954 | =item C<64> - enable OS-specific "helper" APIs |
3958 | |
3955 | |
3959 | Enable inotify, eventfd, signalfd and similar OS-specific helper APIs by |
3956 | Enable inotify, eventfd, signalfd and similar OS-specific helper APIs by |
3960 | default. |
3957 | default. |
3961 | |
3958 | |
3962 | =back |
3959 | =back |
3963 | |
3960 | |
3964 | Compiling with C<gcc -Os -DEV_STANDALONE -DEV_USE_EPOLL=1 -DEV_FEATURES=0> |
3961 | Compiling with C<gcc -Os -DEV_STANDALONE -DEV_USE_EPOLL=1 -DEV_FEATURES=0> |
3965 | reduces the compiled size of libev from 24.7Kb to 6.5Kb on my GNU/Linux |
3962 | reduces the compiled size of libev from 24.7Kb code/2.8Kb data to 6.5Kb |
3966 | amd64 system, while still giving you I/O watchers, timers and monotonic |
3963 | code/0.3Kb data on my GNU/Linux amd64 system, while still giving you I/O |
3967 | clock support. |
3964 | watchers, timers and monotonic clock support. |
3968 | |
3965 | |
3969 | With an intelligent-enough linker (gcc+binutils are intelligent enough |
3966 | With an intelligent-enough linker (gcc+binutils are intelligent enough |
3970 | when you use C<-Wl,--gc-sections -ffunction-sections>) functions unused by |
3967 | when you use C<-Wl,--gc-sections -ffunction-sections>) functions unused by |
3971 | your program might be left out as well - a binary starting a timer and an |
3968 | your program might be left out as well - a binary starting a timer and an |
3972 | I/O watcher then might come out at only 5Kb. |
3969 | I/O watcher then might come out at only 5Kb. |
… | |
… | |
4105 | file. |
4102 | file. |
4106 | |
4103 | |
4107 | The usage in rxvt-unicode is simpler. It has a F<ev_cpp.h> header file |
4104 | The usage in rxvt-unicode is simpler. It has a F<ev_cpp.h> header file |
4108 | that everybody includes and which overrides some configure choices: |
4105 | that everybody includes and which overrides some configure choices: |
4109 | |
4106 | |
4110 | #define EV_FEATURES 0 |
4107 | #define EV_FEATURES 8 |
4111 | #define EV_USE_SELECT 1 |
4108 | #define EV_USE_SELECT 1 |
|
|
4109 | #define EV_PREPARE_ENABLE 1 |
|
|
4110 | #define EV_IDLE_ENABLE 1 |
|
|
4111 | #define EV_SIGNAL_ENABLE 1 |
|
|
4112 | #define EV_CHILD_ENABLE 1 |
|
|
4113 | #define EV_USE_STDEXCEPT 0 |
4112 | #define EV_CONFIG_H <config.h> |
4114 | #define EV_CONFIG_H <config.h> |
4113 | |
4115 | |
4114 | #include "ev++.h" |
4116 | #include "ev++.h" |
4115 | |
4117 | |
4116 | And a F<ev_cpp.C> implementation file that contains libev proper and is compiled: |
4118 | And a F<ev_cpp.C> implementation file that contains libev proper and is compiled: |