/ autosetup / cc-shared.tcl
cc-shared.tcl
  1  # Copyright (c) 2010 WorkWare Systems http://www.workware.net.au/
  2  # All rights reserved
  3  
  4  # @synopsis:
  5  #
  6  # The 'cc-shared' module provides support for shared libraries and shared objects.
  7  # It defines the following variables:
  8  #
  9  ## SH_CFLAGS         Flags to use compiling sources destined for a shared library
 10  ## SH_LDFLAGS        Flags to use linking (creating) a shared library
 11  ## SH_SOPREFIX       Prefix to use to set the soname when creating a shared library
 12  ## SH_SOFULLPATH     Set to 1 if the shared library soname should include the full install path
 13  ## SH_SOEXT          Extension for shared libs
 14  ## SH_SOEXTVER       Format for versioned shared libs - %s = version
 15  ## SHOBJ_CFLAGS      Flags to use compiling sources destined for a shared object
 16  ## SHOBJ_LDFLAGS     Flags to use linking a shared object, undefined symbols allowed
 17  ## SHOBJ_LDFLAGS_R   - as above, but all symbols must be resolved
 18  ## SH_LINKRPATH      Format for setting the rpath when linking an executable, %s = path
 19  ## SH_LINKFLAGS      Flags to use linking an executable which will load shared objects
 20  ## LD_LIBRARY_PATH   Environment variable which specifies path to shared libraries
 21  ## STRIPLIBFLAGS     Arguments to strip a dynamic library
 22  
 23  options {}
 24  
 25  # Defaults: gcc on unix
 26  define SHOBJ_CFLAGS -fPIC
 27  define SHOBJ_LDFLAGS -shared
 28  define SH_CFLAGS -fPIC
 29  define SH_LDFLAGS -shared
 30  define SH_LINKFLAGS -rdynamic
 31  define SH_LINKRPATH "-Wl,-rpath -Wl,%s"
 32  define SH_SOEXT .so
 33  define SH_SOEXTVER .so.%s
 34  define SH_SOPREFIX -Wl,-soname,
 35  define LD_LIBRARY_PATH LD_LIBRARY_PATH
 36  define STRIPLIBFLAGS --strip-unneeded
 37  
 38  # Note: This is a helpful reference for identifying the toolchain
 39  #       http://sourceforge.net/apps/mediawiki/predef/index.php?title=Compilers
 40  
 41  switch -glob -- [get-define host] {
 42  	*-*-darwin* {
 43  		define SHOBJ_CFLAGS "-dynamic -fno-common"
 44  		define SHOBJ_LDFLAGS "-bundle -undefined dynamic_lookup"
 45  		define SHOBJ_LDFLAGS_R -bundle
 46  		define SH_CFLAGS -dynamic
 47  		define SH_LDFLAGS -dynamiclib
 48  		define SH_LINKFLAGS ""
 49  		define SH_SOEXT .dylib
 50  		define SH_SOEXTVER .%s.dylib
 51  		define SH_SOPREFIX -Wl,-install_name,
 52  		define SH_SOFULLPATH
 53  		define LD_LIBRARY_PATH DYLD_LIBRARY_PATH
 54  		define STRIPLIBFLAGS -x
 55  	}
 56  	*-*-ming* - *-*-cygwin - *-*-msys {
 57  		define SHOBJ_CFLAGS ""
 58  		define SHOBJ_LDFLAGS -shared
 59  		define SH_CFLAGS ""
 60  		define SH_LDFLAGS -shared
 61  		define SH_LINKRPATH ""
 62  		define SH_LINKFLAGS ""
 63  		define SH_SOEXT .dll
 64  		define SH_SOEXTVER .dll
 65  		define SH_SOPREFIX ""
 66  		define LD_LIBRARY_PATH PATH
 67  	}
 68  	sparc* {
 69  		if {[msg-quiet cc-check-decls __SUNPRO_C]} {
 70  			msg-result "Found sun stdio compiler"
 71  			# sun stdio compiler
 72  			# XXX: These haven't been fully tested.
 73  			define SHOBJ_CFLAGS -KPIC
 74  			define SHOBJ_LDFLAGS "-G"
 75  			define SH_CFLAGS -KPIC
 76  			define SH_LINKFLAGS -Wl,-export-dynamic
 77  			define SH_SOPREFIX -Wl,-h,
 78  		}
 79  	}
 80  	*-*-solaris* {
 81  		if {[msg-quiet cc-check-decls __SUNPRO_C]} {
 82  			msg-result "Found sun stdio compiler"
 83  			# sun stdio compiler
 84  			# XXX: These haven't been fully tested.
 85  			define SHOBJ_CFLAGS -KPIC
 86  			define SHOBJ_LDFLAGS "-G"
 87  			define SH_CFLAGS -KPIC
 88  			define SH_LINKFLAGS -Wl,-export-dynamic
 89  			define SH_SOPREFIX -Wl,-h,
 90  		}
 91  	}
 92  	*-*-hpux {
 93  		# XXX: These haven't been tested
 94  		define SHOBJ_CFLAGS "+O3 +z"
 95  		define SHOBJ_LDFLAGS -b
 96  		define SH_CFLAGS +z
 97  		define SH_LINKFLAGS -Wl,+s
 98  		define LD_LIBRARY_PATH SHLIB_PATH
 99  	}
100  	*-*-haiku {
101  		define SHOBJ_CFLAGS ""
102  		define SHOBJ_LDFLAGS -shared
103  		define SH_CFLAGS ""
104  		define SH_LDFLAGS -shared
105  		define SH_LINKFLAGS ""
106  		define SH_SOPREFIX ""
107  		define LD_LIBRARY_PATH LIBRARY_PATH
108  	}
109  }
110  
111  if {![is-defined SHOBJ_LDFLAGS_R]} {
112  	define SHOBJ_LDFLAGS_R [get-define SHOBJ_LDFLAGS]
113  }