GHC new build system megapatch
[ghc-hetmet.git] / mk / project.mk.in
1 # WARNING: mk/project.mk is automatically generated from mk/project.mk.in by
2 # ./configure.  Make sure you are editing mk/project.mk.in, not mk/project.mk.
3
4 ################################################################################
5 #
6 # GHC Version
7 #
8
9 # ProjectVersion    is treated as a *string*
10 # ProjectVersionInt is treated as an *integer* (for cpp defines)
11
12 # Versioning scheme: A.B.C
13 #         A: major version, decimal, any number of digits
14 #         B: minor version, decimal, any number of digits
15 #         C: patchlevel, one digit, omitted if zero.
16 #
17 # ProjectVersionInt does *not* contain the patchlevel (rationale: this
18 # figure is used for conditional compilations, and library interfaces
19 # etc. are not supposed to change between patchlevels).
20 #
21 # The ProjectVersionInt is included in interface files, and GHC
22 # checks that it's reading interface generated by the same ProjectVersion
23 # as itself. It does this even though interface file syntax may not 
24 # change between versions.  Rationale: calling conventions or other 
25 # random .o-file stuff might change even if the .hi syntax doesn't
26
27 ProjectName       = @ProjectName@
28 ProjectTags       =
29 ProjectVersion    = @ProjectVersion@$(ProjectTags)
30 ProjectVersionInt = @ProjectVersionInt@
31 ProjectPatchLevel = @ProjectPatchLevel@
32
33 ################################################################################
34 #
35 #               Platform variables
36 #
37 ################################################################################
38
39 # A "platform" is the GNU cpu-type/manufacturer/operating-system target machine
40 # specifier.  E.g. sparc-sun-solaris2
41 #
42 # Build  platform: the platform on which we are doing this build
43 # Host   platform: the platform on which these binaries will run
44 # Target platform: the platform for which this compiler will generate code
45 #
46 # We don't support build & host being different, because the build
47 # process creates binaries that are run during the build, and also
48 # installed.
49 #
50 # If host & target are different, then we are building a compiler
51 # which will generate intermediate .hc files to port to the target
52 # architecture for bootstrapping.  The libraries and stage 2 compiler
53 # will be built as HC files for the target system, and likely won't
54 # build on this host platform.
55 #
56 # An important invariant is that for any piece of source code, the
57 # platform on which the code is going to run is the HOST platform,
58 # and the platform on which we are building is the BUILD platform.
59 # Additionally for the compiler, the platform this compiler will
60 # generate code for is the TARGET.  TARGET is not meaningful outside
61 # the compiler sources.
62 #
63 # Guidelines for when to use HOST vs. TARGET:
64 #
65 #  - In the build system (Makefile, foo.mk), normally we should test
66 #    $(HOSTPLATFORM).  There are some cases (eg. installation), where
67 #    we expect $(HOSTPLATFORM)==$(TARGETPLATFORM), so in those cases it
68 #    doesn't matter which is used.
69 #
70 #  - In the compiler itself, we should test HOST or TARGET depending
71 #    on whether the conditional relates to the code being generated, or
72 #    the platform on which the compiler is running.  See the section
73 #    on "Coding Style" in the commentary for more details.
74 #
75 #  - In all other code, we should be testing HOST only.
76 #
77 # NOTE: cross-compiling is not well supported by the build system.
78 # You have to do a lot of work by hand to cross compile: see the
79 # section on "Porting GHC" in the Building Guide.
80
81 HOSTPLATFORM                    = @HostPlatform@
82 TARGETPLATFORM                  = @TargetPlatform@
83 BUILDPLATFORM                   = @BuildPlatform@
84
85 # Hack alert:
86 # in one or two places, we need to get at the OS version (major and
87 # perhaps even minor), HostOS_Full is the OS name reported by
88 # AC_CANONICAL_SYSTEM.
89 #
90 HostPlatform_CPP                = @HostPlatform_CPP@
91 HostArch_CPP                    = @HostArch_CPP@
92 HostOS_CPP                      = @HostOS_CPP@
93 HostOS_Full                     = @HostOS_Full@
94 HostVendor_CPP                  = @HostVendor_CPP@
95
96 TargetPlatform_CPP              = @TargetPlatform_CPP@
97 TargetArch_CPP                  = @TargetArch_CPP@
98 TargetOS_CPP                    = @TargetOS_CPP@
99 TargetVendor_CPP                = @TargetVendor_CPP@
100
101 BuildPlatform_CPP               = @BuildPlatform_CPP@
102 BuildArch_CPP                   = @BuildArch_CPP@
103 BuildOS_CPP                     = @BuildOS_CPP@
104 BuildVendor_CPP                 = @BuildVendor_CPP@
105
106 @HostPlatform_CPP@_HOST           = 1
107 @TargetPlatform_CPP@_TARGET       = 1
108 @BuildPlatform_CPP@_BUILD         = 1
109
110 @HostArch_CPP@_HOST_ARCH          = 1
111 @TargetArch_CPP@_TARGET_ARCH      = 1
112 @BuildArch_CPP@_BUILD_ARCH        = 1
113
114 @HostOS_CPP@_HOST_OS              = 1
115 @TargetOS_CPP@_TARGET_OS          = 1
116 @BuildOS_CPP@_BUILD_OS            = 1
117
118 @HostVendor_CPP@_HOST_VENDOR      = 1
119 @TargetVendor_CPP@_TARGET_VENDOR  = 1
120 @BuildVendor_CPP@_BUILD_VENDOR    = 1
121
122 ################################################################################
123 #
124 #               Global configuration options
125 #
126 ################################################################################
127
128 # Leading underscores on symbol names in object files
129 # Valid options: YES/NO
130 #
131 LeadingUnderscore=@LeadingUnderscore@
132
133 # Pin a suffix on executables? If so, what (Windows only).
134 exeext=@exeext@
135 soext=@soext@
136
137 # Windows=YES if on a Windows platform
138 ifneq "$(findstring $(HostOS_CPP), mingw32 cygwin32)" ""
139 Windows=YES
140 else
141 Windows=NO
142 endif
143