• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
3  * Copyright 2015 gRPC authors.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 #ifndef PHP_GRPC_H
21 #define PHP_GRPC_H
22 
23 #ifdef HAVE_CONFIG_H
24 #include "config.h"
25 #endif
26 
27 #include <stdbool.h>
28 
29 #include <php.h>
30 #include <php_ini.h>
31 #include <ext/standard/info.h>
32 
33 #include <grpc/grpc.h>
34 
35 #include "php7_wrapper.h"
36 #include "version.h"
37 
38 extern zend_module_entry grpc_module_entry;
39 #define phpext_grpc_ptr &grpc_module_entry
40 
41 #ifdef PHP_WIN32
42 #define PHP_GRPC_API __declspec(dllexport)
43 #elif defined(__GNUC__) && __GNUC__ >= 4
44 #define PHP_GRPC_API __attribute__((visibility("default")))
45 #else
46 #define PHP_GRPC_API
47 #endif
48 
49 #if PHP_MAJOR_VERSION >= 8
50 #define TSRMLS_CC
51 #define TSRMLS_C
52 #define TSRMLS_DC
53 #define TSRMLS_D
54 #define TSRMLS_FETCH()
55 #endif
56 
57 #ifdef ZTS
58 #include "TSRM.h"
59 #endif
60 
61 /* These are all function declarations */
62 /* Code that runs at module initialization */
63 PHP_MINIT_FUNCTION(grpc);
64 /* Code that runs at module shutdown */
65 PHP_MSHUTDOWN_FUNCTION(grpc);
66 /* Displays information about the module */
67 PHP_MINFO_FUNCTION(grpc);
68 /* Code that runs at request start */
69 PHP_RINIT_FUNCTION(grpc);
70 
71 /*
72   Declare any global variables you may need between the BEGIN
73   and END macros here:
74 */
75 ZEND_BEGIN_MODULE_GLOBALS(grpc)
76   zend_bool initialized;
77   zend_bool enable_fork_support;
78   char *poll_strategy;
79   char *grpc_verbosity;
80   char *grpc_trace;
81   char *log_filename;
82 ZEND_END_MODULE_GLOBALS(grpc)
83 
84 ZEND_EXTERN_MODULE_GLOBALS(grpc);
85 
86 /* In every utility function you add that needs to use variables
87    in php_grpc_globals, call TSRMLS_FETCH(); after declaring other
88    variables used by that function, or better yet, pass in TSRMLS_CC
89    after the last function argument and declare your utility function
90    with TSRMLS_DC after the last declared argument.  Always refer to
91    the globals in your function as GRPC_G(variable).  You are
92    encouraged to rename these macros something shorter, see
93    examples in any other php module directory.
94 */
95 
96 #ifdef ZTS
97 #define GRPC_G(v) TSRMG(grpc_globals_id, zend_grpc_globals *, v)
98 #else
99 #define GRPC_G(v) (grpc_globals.v)
100 #endif
101 
102 #define GRPC_STARTUP_FUNCTION(module)  ZEND_MINIT_FUNCTION(grpc_##module)
103 #define GRPC_STARTUP(module)           \
104   ZEND_MODULE_STARTUP_N(grpc_##module)(INIT_FUNC_ARGS_PASSTHRU)
105 
106 #endif /* PHP_GRPC_H */
107