Config.OSX.pp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. //
  2. // Config.OSX.pp
  3. //
  4. // This file defines some custom config variables for the osx
  5. // platform. It makes some initial guesses about compiler features,
  6. // etc.
  7. //
  8. // *******************************************************************
  9. // NOTE: you should not attempt to copy this file verbatim as your own
  10. // personal Config.pp file. Instead, you should start with an empty
  11. // Config.pp file, and add lines to it when you wish to override
  12. // settings given in here. In the normal ppremake system, this file
  13. // will always be read first, and then your personal Config.pp file
  14. // will be read later, which gives you a chance to override the
  15. // default settings found in this file. However, if you start by
  16. // copying the entire file, it will be difficult to tell which
  17. // settings you have customized, and it will be difficult to upgrade
  18. // to a subsequent version of Panda.
  19. // *******************************************************************
  20. #define IS_OSX 1
  21. // Compiler flags
  22. #define CC gcc
  23. #define CXX g++
  24. #define C++FLAGS_GEN -ftemplate-depth-30
  25. // Configure for universal binaries on OSX.
  26. #defer ARCH_FLAGS $[if $[UNIVERSAL_BINARIES],-arch i386 -arch ppc,]
  27. #define OSX_CDEFS
  28. #define OSX_CFLAGS
  29. // How to compile a C or C++ file into a .o file. $[target] is the
  30. // name of the .o file, $[source] is the name of the source file,
  31. // $[ipath] is a space-separated list of directories to search for
  32. // include files, and $[flags] is a list of additional flags to pass
  33. // to the compiler.
  34. #defer COMPILE_C $[CC] $[CFLAGS_GEN] $[ARCH_FLAGS] $[OSX_CFLAGS] -c -o $[target] $[ipath:%=-I%] $[flags] $[source]
  35. #defer COMPILE_C++ $[CXX] $[C++FLAGS_GEN] $[ARCH_FLAGS] $[OSX_CFLAGS] -c -o $[target] $[ipath:%=-I%] $[flags] $[source]
  36. // What flags should be passed to both C and C++ compilers to enable
  37. // debug symbols? This will be supplied when OPTIMIZE (above) is set
  38. // to 1, 2, or 3.
  39. #defer DEBUGFLAGS -g
  40. // What flags should be passed to both C and C++ compilers to enable
  41. // compiler optimizations? This will be supplied when OPTIMIZE
  42. // (above) is set to 2, 3, or 4.
  43. #defer OPTFLAGS -O2
  44. // By convention, any source file that contains the string _no_opt_ in
  45. // its filename won't have the above compiler optimizations run for it.
  46. #defer no_opt $[findstring _no_opt_,$[source]]
  47. // What define variables should be passed to the compilers for each
  48. // value of OPTIMIZE? We separate this so we can pass these same
  49. // options to interrogate, guaranteeing that the correct interfaces
  50. // are generated. Do not include -D here; that will be supplied
  51. // automatically.
  52. #defer CDEFINES_OPT1 _DEBUG $[EXTRA_CDEFS] $[OSX_CDEFS]
  53. #defer CDEFINES_OPT2 _DEBUG $[EXTRA_CDEFS] $[OSX_CDEFS]
  54. #defer CDEFINES_OPT3 $[EXTRA_CDEFS] $[OSX_CDEFS]
  55. #defer CDEFINES_OPT4 NDEBUG $[EXTRA_CDEFS] $[OSX_CDEFS]
  56. // What additional flags should be passed for each value of OPTIMIZE
  57. // (above)? We separate out the compiler-optimization flags, above,
  58. // so we can compile certain files that give optimizers trouble (like
  59. // the output of lex and yacc) without them, but with all the other
  60. // relevant flags.
  61. #defer CFLAGS_OPT1 $[CDEFINES_OPT1:%=-D%] -Wall $[DEBUGFLAGS]
  62. #defer CFLAGS_OPT2 $[CDEFINES_OPT2:%=-D%] -Wall $[DEBUGFLAGS] $[if $[no_opt],,$[OPTFLAGS]]
  63. #defer CFLAGS_OPT3 $[CDEFINES_OPT3:%=-D%] $[DEBUGFLAGS] $[if $[no_opt],,$[OPTFLAGS]]
  64. #defer CFLAGS_OPT4 $[CDEFINES_OPT4:%=-D%] $[if $[no_opt],,$[OPTFLAGS]]
  65. // What additional flags should be passed to both compilers when
  66. // building shared (relocatable) sources? Some architectures require
  67. // special support for this.
  68. #defer CFLAGS_SHARED -fPIC
  69. // How to generate a C or C++ executable from a collection of .o
  70. // files. $[target] is the name of the binary to generate, and
  71. // $[sources] is the list of .o files. $[libs] is a space-separated
  72. // list of dependent libraries, and $[lpath] is a space-separated list
  73. // of directories in which those libraries can be found.
  74. #defer LINK_BIN_C $[cc_ld] $[ARCH_FLAGS] $[OSX_CFLAGS] -o $[target] $[sources] $[flags] $[lpath:%=-L%] $[libs:%=-l%]\
  75. $[fpath:%=-Wl,-F%] $[patsubst %,-framework %, $[bin_frameworks]]
  76. #defer LINK_BIN_C++ $[cxx_ld] $[ARCH_FLAGS] $[OSX_CFLAGS] \
  77. -o $[target] $[sources]\
  78. $[flags]\
  79. $[lpath:%=-L%] $[libs:%=-l%]\
  80. $[fpath:%=-Wl,-F%] $[patsubst %,-framework %, $[bin_frameworks]]
  81. // How to generate a static C or C++ library. $[target] is the
  82. // name of the library to generate, and $[sources] is the list of .o
  83. // files that will go into the library.
  84. #defer STATIC_LIB_C libtool -static -o $[target] $[sources]
  85. #defer STATIC_LIB_C++ libtool -static -o $[target] $[sources]
  86. // How to run ranlib, if necessary, after generating a static library.
  87. // $[target] is the name of the library. Set this to the empty string
  88. // if ranlib is not necessary on your platform.
  89. #defer RANLIB ranlib $[target]
  90. // Where to put the so_locations file, used by an Irix MIPSPro
  91. // compiler, to generate a map of shared library memory locations.
  92. #defer SO_LOCATIONS $[DTOOL_INSTALL]/etc/so_locations
  93. // How to generate a shared C or C++ library. $[source] and $[target]
  94. // as above, and $[libs] is a space-separated list of dependent
  95. // libraries, and $[lpath] is a space-separated list of directories in
  96. // which those libraries can be found.
  97. #defer SHARED_LIB_C $[cc_ld] $[ARCH_FLAGS] $[OSX_CFLAGS] -o $[target] -dynamiclib -install_name $[notdir $[target]] $[sources] $[lpath:%=-L%] $[libs:%=-l%] $[patsubst %,-framework %, $[frameworks]]
  98. #defer SHARED_LIB_C++ $[cxx_ld] $[ARCH_FLAGS] $[OSX_CFLAGS] -undefined dynamic_lookup -dynamic -dynamiclib -o $[target] -dynamiclib -install_name $[notdir $[target]] $[sources] $[lpath:%=-L%] $[libs:%=-l%] $[patsubst %,-framework %, $[frameworks]]
  99. #defer BUNDLE_LIB_C++ $[cxx_ld] $[ARCH_FLAGS] $[OSX_CFLAGS] -undefined dynamic_lookup -bundle -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%] $[patsubst %,-framework %, $[frameworks]]
  100. // How to install a data file or executable file. $[local] is the
  101. // local name of the file to install, and $[dest] is the name of the
  102. // directory to put it in.
  103. // On Unix systems, we strongly prefer using the install program to
  104. // install files. This has nice features like automatically setting
  105. // the permissions bits, and also is usually clever enough to install
  106. // a running program without crashing the running instance. However,
  107. // it doesn't understanding installing a program from a subdirectory,
  108. // so we have to cd into the source directory first.
  109. #defer install_dash_p $[if $[KEEP_TIMESTAMPS],-p,]
  110. #defer INSTALL $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_DATA] $[install_dash_p] $[notdir $[local]] $[dest]/
  111. #defer INSTALL_PROG $[if $[ne $[dir $[local]], ./],cd ./$[dir $[local]] &&] install -m $[INSTALL_UMASK_PROG] $[install_dash_p] $[notdir $[local]] $[dest]/
  112. // Variable definitions for building with the Irix MIPSPro compiler.
  113. #if $[eq $[USE_COMPILER], MIPS]
  114. #define CC cc -n32 -mips3
  115. #define CXX CC -n32 -mips3
  116. // Turn off a few annoying warning messages.
  117. // 1174 - function 'blah' was declared but never used
  118. // 1201 - trailing comma is nonstandard.
  119. // 1209 - controlling expression is constant, e.g. if (0) { ... }
  120. // 1234 - access control not specified, 'public' by default
  121. // 1355 - extra ";" ignored
  122. // 1375 - destructor for base class is not virtual.
  123. // this one actually is bad. But we got alot of them from the classes
  124. // that we've derived from STL collections. Beware of this.
  125. // 3322 - omission of explicit type is nonstandard ("int" assumed)
  126. #define WOFF_LIST -woff 1174,1201,1209,1234,1355,1375,3322
  127. // Linker warnings
  128. // 85 - definition of SOMESYMBOL in SOMELIB preempts that of definition in
  129. // SOMEOTHERLIB.
  130. #define WOFF_LIST $[WOFF_LIST] -Wl,-LD_MSG:off=85
  131. #defer OPTFLAGS -O2 -OPT:Olimit=2500
  132. #defer CFLAGS_OPT1 $[CDEFINES_OPT1:%=-D%] $[WOFF_LIST] -g
  133. #defer CFLAGS_OPT2 $[CDEFINES_OPT2:%=-D%] $[WOFF_LIST]
  134. #defer CFLAGS_OPT3 $[CDEFINES_OPT3:%=-D%] $[WOFF_LIST]
  135. #defer CFLAGS_OPT4 $[CDEFINES_OPT4:%=-D%] $[WOFF_LIST]
  136. #defer CFLAGS_SHARED
  137. #defer STATIC_LIB_C $[CC] -ar -o $[target] $[sources]
  138. #defer STATIC_LIB_C++ $[CXX] -ar -o $[target] $[sources]
  139. #defer RANLIB
  140. #defer SHARED_FLAGS -Wl,-none -Wl,-update_registry,$[SO_LOCATIONS]
  141. #defer SHARED_LIB_C $[cc_ld] -shared $[SHARED_FLAGS] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%]
  142. #defer SHARED_LIB_C++ $[cxx_ld] -shared $[SHARED_FLAGS] -o $[target] $[sources] $[lpath:%=-L%] $[libs:%=-l%]
  143. #endif
  144. // Assume that OSX has OpenGL available.
  145. #define HAVE_GL 1
  146. // What additional flags should we pass to interrogate?
  147. #define SYSTEM_IGATE_FLAGS -D__FLT_EVAL_METHOD__=0 -D__i386__ -D__const=const -Dvolatile -Dmutable -D__LITTLE_ENDIAN__ -D__inline__=inline -D__GNUC__
  148. // We don't need worry about defining WORDS_BIGENDIAN (and we
  149. // shouldn't anyway, since ppc and intel are different). We rely on
  150. // dtoolbase.h to determine this at compilation time.
  151. #define WORDS_BIGENDIAN
  152. // Does the C++ compiler support namespaces?
  153. #define HAVE_NAMESPACE 1
  154. // Does the C++ compiler support ios::binary?
  155. #define HAVE_IOS_BINARY 1
  156. // How about the typename keyword?
  157. #define HAVE_TYPENAME 1
  158. // Will the compiler avoid inserting extra bytes in structs between a
  159. // base struct and its derived structs? It is safe to define this
  160. // false if you don't know, but if you know that you can get away with
  161. // this you may gain a tiny performance gain by defining this true.
  162. // If you define this true incorrectly, you will get lots of
  163. // assertion failures on execution.
  164. #define SIMPLE_STRUCT_POINTERS
  165. // Do we have a gettimeofday() function?
  166. #define HAVE_GETTIMEOFDAY 1
  167. // Does gettimeofday() take only one parameter?
  168. #define GETTIMEOFDAY_ONE_PARAM
  169. // Do we have getopt() and/or getopt_long_only() built into the
  170. // system?
  171. #define HAVE_GETOPT 1
  172. #define HAVE_GETOPT_LONG_ONLY
  173. // Are the above getopt() functions defined in getopt.h, or somewhere else?
  174. #define HAVE_GETOPT_H 1
  175. // Can we determine the terminal width by making an ioctl(TIOCGWINSZ) call?
  176. #define IOCTL_TERMINAL_WIDTH 1
  177. // Do the system headers define a "streamsize" typedef? How about the
  178. // ios::binary enumerated value? And other ios typedef symbols like
  179. // ios::openmode and ios::fmtflags?
  180. #define HAVE_STREAMSIZE 1
  181. #define HAVE_IOS_BINARY 1
  182. #define HAVE_IOS_TYPEDEFS 1
  183. // Can we safely call getenv() at static init time?
  184. #define STATIC_INIT_GETENV 1
  185. // Can we read the file /proc/self/environ to determine our
  186. // environment variables at static init time?
  187. #define HAVE_PROC_SELF_ENVIRON 1
  188. // Do we have a global pair of argc/argv variables that we can read at
  189. // static init time? Should we prototype them? What are they called?
  190. #define HAVE_GLOBAL_ARGV
  191. #define PROTOTYPE_GLOBAL_ARGV
  192. #define GLOBAL_ARGV __Argv
  193. #define GLOBAL_ARGC __Argc
  194. // Can we read the file /proc/self/cmdline to determine our
  195. // command-line arguments at static init time?
  196. #define HAVE_PROC_SELF_CMDLINE
  197. // Should we include <iostream> or <iostream.h>? Define HAVE_IOSTREAM
  198. // to nonempty if we should use <iostream>, or empty if we should use
  199. // <iostream.h>.
  200. #define HAVE_IOSTREAM 1
  201. // Do we have a true stringstream class defined in <sstream>?
  202. #define HAVE_SSTREAM 1
  203. // Does fstream::open() require a third parameter, specifying the
  204. // umask? Versions of gcc prior to 3.2 had this.
  205. #define HAVE_OPEN_MASK
  206. // Do the compiler or system libraries define wchar_t for you?
  207. #define HAVE_WCHAR_T 1
  208. // Does <string> define the typedef wstring? Most do, but for some
  209. // reason, versions of gcc before 3.0 didn't do this.
  210. #define HAVE_WSTRING 1
  211. // Do we have <new>?
  212. #define HAVE_NEW 1
  213. // Do we have <io.h>?
  214. #define HAVE_IO_H
  215. // Do we have <malloc.h>?
  216. #define HAVE_MALLOC_H
  217. // Do we have <alloca.h>?
  218. #define HAVE_ALLOCA_H 1
  219. // Do we have <locale.h>?
  220. #define HAVE_LOCALE_H 1
  221. // Do we have <string.h>?
  222. #define HAVE_STRING_H 1
  223. // Do we have <stdlib.h>?
  224. #define HAVE_STDLIB_H 1
  225. // Do we have <limits.h>?
  226. #define HAVE_LIMITS_H 1
  227. // Do we have <minmax.h>?
  228. #define HAVE_MINMAX_H
  229. // Do we have <sys/types.h>?
  230. #define HAVE_SYS_TYPES_H 1
  231. #define HAVE_SYS_TIME_H 1
  232. // Do we have <unistd.h>?
  233. #define HAVE_UNISTD_H 1
  234. // Do we have <utime.h>?
  235. #define HAVE_UTIME_H 1
  236. // Do we have <dirent.h>?
  237. #define HAVE_DIRENT_H 1
  238. // Do we have <glob.h> (and do we want to use it instead of dirent.h)?
  239. #define HAVE_GLOB_H 1
  240. // Do we have <sys/soundcard.h> (and presumably a Linux-style audio
  241. // interface)?
  242. #define HAVE_SYS_SOUNDCARD_H 1
  243. // Do we have <ucontext.h> (and therefore makecontext() / swapcontext())?
  244. #define HAVE_UCONTEXT_H
  245. // Do we have RTTI (and <typeinfo>)?
  246. #define HAVE_RTTI 1
  247. // Modern versions of gcc do support the latest STL allocator
  248. // definitions.
  249. #define USE_STL_ALLOCATOR 1
  250. // The dynamic library file extension (usually .so .dll or .dylib):
  251. #define DYNAMIC_LIB_EXT .dylib
  252. #define STATIC_LIB_EXT .a
  253. // If you need to build .so files in addition to .dylibs, declare this
  254. // too. Python 2.4 on OSX 10.4 seems to require this (it won't import
  255. // a .dylib file directly).
  256. //#define BUNDLE_EXT .so