Message ID | 1392825893-7380-2-git-send-email-thierry.reding@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Feb 19, 2014 at 5:04 PM, Thierry Reding <thierry.reding@gmail.com> wrote: > From: Thierry Reding <treding@nvidia.com> > > Checks whether or not the compiler supports the -fvisibility option. If > so it sets the VISIBILITY_CFLAGS variable which can be added to the per > directory AM_CFLAGS where appropriate. > > Libraries can use the HAVE_VISIBILITY preprocessor definition to check > for availability and use something like this: > > #if defined(HAVE_VISIBILITY) > # define drm_private __attribute__((visibility("hidden"))) > # define drm_public __attribute__((visibility("default"))) > #else > # define drm_private > # define drm_public > #endif > > By default all symbols will be hidden via the VISIBILITY_CFLAGS. Only > symbols explicitly marked drm_public will be exported. As I said in the other patch, I think it makes more sense to define these globally. The other drivers still need to opt-in on the feature, but it's less work, less duplication of logic and less points-of-failure ;)
On Wed, Feb 19, 2014 at 10:05:19PM +0100, Erik Faye-Lund wrote: > On Wed, Feb 19, 2014 at 5:04 PM, Thierry Reding > <thierry.reding@gmail.com> wrote: > > From: Thierry Reding <treding@nvidia.com> > > > > Checks whether or not the compiler supports the -fvisibility option. If > > so it sets the VISIBILITY_CFLAGS variable which can be added to the per > > directory AM_CFLAGS where appropriate. > > > > Libraries can use the HAVE_VISIBILITY preprocessor definition to check > > for availability and use something like this: > > > > #if defined(HAVE_VISIBILITY) > > # define drm_private __attribute__((visibility("hidden"))) > > # define drm_public __attribute__((visibility("default"))) > > #else > > # define drm_private > > # define drm_public > > #endif > > > > By default all symbols will be hidden via the VISIBILITY_CFLAGS. Only > > symbols explicitly marked drm_public will be exported. > > As I said in the other patch, I think it makes more sense to define > these globally. The other drivers still need to opt-in on the feature, > but it's less work, less duplication of logic and less > points-of-failure ;) Well, if you put it that way, having it in somewhere in the core might be a better option after all. I'll sleep on it. Thierry
diff --git a/configure.ac b/configure.ac index d2d19d66dc17..3f4164238494 100644 --- a/configure.ac +++ b/configure.ac @@ -365,6 +365,26 @@ AC_ARG_WITH([kernel-source], [kernel_source="$with_kernel_source"]) AC_SUBST(kernel_source) +dnl Add flags for gcc and g++ +if test "x$GCC" = xyes; then + # Enable -fvisibility=hidden if using a gcc that supports it + save_CFLAGS="$CFLAGS" + AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden]) + VISIBILITY_CFLAGS="-fvisibility=hidden" + CFLAGS="$CFLAGS $VISIBILITY_CFLAGS" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]), + [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]); + + # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed. + CFLAGS=$save_CFLAGS + + if test "x$VISIBILITY_CFLAGS" != x; then + AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support]) + fi + + AC_SUBST([VISIBILITY_CFLAGS]) +fi + AC_SUBST(WARN_CFLAGS) AC_CONFIG_FILES([ Makefile