authorgravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-05-25 14:17:59+02:00
committergravatar for sahnvour@pm.meSahnvour <sahnvour@pm.me> 2019-05-25 14:17:59+02:00
log99ee0608f74268248a2dc684cb9e6e9b03e3a9f5
tree3f734d2b26f131b903dc5e293ff0faee7bc07a42
parentc89b5222337d6adc14c83b8fa20a139196c4a38b

gen-h: do not output visibility macros when the build is static


2 files changed, 26 insertions(+), 19 deletions(-)

src/codegen.cpp+18-11
...@@ -9075,8 +9075,11 @@ static void gen_h_file(CodeGen *g) {...@@ -9075,8 +9075,11 @@ static void gen_h_file(CodeGen *g) {
9075 if (!out_h)9075 if (!out_h)
9076 zig_panic("unable to open %s: %s\n", buf_ptr(out_h_path), strerror(errno));9076 zig_panic("unable to open %s: %s\n", buf_ptr(out_h_path), strerror(errno));
90779077
9078 Buf *export_macro = preprocessor_mangle(buf_sprintf("%s_EXPORT", buf_ptr(g->root_out_name)));9078 Buf *export_macro = nullptr;
9079 buf_upcase(export_macro);9079 if (g->is_dynamic) {
9080 export_macro = preprocessor_mangle(buf_sprintf("%s_EXPORT", buf_ptr(g->root_out_name)));
9081 buf_upcase(export_macro);
9082 }
90809083
9081 Buf *extern_c_macro = preprocessor_mangle(buf_sprintf("%s_EXTERN_C", buf_ptr(g->root_out_name)));9084 Buf *extern_c_macro = preprocessor_mangle(buf_sprintf("%s_EXTERN_C", buf_ptr(g->root_out_name)));
9082 buf_upcase(extern_c_macro);9085 buf_upcase(extern_c_macro);
...@@ -9101,10 +9104,11 @@ static void gen_h_file(CodeGen *g) {...@@ -9101,10 +9104,11 @@ static void gen_h_file(CodeGen *g) {
9101 FnExport *fn_export = &fn_table_entry->export_list.items[0];9104 FnExport *fn_export = &fn_table_entry->export_list.items[0];
9102 symbol_name = &fn_export->name;9105 symbol_name = &fn_export->name;
9103 }9106 }
9107
9104 buf_appendf(&h_buf, "%s %s %s(",9108 buf_appendf(&h_buf, "%s %s %s(",
9105 buf_ptr(export_macro),9109 buf_ptr(g->is_dynamic ? export_macro : extern_c_macro),
9106 buf_ptr(&return_type_c),9110 buf_ptr(&return_type_c),
9107 buf_ptr(symbol_name));9111 buf_ptr(symbol_name));
91089112
9109 Buf param_type_c = BUF_INIT;9113 Buf param_type_c = BUF_INIT;
9110 if (fn_type_id->param_count > 0) {9114 if (fn_type_id->param_count > 0) {
...@@ -9154,13 +9158,16 @@ static void gen_h_file(CodeGen *g) {...@@ -9154,13 +9158,16 @@ static void gen_h_file(CodeGen *g) {
9154 fprintf(out_h, "#define %s\n", buf_ptr(extern_c_macro));9158 fprintf(out_h, "#define %s\n", buf_ptr(extern_c_macro));
9155 fprintf(out_h, "#endif\n");9159 fprintf(out_h, "#endif\n");
9156 fprintf(out_h, "\n");9160 fprintf(out_h, "\n");
9157 fprintf(out_h, "#if defined(_WIN32)\n");9161
9158 fprintf(out_h, "#define %s %s __declspec(dllimport)\n", buf_ptr(export_macro), buf_ptr(extern_c_macro));9162 if (g->is_dynamic) {
9159 fprintf(out_h, "#else\n");9163 fprintf(out_h, "#if defined(_WIN32)\n");
9160 fprintf(out_h, "#define %s %s __attribute__((visibility (\"default\")))\n",9164 fprintf(out_h, "#define %s %s __declspec(dllimport)\n", buf_ptr(export_macro), buf_ptr(extern_c_macro));
9165 fprintf(out_h, "#else\n");
9166 fprintf(out_h, "#define %s %s __attribute__((visibility (\"default\")))\n",
9161 buf_ptr(export_macro), buf_ptr(extern_c_macro));9167 buf_ptr(export_macro), buf_ptr(extern_c_macro));
9162 fprintf(out_h, "#endif\n");9168 fprintf(out_h, "#endif\n");
9163 fprintf(out_h, "\n");9169 fprintf(out_h, "\n");
9170 }
91649171
9165 for (size_t type_i = 0; type_i < gen_h->types_to_declare.length; type_i += 1) {9172 for (size_t type_i = 0; type_i < gen_h->types_to_declare.length; type_i += 1) {
9166 ZigType *type_entry = gen_h->types_to_declare.at(type_i);9173 ZigType *type_entry = gen_h->types_to_declare.at(type_i);
test/gen_h.zig+8-8
...@@ -11,7 +11,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -11,7 +11,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
11 \\ C = 211 \\ C = 2
12 \\};12 \\};
13 \\13 \\
14 \\TEST_EXPORT void entry(enum Foo foo);14 \\TEST_EXTERN_C void entry(enum Foo foo);
15 \\15 \\
16 );16 );
1717
...@@ -35,7 +35,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -35,7 +35,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
35 \\ uint64_t F;35 \\ uint64_t F;
36 \\};36 \\};
37 \\37 \\
38 \\TEST_EXPORT void entry(struct Foo foo);38 \\TEST_EXTERN_C void entry(struct Foo foo);
39 \\39 \\
40 );40 );
4141
...@@ -70,7 +70,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -70,7 +70,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
70 \\ struct Big D;70 \\ struct Big D;
71 \\};71 \\};
72 \\72 \\
73 \\TEST_EXPORT void entry(union Foo foo);73 \\TEST_EXTERN_C void entry(union Foo foo);
74 \\74 \\
75 );75 );
7676
...@@ -81,7 +81,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -81,7 +81,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
81 ,81 ,
82 \\struct Foo;82 \\struct Foo;
83 \\83 \\
84 \\TEST_EXPORT void entry(struct Foo * foo);84 \\TEST_EXTERN_C void entry(struct Foo * foo);
85 );85 );
8686
87 cases.add("array field-type",87 cases.add("array field-type",
...@@ -96,7 +96,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -96,7 +96,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
96 \\ uint32_t * B[4];96 \\ uint32_t * B[4];
97 \\};97 \\};
98 \\98 \\
99 \\TEST_EXPORT void entry(struct Foo foo, uint8_t bar[]);99 \\TEST_EXTERN_C void entry(struct Foo foo, uint8_t bar[]);
100 \\100 \\
101 );101 );
102102
...@@ -110,7 +110,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -110,7 +110,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
110 \\}110 \\}
111 ,111 ,
112 \\struct S;112 \\struct S;
113 \\TEST_EXPORT uint8_t a(struct S * s);113 \\TEST_EXTERN_C uint8_t a(struct S * s);
114 \\114 \\
115 );115 );
116116
...@@ -125,7 +125,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -125,7 +125,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
125 \\}125 \\}
126 ,126 ,
127 \\union U;127 \\union U;
128 \\TEST_EXPORT uint8_t a(union U * s);128 \\TEST_EXTERN_C uint8_t a(union U * s);
129 \\129 \\
130 );130 );
131131
...@@ -140,7 +140,7 @@ pub fn addCases(cases: *tests.GenHContext) void {...@@ -140,7 +140,7 @@ pub fn addCases(cases: *tests.GenHContext) void {
140 \\}140 \\}
141 ,141 ,
142 \\enum E;142 \\enum E;
143 \\TEST_EXPORT uint8_t a(enum E * s);143 \\TEST_EXTERN_C uint8_t a(enum E * s);
144 \\144 \\
145 );145 );
146}146}