diff options
author | Simon Marlow <simonmar@microsoft.com> | 2006-04-07 02:05:11 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2006-04-07 02:05:11 +0000 |
commit | 0065d5ab628975892cea1ec7303f968c3338cbe1 (patch) | |
tree | 8e2afe0ab48ee33cf95009809d67c9649573ef92 /includes/Makefile | |
parent | 28a464a75e14cece5db40f2765a29348273ff2d2 (diff) | |
download | haskell-0065d5ab628975892cea1ec7303f968c3338cbe1.tar.gz |
Reorganisation of the source tree
Most of the other users of the fptools build system have migrated to
Cabal, and with the move to darcs we can now flatten the source tree
without losing history, so here goes.
The main change is that the ghc/ subdir is gone, and most of what it
contained is now at the top level. The build system now makes no
pretense at being multi-project, it is just the GHC build system.
No doubt this will break many things, and there will be a period of
instability while we fix the dependencies. A straightforward build
should work, but I haven't yet fixed binary/source distributions.
Changes to the Building Guide will follow, too.
Diffstat (limited to 'includes/Makefile')
-rw-r--r-- | includes/Makefile | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/includes/Makefile b/includes/Makefile new file mode 100644 index 0000000000..83b74d49a7 --- /dev/null +++ b/includes/Makefile @@ -0,0 +1,181 @@ +# ----------------------------------------------------------------------------- + +TOP = .. +include $(TOP)/mk/boilerplate.mk + +# +# All header files +# +H_FILES = $(filter-out gmp.h,$(wildcard *.h)) gmp.h + +# +# Options -- if we're building unregisterised, add a couple of -D's +# +ifeq "$(GhcUnregisterised)" "YES" +SRC_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER +endif + +SRC_CC_OPTS += -I. -I../rts + +# +# Header file built from the configure script's findings +# +H_CONFIG = ghcautoconf.h +H_PLATFORM = ghcplatform.h + +boot :: gmp.h + +all :: $(H_CONFIG) $(H_PLATFORM) + +# gmp.h is copied from the GMP directory +gmp.h : $(FPTOOLS_TOP)/rts/gmp/gmp.h + $(CP) $< $@ + +# The fptools configure script creates the configuration header file and puts it +# in fptools/mk/config.h. We copy it down to here (without any PACKAGE_FOO +# definitions to avoid clashes), prepending some make variables specifying cpp +# platform variables. + +ifneq "$(TARGETPLATFORM)" "$(HOSTPLATFORM)" + +$(H_CONFIG) : + @echo "*** Cross-compiling: please copy $(H_CONFIG) from the target system" + @exit 1 + +else + +$(H_CONFIG) : $(FPTOOLS_TOP)/mk/config.h $(FPTOOLS_TOP)/mk/config.mk + +$(H_CONFIG) : Makefile + @echo "#ifndef __GHCAUTOCONF_H__" >$@ + @echo "#define __GHCAUTOCONF_H__" >>$@ +# Turn '#define PACKAGE_FOO "blah"' into '/* #undef PACKAGE_FOO */'. + @sed 's,^\([ ]*\)#[ ]*define[ ][ ]*\(PACKAGE_[A-Z]*\)[ ][ ]*".*".*$$,\1/* #undef \2 */,' $(FPTOOLS_TOP)/mk/config.h >> $@ + @echo "#endif /* __GHCAUTOCONF_H__ */" >> $@ + @echo "Done." + +endif + +$(H_PLATFORM) : Makefile + @echo "Creating $@..." + @$(RM) $@ + @echo "#ifndef __GHCPLATFORM_H__" >$@ + @echo "#define __GHCPLATFORM_H__" >>$@ + @echo >> $@ + @echo "#define BuildPlatform_TYPE $(HostPlatform_CPP)" >> $@ + @echo "#define HostPlatform_TYPE $(TargetPlatform_CPP)" >> $@ + @echo >> $@ + @echo "#define $(HostPlatform_CPP)_BUILD 1" >> $@ + @echo "#define $(TargetPlatform_CPP)_HOST 1" >> $@ + @echo >> $@ + @echo "#define $(HostArch_CPP)_BUILD_ARCH 1" >> $@ + @echo "#define $(TargetArch_CPP)_HOST_ARCH 1" >> $@ + @echo "#define BUILD_ARCH \"$(HostArch_CPP)\"" >> $@ + @echo "#define HOST_ARCH \"$(TargetArch_CPP)\"" >> $@ + @echo >> $@ + @echo "#define $(HostOS_CPP)_BUILD_OS 1" >> $@ + @echo "#define $(TargetOS_CPP)_HOST_OS 1" >> $@ + @echo "#define BUILD_OS \"$(HostOS_CPP)\"" >> $@ + @echo "#define HOST_OS \"$(TargetOS_CPP)\"" >> $@ +ifeq "$(HostOS_CPP)" "irix" + @echo "#ifndef $(IRIX_MAJOR)_HOST_OS" >> $@ + @echo "#define $(IRIX_MAJOR)_HOST_OS 1" >> $@ + @echo "#endif" >> $@ +endif + @echo >> $@ + @echo "#define $(HostVendor_CPP)_BUILD_VENDOR 1" >> $@ + @echo "#define $(TargetVendor_CPP)_HOST_VENDOR 1" >> $@ + @echo "#define BUILD_VENDOR \"$(HostVendor_CPP)\"" >> $@ + @echo "#define HOST_VENDOR \"$(TargetVendor_CPP)\"" >> $@ + @echo >> $@ + @echo "/* These TARGET macros are for backwards compatibily... DO NOT USE! */" >> $@ + @echo "#define TargetPlatform_TYPE $(TargetPlatform_CPP)" >> $@ + @echo "#define $(TargetPlatform_CPP)_TARGET 1" >> $@ + @echo "#define $(TargetArch_CPP)_TARGET_ARCH 1" >> $@ + @echo "#define TARGET_ARCH \"$(TargetArch_CPP)\"" >> $@ + @echo "#define $(TargetOS_CPP)_TARGET_OS 1" >> $@ + @echo "#define TARGET_OS \"$(TargetOS_CPP)\"" >> $@ + @echo "#define $(TargetVendor_CPP)_TARGET_VENDOR 1" >> $@ + @echo >> $@ + @echo "#endif /* __GHCPLATFORM_H__ */" >> $@ + @echo "Done." + +# --------------------------------------------------------------------------- +# Make DerivedConstants.h for the compiler + +all :: DerivedConstants.h + +ifneq "$(TARGETPLATFORM)" "$(HOSTPLATFORM)" + +DerivedConstants.h : + @echo "*** Cross-compiling: please copy DerivedConstants.h from the target system" + @exit 1 + +else + +mkDerivedConstants.c : $(H_CONFIG) $(H_PLATFORM) + +mkDerivedConstantsHdr : mkDerivedConstants.o + $(CC) -o $@ $(CC_OPTS) $(LD_OPTS) mkDerivedConstants.o + +DerivedConstants.h : mkDerivedConstantsHdr + ./mkDerivedConstantsHdr >$@ + +endif + +CLEAN_FILES += mkDerivedConstantsHdr$(exeext) DerivedConstants.h + +# ----------------------------------------------------------------------------- +# + +all :: GHCConstants.h + +ifneq "$(TARGETPLATFORM)" "$(HOSTPLATFORM)" + +GHCConstants.h : + @echo "*** Cross-compiling: please copy DerivedConstants.h from the target system" + @exit 1 + +else + +mkGHCConstants : mkGHCConstants.o + $(CC) -o $@ $(CC_OPTS) $(LD_OPTS) mkGHCConstants.o + +mkGHCConstants.o : mkDerivedConstants.c + $(CC) -o $@ $(CC_OPTS) -c $< -DGEN_HASKELL + +GHCConstants.h : mkGHCConstants + ./mkGHCConstants >$@ + +endif + +CLEAN_FILES += mkGHCConstants$(exeext) GHCConstants.h + +# --------------------------------------------------------------------------- +# boot setup: +# +# Need config.h to make dependencies in the runtime system source. +# +boot :: all + +# +# Install all header files +# +# Hackily set the install destination here: +# +# Note: we keep per-platform copies of all the include files +# (ditto for interface files). This is not *really* needed, but +# it gives (perhaps) a cleaner binary dist structure..might change. +# +override datadir:=$(libdir)/include +INSTALL_DATAS += $(H_FILES) $(H_CONFIG) $(H_PLATFORM) + +# +# `make clean' settings: +# +CLEAN_FILES += $(H_CONFIG) $(H_PLATFORM) + +# +# Finally, slurp in the standard targets. +# +include $(TOP)/mk/target.mk |