xref: /freebsd/contrib/sqlite3/autosetup/cc-shared.tcl (revision 17f0f75308f287efea825457364e2a4de2e107d4)
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