Advertisement
Guest User

TargetConditionals.h

a guest
Dec 10th, 2012
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.79 KB | None | 0 0
  1. /*
  2.  * Copyright (c) 2000-2008 by Apple Inc.. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  *
  6.  * This file contains Original Code and/or Modifications of Original Code
  7.  * as defined in and that are subject to the Apple Public Source License
  8.  * Version 2.0 (the 'License'). You may not use this file except in
  9.  * compliance with the License. Please obtain a copy of the License at
  10.  * http://www.opensource.apple.com/apsl/ and read it before using this
  11.  * file.
  12.  *
  13.  * The Original Code and all software distributed under the License are
  14.  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  15.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  16.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  18.  * Please see the License for the specific language governing rights and
  19.  * limitations under the License.
  20.  *
  21.  * @APPLE_LICENSE_HEADER_END@
  22.  */
  23.  
  24. /*
  25.      File:       TargetConditionals.h
  26.  
  27.      Contains:   Autoconfiguration of TARGET_ conditionals for Mac OS X and iPhone
  28.      
  29.                  Note:  TargetConditionals.h in 3.4 Universal Interfaces works
  30.                         with all compilers.  This header only recognizes compilers
  31.                         known to run on Mac OS X.
  32.  
  33. */
  34.  
  35. #ifndef __TARGETCONDITIONALS__
  36. #define __TARGETCONDITIONALS__
  37. /****************************************************************************************************
  38.  
  39.     TARGET_CPU_*    
  40.     These conditionals specify which microprocessor instruction set is being
  41.     generated.  At most one of these is true, the rest are false.
  42.  
  43.         TARGET_CPU_PPC          - Compiler is generating PowerPC instructions for 32-bit mode
  44.         TARGET_CPU_PPC64        - Compiler is generating PowerPC instructions for 64-bit mode
  45.         TARGET_CPU_68K          - Compiler is generating 680x0 instructions
  46.         TARGET_CPU_X86          - Compiler is generating x86 instructions
  47.         TARGET_CPU_ARM          - Compiler is generating ARM instructions
  48.         TARGET_CPU_MIPS         - Compiler is generating MIPS instructions
  49.         TARGET_CPU_SPARC        - Compiler is generating Sparc instructions
  50.         TARGET_CPU_ALPHA        - Compiler is generating Dec Alpha instructions
  51.  
  52.  
  53.     TARGET_OS_*
  54.     These conditionals specify in which Operating System the generated code will
  55.     run. The MAC/WIN32/UNIX conditionals are mutually exclusive.  The EMBEDDED/IPHONE
  56.     conditionals are variants of TARGET_OS_MAC.
  57.  
  58.         TARGET_OS_MAC           - Generate code will run under Mac OS
  59.         TARGET_OS_WIN32         - Generate code will run under 32-bit Windows
  60.         TARGET_OS_UNIX          - Generate code will run under some non Mac OS X unix
  61.         TARGET_OS_EMBEDDED      - Generate code will run under an embedded OS variant
  62.                                   of TARGET_OS_MAC
  63.         TARGET_OS_IPHONE        - Generate code will run under iPhone OS which
  64.                                   is a variant of TARGET_OS_MAC.
  65.  
  66.     TARGET_RT_*
  67.     These conditionals specify in which runtime the generated code will
  68.     run. This is needed when the OS and CPU support more than one runtime
  69.     (e.g. Mac OS X supports CFM and mach-o).
  70.  
  71.         TARGET_RT_LITTLE_ENDIAN - Generated code uses little endian format for integers
  72.         TARGET_RT_BIG_ENDIAN    - Generated code uses big endian format for integers    
  73.         TARGET_RT_64_BIT        - Generated code uses 64-bit pointers    
  74.         TARGET_RT_MAC_CFM       - TARGET_OS_MAC is true and CFM68K or PowerPC CFM (TVectors) are used
  75.         TARGET_RT_MAC_MACHO     - TARGET_OS_MAC is true and Mach-O/dlyd runtime is used
  76.  
  77.  
  78.     TARGET_IPHONE_SIMULATOR     - Generate code for running under iPhone Simulator
  79.        
  80.  
  81. ****************************************************************************************************/
  82.  
  83.  
  84. /*
  85.  *    gcc based compiler used on Mac OS X
  86.  */
  87. #if defined(__GNUC__) && ( defined(__APPLE_CPP__) || defined(__APPLE_CC__) || defined(__MACOS_CLASSIC__) )
  88.     #define TARGET_OS_MAC               1
  89.     #define TARGET_OS_WIN32             0
  90.     #define TARGET_OS_UNIX              0
  91.     #define TARGET_OS_EMBEDDED          0
  92.     #define TARGET_OS_IPHONE            0
  93.     #define TARGET_IPHONE_SIMULATOR     0
  94.     #if defined(__ppc__)
  95.         #define TARGET_CPU_PPC          1
  96.         #define TARGET_CPU_PPC64        0
  97.         #define TARGET_CPU_68K          0
  98.         #define TARGET_CPU_X86          0
  99.         #define TARGET_CPU_X86_64       0
  100.         #define TARGET_CPU_ARM          0
  101.         #define TARGET_CPU_MIPS         0
  102.         #define TARGET_CPU_SPARC        0  
  103.         #define TARGET_CPU_ALPHA        0
  104.         #define TARGET_RT_LITTLE_ENDIAN 0
  105.         #define TARGET_RT_BIG_ENDIAN    1
  106.         #define TARGET_RT_64_BIT        0
  107.         #ifdef __MACOS_CLASSIC__
  108.            #define TARGET_RT_MAC_CFM    1
  109.            #define TARGET_RT_MAC_MACHO  0
  110.         #else
  111.            #define TARGET_RT_MAC_CFM    0
  112.            #define TARGET_RT_MAC_MACHO  1
  113.        #endif
  114.     #elif defined(__ppc64__)
  115.         #define TARGET_CPU_PPC          0
  116.         #define TARGET_CPU_PPC64        1
  117.         #define TARGET_CPU_68K          0
  118.         #define TARGET_CPU_X86          0
  119.         #define TARGET_CPU_X86_64       0
  120.         #define TARGET_CPU_ARM          0
  121.         #define TARGET_CPU_MIPS         0
  122.         #define TARGET_CPU_SPARC        0  
  123.         #define TARGET_CPU_ALPHA        0
  124.         #define TARGET_RT_LITTLE_ENDIAN 0
  125.         #define TARGET_RT_BIG_ENDIAN    1
  126.         #define TARGET_RT_64_BIT        1
  127.         #define TARGET_RT_MAC_CFM       0
  128.         #define TARGET_RT_MAC_MACHO     1
  129.      #elif defined(__i386__)
  130.         #define TARGET_CPU_PPC          0
  131.         #define TARGET_CPU_PPC64        0
  132.         #define TARGET_CPU_68K          0
  133.         #define TARGET_CPU_X86          1
  134.         #define TARGET_CPU_X86_64       0
  135.         #define TARGET_CPU_ARM          0
  136.         #define TARGET_CPU_MIPS         0
  137.         #define TARGET_CPU_SPARC        0
  138.         #define TARGET_CPU_ALPHA        0
  139.         #define TARGET_RT_MAC_CFM       0
  140.         #define TARGET_RT_MAC_MACHO     1
  141.         #define TARGET_RT_LITTLE_ENDIAN 1
  142.         #define TARGET_RT_BIG_ENDIAN    0
  143.         #define TARGET_RT_64_BIT        0
  144.      #elif defined(__x86_64__)
  145.         #define TARGET_CPU_PPC          0
  146.         #define TARGET_CPU_PPC64        0
  147.         #define TARGET_CPU_68K          0
  148.         #define TARGET_CPU_X86          0
  149.         #define TARGET_CPU_X86_64       1
  150.         #define TARGET_CPU_ARM          0
  151.         #define TARGET_CPU_MIPS         0
  152.         #define TARGET_CPU_SPARC        0
  153.         #define TARGET_CPU_ALPHA        0
  154.         #define TARGET_RT_MAC_CFM       0
  155.         #define TARGET_RT_MAC_MACHO     1
  156.         #define TARGET_RT_LITTLE_ENDIAN 1
  157.         #define TARGET_RT_BIG_ENDIAN    0
  158.         #define TARGET_RT_64_BIT        1
  159.      #elif defined(__arm__)
  160.         #define TARGET_CPU_PPC          0
  161.         #define TARGET_CPU_PPC64        0
  162.         #define TARGET_CPU_68K          0
  163.         #define TARGET_CPU_X86          0
  164.         #define TARGET_CPU_X86_64       0
  165.         #define TARGET_CPU_ARM          1
  166.         #define TARGET_CPU_MIPS         0
  167.         #define TARGET_CPU_SPARC        0
  168.         #define TARGET_CPU_ALPHA        0
  169.         #define TARGET_RT_MAC_CFM       0
  170.         #define TARGET_RT_MAC_MACHO     1
  171.         #define TARGET_RT_LITTLE_ENDIAN 1
  172.         #define TARGET_RT_BIG_ENDIAN    0
  173.         #define TARGET_RT_64_BIT        0
  174.     #else
  175.         #error unrecognized GNU C compiler
  176.     #endif
  177.  
  178.  
  179. /*
  180.  *   CodeWarrior compiler from Metrowerks/Motorola
  181.  */
  182. #elif defined(__MWERKS__)
  183.     #define TARGET_OS_MAC               1
  184.     #define TARGET_OS_WIN32             0
  185.     #define TARGET_OS_UNIX              0
  186.     #define TARGET_OS_EMBEDDED          0
  187.     #if defined(__POWERPC__)
  188.         #define TARGET_CPU_PPC          1
  189.         #define TARGET_CPU_PPC64        0
  190.         #define TARGET_CPU_68K          0
  191.         #define TARGET_CPU_X86          0
  192.         #define TARGET_CPU_MIPS         0
  193.         #define TARGET_CPU_SPARC        0
  194.         #define TARGET_CPU_ALPHA        0
  195.         #define TARGET_RT_LITTLE_ENDIAN 0
  196.         #define TARGET_RT_BIG_ENDIAN    1
  197.     #elif defined(__INTEL__)
  198.         #define TARGET_CPU_PPC          0
  199.         #define TARGET_CPU_PPC64        0
  200.         #define TARGET_CPU_68K          0
  201.         #define TARGET_CPU_X86          1
  202.         #define TARGET_CPU_MIPS         0
  203.         #define TARGET_CPU_SPARC        0
  204.         #define TARGET_CPU_ALPHA        0
  205.         #define TARGET_RT_LITTLE_ENDIAN 1
  206.         #define TARGET_RT_BIG_ENDIAN    0
  207.     #else
  208.         #error unknown Metrowerks CPU type
  209.     #endif
  210.     #define TARGET_RT_64_BIT            0
  211.     #ifdef __MACH__
  212.         #define TARGET_RT_MAC_CFM       0
  213.         #define TARGET_RT_MAC_MACHO     1
  214.     #else
  215.         #define TARGET_RT_MAC_CFM       1
  216.         #define TARGET_RT_MAC_MACHO     0
  217.     #endif
  218.  
  219. /*
  220.  *   unknown compiler
  221.  */
  222. #else
  223.     #if defined(TARGET_CPU_PPC) && TARGET_CPU_PPC
  224.         #define TARGET_CPU_PPC64    0
  225.         #define TARGET_CPU_68K      0
  226.         #define TARGET_CPU_X86      0
  227.         #define TARGET_CPU_X86_64   0
  228.         #define TARGET_CPU_ARM      0
  229.         #define TARGET_CPU_MIPS     0
  230.         #define TARGET_CPU_SPARC    0
  231.         #define TARGET_CPU_ALPHA    0
  232.     #elif defined(TARGET_CPU_PPC64) && TARGET_CPU_PPC64
  233.         #define TARGET_CPU_PPC      0
  234.         #define TARGET_CPU_68K      0
  235.         #define TARGET_CPU_X86      0
  236.         #define TARGET_CPU_X86_64   0
  237.         #define TARGET_CPU_ARM      0
  238.         #define TARGET_CPU_MIPS     0
  239.         #define TARGET_CPU_SPARC    0
  240.         #define TARGET_CPU_ALPHA    0
  241.     #elif defined(TARGET_CPU_X86) && TARGET_CPU_X86
  242.         #define TARGET_CPU_PPC      0
  243.         #define TARGET_CPU_PPC64    0
  244.         #define TARGET_CPU_X86_64   0
  245.         #define TARGET_CPU_68K      0
  246.         #define TARGET_CPU_ARM      0
  247.         #define TARGET_CPU_MIPS     0
  248.         #define TARGET_CPU_SPARC    0
  249.         #define TARGET_CPU_ALPHA    0
  250.     #elif defined(TARGET_CPU_X86_64) && TARGET_CPU_X86_64
  251.         #define TARGET_CPU_PPC      0
  252.         #define TARGET_CPU_PPC64    0
  253.         #define TARGET_CPU_X86      0
  254.         #define TARGET_CPU_68K      0
  255.         #define TARGET_CPU_ARM      0
  256.         #define TARGET_CPU_MIPS     0
  257.         #define TARGET_CPU_SPARC    0
  258.         #define TARGET_CPU_ALPHA    0
  259.     #elif defined(TARGET_CPU_ARM) && TARGET_CPU_ARM
  260.         #define TARGET_CPU_PPC      0
  261.         #define TARGET_CPU_PPC64    0
  262.         #define TARGET_CPU_X86      0
  263.         #define TARGET_CPU_X86_64   0
  264.         #define TARGET_CPU_68K      0
  265.         #define TARGET_CPU_MIPS     0
  266.         #define TARGET_CPU_SPARC    0
  267.         #define TARGET_CPU_ALPHA    0
  268.     #else
  269.         /*
  270.             NOTE:   If your compiler errors out here then support for your compiler
  271.             has not yet been added to TargetConditionals.h.  
  272.            
  273.             TargetConditionals.h is designed to be plug-and-play.  It auto detects
  274.             which compiler is being run and configures the TARGET_ conditionals
  275.             appropriately.  
  276.            
  277.             The short term work around is to set the TARGET_CPU_ and TARGET_OS_
  278.             on the command line to the compiler (e.g. -DTARGET_CPU_MIPS=1 -DTARGET_OS_UNIX=1)
  279.            
  280.             The long term solution is to add a new case to this file which
  281.             auto detects your compiler and sets up the TARGET_ conditionals.
  282.             Then submit the changes to Apple Computer.
  283.         */
  284.         #error TargetConditionals.h: unknown compiler (see comment above)
  285.         #define TARGET_CPU_PPC    0
  286.         #define TARGET_CPU_68K    0
  287.         #define TARGET_CPU_X86    0
  288.         #define TARGET_CPU_ARM    0
  289.         #define TARGET_CPU_MIPS   0
  290.         #define TARGET_CPU_SPARC  0
  291.         #define TARGET_CPU_ALPHA  0
  292.     #endif
  293.     #define TARGET_OS_MAC                1
  294.     #define TARGET_OS_WIN32              0
  295.     #define TARGET_OS_UNIX               0
  296.     #define TARGET_OS_EMBEDDED           0
  297.     #if TARGET_CPU_PPC || TARGET_CPU_PPC64
  298.         #define TARGET_RT_BIG_ENDIAN     1
  299.         #define TARGET_RT_LITTLE_ENDIAN  0
  300.     #else
  301.         #define TARGET_RT_BIG_ENDIAN     0
  302.         #define TARGET_RT_LITTLE_ENDIAN  1
  303.     #endif
  304.     #if TARGET_CPU_PPC64 || TARGET_CPU_X86_64
  305.         #define TARGET_RT_64_BIT         1
  306.     #else
  307.         #define TARGET_RT_64_BIT         0
  308.     #endif
  309.     #ifdef __MACH__
  310.         #define TARGET_RT_MAC_MACHO      1
  311.         #define TARGET_RT_MAC_CFM        0
  312.     #else
  313.         #define TARGET_RT_MAC_MACHO      0
  314.         #define TARGET_RT_MAC_CFM        1
  315.     #endif
  316.    
  317. #endif
  318.  
  319. #endif  /* __TARGETCONDITIONALS__ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement