diff --git a/configure.ac b/configure.ac index 9261255..99cf283 100644 --- a/configure.ac +++ b/configure.ac @@ -7,7 +7,7 @@ dnl GNU lightning is free software; you can redistribute it and/or modify it dnl under the terms of the GNU Lesser General Public License as published dnl by the Free Software Foundation; either version 3, or (at your option) dnl any later version. -dnl +dnl dnl GNU lightning is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public @@ -28,6 +28,9 @@ AC_PROG_CC AC_PROG_INSTALL AC_PROG_LIBTOOL +dnl Check for visibility support +gl_VISIBILITY + case "$target_cpu" in ia64) case "$host_os" in diff --git a/include/lightning.h.in b/include/lightning.h.in index 70560c9..b442f19 100644 --- a/include/lightning.h.in +++ b/include/lightning.h.in @@ -94,6 +94,16 @@ # endif #endif +#if BUILDING_LIBLIGHTNING && @HAVE_VISIBILITY@ +#define LIBLIGHTNING_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif BUILDING_LIBLIGHTNING && defined _MSC_VER +#define LIBLIGHTNING_DLL_EXPORTED __declspec(dllexport) +#elif defined _MSC_VER +#define LIBLIGHTNING_DLL_EXPORTED __declspec(dllimport) +#else +#define LIBLIGHTNING_DLL_EXPORTED +#endif + typedef signed char jit_int8_t; typedef unsigned char jit_uint8_t; typedef signed short jit_int16_t; @@ -901,191 +911,191 @@ typedef void (*jit_free_func_ptr) (void*); /* * Prototypes */ -extern void init_jit(const char*); -extern void finish_jit(void); +extern LIBLIGHTNING_DLL_EXPORTED void init_jit(const char*); +extern LIBLIGHTNING_DLL_EXPORTED void finish_jit(void); -extern jit_state_t *jit_new_state(void); +extern LIBLIGHTNING_DLL_EXPORTED jit_state_t *jit_new_state(void); #define jit_clear_state() _jit_clear_state(_jit) -extern void _jit_clear_state(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_clear_state(jit_state_t*); #define jit_destroy_state() _jit_destroy_state(_jit) -extern void _jit_destroy_state(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_destroy_state(jit_state_t*); #define jit_address(node) _jit_address(_jit, node) -extern jit_pointer_t _jit_address(jit_state_t*, jit_node_t*); -extern jit_node_t *_jit_name(jit_state_t*, const char*); -extern jit_node_t *_jit_note(jit_state_t*, const char*, int); -extern jit_node_t *_jit_label(jit_state_t*); -extern jit_node_t *_jit_forward(jit_state_t*); -extern jit_node_t *_jit_indirect(jit_state_t*); -extern void _jit_link(jit_state_t*, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_pointer_t _jit_address(jit_state_t*, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_name(jit_state_t*, const char*); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_note(jit_state_t*, const char*, int); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_label(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_forward(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_indirect(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_link(jit_state_t*, jit_node_t*); #define jit_forward_p(u) _jit_forward_p(_jit,u) -extern jit_bool_t _jit_forward_p(jit_state_t*,jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_forward_p(jit_state_t*,jit_node_t*); #define jit_indirect_p(u) _jit_indirect_p(_jit,u) -extern jit_bool_t _jit_indirect_p(jit_state_t*,jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_indirect_p(jit_state_t*,jit_node_t*); #define jit_target_p(u) _jit_target_p(_jit,u) -extern jit_bool_t _jit_target_p(jit_state_t*,jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_target_p(jit_state_t*,jit_node_t*); -extern void _jit_prolog(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_prolog(jit_state_t*); -extern jit_int32_t _jit_allocai(jit_state_t*, jit_int32_t); -extern void _jit_allocar(jit_state_t*, jit_int32_t, jit_int32_t); -extern void _jit_ellipsis(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_int32_t _jit_allocai(jit_state_t*, jit_int32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_allocar(jit_state_t*, jit_int32_t, jit_int32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_ellipsis(jit_state_t*); -extern jit_node_t *_jit_arg(jit_state_t*); -extern void _jit_getarg_c(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_uc(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_s(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_us(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_i(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_arg(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_c(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_uc(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_s(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_us(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_i(jit_state_t*, jit_gpr_t, jit_node_t*); #if __WORDSIZE == 64 -extern void _jit_getarg_ui(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_getarg_l(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_ui(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_l(jit_state_t*, jit_gpr_t, jit_node_t*); #endif -extern void _jit_putargr(jit_state_t*, jit_gpr_t, jit_node_t*); -extern void _jit_putargi(jit_state_t*, jit_word_t, jit_node_t*); - -extern void _jit_prepare(jit_state_t*); -extern void _jit_ellipsis(jit_state_t*); -extern void _jit_va_push(jit_state_t*, jit_gpr_t); -extern void _jit_pushargr(jit_state_t*, jit_gpr_t); -extern void _jit_pushargi(jit_state_t*, jit_word_t); -extern void _jit_finishr(jit_state_t*, jit_gpr_t); -extern jit_node_t *_jit_finishi(jit_state_t*, jit_pointer_t); -extern void _jit_ret(jit_state_t*); -extern void _jit_retr(jit_state_t*, jit_gpr_t); -extern void _jit_reti(jit_state_t*, jit_word_t); -extern void _jit_retval_c(jit_state_t*, jit_gpr_t); -extern void _jit_retval_uc(jit_state_t*, jit_gpr_t); -extern void _jit_retval_s(jit_state_t*, jit_gpr_t); -extern void _jit_retval_us(jit_state_t*, jit_gpr_t); -extern void _jit_retval_i(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargr(jit_state_t*, jit_gpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargi(jit_state_t*, jit_word_t, jit_node_t*); + +extern LIBLIGHTNING_DLL_EXPORTED void _jit_prepare(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_ellipsis(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_va_push(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargr(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargi(jit_state_t*, jit_word_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_finishr(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_finishi(jit_state_t*, jit_pointer_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_ret(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retr(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_reti(jit_state_t*, jit_word_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_c(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_uc(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_s(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_us(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_i(jit_state_t*, jit_gpr_t); #if __WORDSIZE == 64 -extern void _jit_retval_ui(jit_state_t*, jit_gpr_t); -extern void _jit_retval_l(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_ui(jit_state_t*, jit_gpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_l(jit_state_t*, jit_gpr_t); #endif -extern void _jit_epilog(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_epilog(jit_state_t*); #define jit_patch(u) _jit_patch(_jit,u) -extern void _jit_patch(jit_state_t*, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_patch(jit_state_t*, jit_node_t*); #define jit_patch_at(u,v) _jit_patch_at(_jit,u,v) -extern void _jit_patch_at(jit_state_t*, jit_node_t*, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_patch_at(jit_state_t*, jit_node_t*, jit_node_t*); #define jit_patch_abs(u,v) _jit_patch_abs(_jit,u,v) -extern void _jit_patch_abs(jit_state_t*, jit_node_t*, jit_pointer_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_patch_abs(jit_state_t*, jit_node_t*, jit_pointer_t); #define jit_realize() _jit_realize(_jit) -extern void _jit_realize(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_realize(jit_state_t*); #define jit_get_code(u) _jit_get_code(_jit,u) -extern jit_pointer_t _jit_get_code(jit_state_t*, jit_word_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_pointer_t _jit_get_code(jit_state_t*, jit_word_t*); #define jit_set_code(u,v) _jit_set_code(_jit,u,v) -extern void _jit_set_code(jit_state_t*, jit_pointer_t, jit_word_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_set_code(jit_state_t*, jit_pointer_t, jit_word_t); #define jit_get_data(u,v) _jit_get_data(_jit,u,v) -extern jit_pointer_t _jit_get_data(jit_state_t*, jit_word_t*, jit_word_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_pointer_t _jit_get_data(jit_state_t*, jit_word_t*, jit_word_t*); #define jit_set_data(u,v,w) _jit_set_data(_jit,u,v,w) -extern void _jit_set_data(jit_state_t*, jit_pointer_t, jit_word_t, jit_word_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_set_data(jit_state_t*, jit_pointer_t, jit_word_t, jit_word_t); #define jit_frame(u) _jit_frame(_jit,u) -extern void _jit_frame(jit_state_t*, jit_int32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_frame(jit_state_t*, jit_int32_t); #define jit_tramp(u) _jit_tramp(_jit,u) -extern void _jit_tramp(jit_state_t*, jit_int32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_tramp(jit_state_t*, jit_int32_t); #define jit_emit() _jit_emit(_jit) -extern jit_pointer_t _jit_emit(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_pointer_t _jit_emit(jit_state_t*); #define jit_print() _jit_print(_jit) -extern void _jit_print(jit_state_t*); - -extern jit_node_t *_jit_arg_f(jit_state_t*); -extern void _jit_getarg_f(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargr_f(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargi_f(jit_state_t*, jit_float32_t, jit_node_t*); -extern void _jit_pushargr_f(jit_state_t*, jit_fpr_t); -extern void _jit_pushargi_f(jit_state_t*, jit_float32_t); -extern void _jit_retr_f(jit_state_t*, jit_fpr_t); -extern void _jit_reti_f(jit_state_t*, jit_float32_t); -extern void _jit_retval_f(jit_state_t*, jit_fpr_t); - -extern jit_node_t *_jit_arg_d(jit_state_t*); -extern void _jit_getarg_d(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargr_d(jit_state_t*, jit_fpr_t, jit_node_t*); -extern void _jit_putargi_d(jit_state_t*, jit_float64_t, jit_node_t*); -extern void _jit_pushargr_d(jit_state_t*, jit_fpr_t); -extern void _jit_pushargi_d(jit_state_t*, jit_float64_t); -extern void _jit_retr_d(jit_state_t*, jit_fpr_t); -extern void _jit_reti_d(jit_state_t*, jit_float64_t); -extern void _jit_retval_d(jit_state_t*, jit_fpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_print(jit_state_t*); + +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_arg_f(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_f(jit_state_t*, jit_fpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargr_f(jit_state_t*, jit_fpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargi_f(jit_state_t*, jit_float32_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargr_f(jit_state_t*, jit_fpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargi_f(jit_state_t*, jit_float32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retr_f(jit_state_t*, jit_fpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_reti_f(jit_state_t*, jit_float32_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_f(jit_state_t*, jit_fpr_t); + +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_arg_d(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_getarg_d(jit_state_t*, jit_fpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargr_d(jit_state_t*, jit_fpr_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_putargi_d(jit_state_t*, jit_float64_t, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargr_d(jit_state_t*, jit_fpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_pushargi_d(jit_state_t*, jit_float64_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retr_d(jit_state_t*, jit_fpr_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_reti_d(jit_state_t*, jit_float64_t); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_retval_d(jit_state_t*, jit_fpr_t); #define jit_new_node(c) _jit_new_node(_jit,c) -extern jit_node_t *_jit_new_node(jit_state_t*, jit_code_t); +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node(jit_state_t*, jit_code_t); #define jit_new_node_w(c,u) _jit_new_node_w(_jit,c,u) -extern jit_node_t *_jit_new_node_w(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_w(jit_state_t*, jit_code_t, jit_word_t); #define jit_new_node_f(c,u) _jit_new_node_f(_jit,c,u) -extern jit_node_t *_jit_new_node_f(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_f(jit_state_t*, jit_code_t, jit_float32_t); #define jit_new_node_d(c,u) _jit_new_node_d(_jit,c,u) -extern jit_node_t *_jit_new_node_d(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_d(jit_state_t*, jit_code_t, jit_float64_t); #define jit_new_node_p(c,u) _jit_new_node_p(_jit,c,u) -extern jit_node_t *_jit_new_node_p(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_p(jit_state_t*, jit_code_t, jit_pointer_t); #define jit_new_node_ww(c,u,v) _jit_new_node_ww(_jit,c,u,v) -extern jit_node_t *_jit_new_node_ww(jit_state_t*,jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_ww(jit_state_t*,jit_code_t, jit_word_t, jit_word_t); #define jit_new_node_wp(c,u,v) _jit_new_node_wp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wp(jit_state_t*,jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_wp(jit_state_t*,jit_code_t, jit_word_t, jit_pointer_t); #define jit_new_node_fp(c,u,v) _jit_new_node_fp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_fp(jit_state_t*,jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_fp(jit_state_t*,jit_code_t, jit_float32_t, jit_pointer_t); #define jit_new_node_dp(c,u,v) _jit_new_node_dp(_jit,c,u,v) -extern jit_node_t *_jit_new_node_dp(jit_state_t*,jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_dp(jit_state_t*,jit_code_t, jit_float64_t, jit_pointer_t); #define jit_new_node_pw(c,u,v) _jit_new_node_pw(_jit,c,u,v) -extern jit_node_t *_jit_new_node_pw(jit_state_t*,jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_pw(jit_state_t*,jit_code_t, jit_pointer_t, jit_word_t); #define jit_new_node_wf(c,u,v) _jit_new_node_wf(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wf(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_wf(jit_state_t*, jit_code_t, jit_word_t, jit_float32_t); #define jit_new_node_wd(c,u,v) _jit_new_node_wd(_jit,c,u,v) -extern jit_node_t *_jit_new_node_wd(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_wd(jit_state_t*, jit_code_t, jit_word_t, jit_float64_t); #define jit_new_node_www(c,u,v,w) _jit_new_node_www(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_www(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_www(jit_state_t*, jit_code_t, jit_word_t, jit_word_t, jit_word_t); #define jit_new_node_qww(c,l,h,v,w) _jit_new_node_qww(_jit,c,l,h,v,w) -extern jit_node_t *_jit_new_node_qww(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_qww(jit_state_t*, jit_code_t, jit_int32_t, jit_int32_t, jit_word_t, jit_word_t); #define jit_new_node_wwf(c,u,v,w) _jit_new_node_wwf(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_wwf(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_wwf(jit_state_t*, jit_code_t, jit_word_t, jit_word_t, jit_float32_t); #define jit_new_node_wwd(c,u,v,w) _jit_new_node_wwd(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_wwd(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_wwd(jit_state_t*, jit_code_t, jit_word_t, jit_word_t, jit_float64_t); #define jit_new_node_pww(c,u,v,w) _jit_new_node_pww(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pww(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_pww(jit_state_t*, jit_code_t, jit_pointer_t, jit_word_t, jit_word_t); #define jit_new_node_pwf(c,u,v,w) _jit_new_node_pwf(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pwf(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_pwf(jit_state_t*, jit_code_t, jit_pointer_t, jit_word_t, jit_float32_t); #define jit_new_node_pwd(c,u,v,w) _jit_new_node_pwd(_jit,c,u,v,w) -extern jit_node_t *_jit_new_node_pwd(jit_state_t*, jit_code_t, +extern LIBLIGHTNING_DLL_EXPORTED jit_node_t *_jit_new_node_pwd(jit_state_t*, jit_code_t, jit_pointer_t, jit_word_t, jit_float64_t); #define jit_arg_register_p(u) _jit_arg_register_p(_jit,u) -extern jit_bool_t _jit_arg_register_p(jit_state_t*, jit_node_t*); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_arg_register_p(jit_state_t*, jit_node_t*); #define jit_callee_save_p(u) _jit_callee_save_p(_jit,u) -extern jit_bool_t _jit_callee_save_p(jit_state_t*, jit_int32_t); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_callee_save_p(jit_state_t*, jit_int32_t); #define jit_pointer_p(u) _jit_pointer_p(_jit,u) -extern jit_bool_t _jit_pointer_p(jit_state_t*,jit_pointer_t); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_pointer_p(jit_state_t*,jit_pointer_t); #define jit_get_note(n,u,v,w) _jit_get_note(_jit,n,u,v,w) -extern jit_bool_t _jit_get_note(jit_state_t*,jit_pointer_t,char**,char**,int*); +extern LIBLIGHTNING_DLL_EXPORTED jit_bool_t _jit_get_note(jit_state_t*,jit_pointer_t,char**,char**,int*); #define jit_disassemble() _jit_disassemble(_jit) -extern void _jit_disassemble(jit_state_t*); +extern LIBLIGHTNING_DLL_EXPORTED void _jit_disassemble(jit_state_t*); -extern void jit_set_memory_functions(jit_alloc_func_ptr, +extern LIBLIGHTNING_DLL_EXPORTED void jit_set_memory_functions(jit_alloc_func_ptr, jit_realloc_func_ptr, jit_free_func_ptr); -extern void jit_get_memory_functions(jit_alloc_func_ptr*, +extern LIBLIGHTNING_DLL_EXPORTED void jit_get_memory_functions(jit_alloc_func_ptr*, jit_realloc_func_ptr*, jit_free_func_ptr*); diff --git a/lib/Makefile.am b/lib/Makefile.am index f2ac2ba..26e3d3a 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -14,13 +14,14 @@ # License for more details. # -AM_CFLAGS = -I$(top_srcdir)/include -D_GNU_SOURCE $(LIGHTNING_CFLAGS) +AM_CFLAGS = -I$(top_srcdir)/include -D_GNU_SOURCE $(LIGHTNING_CFLAGS) $(CFLAG_VISIBILITY) +AM_CPPFLAGS = -DBUILDING_LIBLIGHTNING liblightning_LTLIBRARIES = liblightning.la liblightning_la_LDFLAGS = -version-info 1:0:0 if get_jit_size JIT_SIZE_PATH = "$(top_builddir)/jit_$(cpu)-sz.c" -AM_CPPFLAGS=-DGET_JIT_SIZE=1 -DJIT_SIZE_PATH='$(JIT_SIZE_PATH)' +AM_CPPFLAGS += -DGET_JIT_SIZE=1 -DJIT_SIZE_PATH='$(JIT_SIZE_PATH)' endif liblightningdir = $(libdir) diff --git a/m4/visibility.m4 b/m4/visibility.m4 new file mode 100644 index 0000000..9f493ba --- /dev/null +++ b/m4/visibility.m4 @@ -0,0 +1,77 @@ +# visibility.m4 serial 6 +dnl Copyright (C) 2005, 2008, 2010-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl Mac OS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + dnl First, check whether -Werror can be added to the command line, or + dnl whether it leads to an error because of some other option that the + dnl user has put into $CC $CFLAGS $CPPFLAGS. + AC_CACHE_CHECK([whether the -Werror option is usable], + [gl_cv_cc_vis_werror], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_vis_werror=yes], + [gl_cv_cc_vis_werror=no]) + CFLAGS="$gl_save_CFLAGS" + ]) + dnl Now check whether visibility declarations are supported. + AC_CACHE_CHECK([for simple visibility declarations], + [gl_cv_cc_visibility], + [gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + dnl We use the option -Werror and a function dummyfunc, because on some + dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning + dnl "visibility attribute not supported in this configuration; ignored" + dnl at the first function definition in every compilation unit, and we + dnl don't want to use the option in this case. + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + ]], + [[]])], + [gl_cv_cc_visibility=yes], + [gl_cv_cc_visibility=no]) + CFLAGS="$gl_save_CFLAGS" + ]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +])