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 23options {} 24 25# Defaults: gcc on unix 26define SHOBJ_CFLAGS -fPIC 27define SHOBJ_LDFLAGS -shared 28define SH_CFLAGS -fPIC 29define SH_LDFLAGS -shared 30define SH_LINKFLAGS -rdynamic 31define SH_LINKRPATH "-Wl,-rpath -Wl,%s" 32define SH_SOEXT .so 33define SH_SOEXTVER .so.%s 34define SH_SOPREFIX -Wl,-soname, 35define LD_LIBRARY_PATH LD_LIBRARY_PATH 36define 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 41switch -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 111if {![is-defined SHOBJ_LDFLAGS_R]} { 112 define SHOBJ_LDFLAGS_R [get-define SHOBJ_LDFLAGS] 113} 114