diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2010-03-06 11:34:26 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2010-03-06 11:34:26 +0000 |
commit | 4fb5e74381515c01e164880e6023b08c40bb650a (patch) | |
tree | a0b8a3449d211bd4ca7f8139e68fcb5e6a6f5fa0 /makefiles | |
parent | 4077b8b9e7940b515c054c5c22565e5b98c5df37 (diff) | |
download | buildsystem-4fb5e74381515c01e164880e6023b08c40bb650a.tar.gz buildsystem-4fb5e74381515c01e164880e6023b08c40bb650a.tar.bz2 |
Beginnings of support for multiple toolchains
svn path=/trunk/tools/buildsystem/; revision=10104
Diffstat (limited to 'makefiles')
-rw-r--r-- | makefiles/Makefile.gcc | 81 | ||||
-rw-r--r-- | makefiles/Makefile.norcroft | 53 | ||||
-rw-r--r-- | makefiles/Makefile.tools | 168 |
3 files changed, 200 insertions, 102 deletions
diff --git a/makefiles/Makefile.gcc b/makefiles/Makefile.gcc new file mode 100644 index 0000000..fa2660b --- /dev/null +++ b/makefiles/Makefile.gcc @@ -0,0 +1,81 @@ +# GCC specific toolchain setup +# We assume that we're using a standard GCC/binutils environment + +CCDEF := -D +CCOPT := -O2 +CCNOOPT := -O0 +CCDBG := -g +CCINC := -I +CCLIB := -L +CCAS := -xassembler-with-cpp +CCSHR := -fPIC + +CXXDEF := -D +CXXOPT := -O2 +CXXNOOPT := -O0 +CXXDBG := -g +CXXINC := -I +CXXLIB := -L +CXXSHR := -fPIC + +LDDBG := -g +# Reevaluation is required here +LDSHR = -shared -Wl,-soname,$(SONAME) + +ARFLG := cru + +# Extensions for coverage target +ifeq ($(MAKECMDGOALS),coverage) + COVCFLAGS ?= -fprofile-arcs -ftest-coverage + COVCXXFLAGS ?= -fprofile-arcs -ftest-coverage + COVLDFLAGS ?= -lgcov + + CFLAGS := $(CFLAGS) $(COVCFLAGS) + CXXFLAGS := $(CXXFLAGS) $(COVCXXFLAGS) + LDFLAGS := $(LDFLAGS) $(COVLDFLAGS) +endif + +# Extensions for profile target +ifeq ($(MAKECMDGOALS),profile) + PROFCFLAGS ?= -pg + PROFCXXFLAGS ?= -pg + PROFLDFLAGS ?= -pg + + CFLAGS := $(CFLAGS) $(PROFCFLAGS) + CXXFLAGS := $(CXXFLAGS) $(PROFCXXFLAGS) + LDFLAGS := $(LDFLAGS) $(PROFLDFLAGS) +endif + +# RISC OS module extensions +ifeq ($(COMPONENT_TYPE),riscos-module) + ifneq ($(TARGET),riscos) + $(error Attempting to build a RISC OS module for a non-RISC OS target) + endif + + CFLAGS := $(CFLAGS) -mmodule + CXXFLAGS := $(CXXFLAGS) -mmodule + LDFLAGS := $(LDFLAGS) -mmodule +endif + +############################################################################### +# Other settings +############################################################################### + +# Determine if the compiler supports simultaneous build & dep. +ccvsn := $(shell $(CC) --version) +# "<binary name> (GCC) x.y.z (foo bar baz)" +ifeq ($(word 2,$(ccvsn)),(GCC)) + # If the major version (x, above) is not 2, then assume build & dep. + # This will break if using a version of GCC < 2, but that's unlikely. + GCCVER := $(word 1,$(subst ., ,$(word 3, $(ccvsn)))) + ifneq ($(GCCVER),2) + CC_CAN_BUILD_AND_DEP ?= yes + endif +else + # Older versions of GCC just output the version number + GCCVER := $(word 1,$(subst ., ,$(ccvsn))) + ifneq ($(GCCVER),2) + CC_CAN_BUILD_AND_DEP ?= yes + endif +endif + diff --git a/makefiles/Makefile.norcroft b/makefiles/Makefile.norcroft new file mode 100644 index 0000000..8becc8b --- /dev/null +++ b/makefiles/Makefile.norcroft @@ -0,0 +1,53 @@ +# Norcroft specific toolchain setup + +CCDEF := -D +CCOPT := -Otime +CCNOOPT := +CCDBG := -g +CCINC := -I +CCLIB := -L +# TODO: Norcroft CC cannot do assembler as C +CCAS := +CCSHR := + +CXXDEF := -D +CXXOPT := -O2 +CXXNOOPT := -O0 +CXXDBG := -g +CXXINC := -I +CXXLIB := -L +CXXSHR := -fPIC + +LDDBG := -g +LDSHR := + +ARFLG := -c + +# Extensions for coverage target +ifeq ($(MAKECMDGOALS),coverage) + $(error Coverage is not supported with Norcroft) +endif + +# Extensions for profile target +ifeq ($(MAKECMDGOALS),profile) + $(error Profile is not supported with Norcroft) +endif + +# RISC OS module extensions +ifeq ($(COMPONENT_TYPE),riscos-module) + ifneq ($(TARGET),riscos) + $(error Attempting to build a RISC OS module for a non-RISC OS target) + endif + + CFLAGS := $(CFLAGS) -zM + CXXFLAGS := $(CXXFLAGS) -zM + LDFLAGS := $(LDFLAGS) -zM +endif + +############################################################################### +# Other settings +############################################################################### + +# Determine if the compiler supports simultaneous build & dep. +CC_CANNOT_DEP := yes + diff --git a/makefiles/Makefile.tools b/makefiles/Makefile.tools index 9fedf0b..db5d7cb 100644 --- a/makefiles/Makefile.tools +++ b/makefiles/Makefile.tools @@ -126,6 +126,7 @@ ifeq ($(TARGET),riscos) endif endif + # TODO: this assumes GCC CFLAGS := $(CFLAGS) -mpoke-function-name -I$(GCCSDK_INSTALL_ENV)/include CXXFLAGS := $(CXXFLAGS) -mpoke-function-name -I$(GCCSDK_INSTALL_ENV)/include LDFLAGS := $(LDFLAGS) -L$(GCCSDK_INSTALL_ENV)/lib @@ -166,6 +167,7 @@ ifeq ($(TARGET),beos) endif endif + # TODO: this assumes GCC CFLAGS := $(CFLAGS) -I$(BEOS_INSTALL_ENV)/include CXXFLAGS := $(CXXFLAGS) -I$(BEOS_INSTALL_ENV)/include LDFLAGS := $(LDFLAGS) -L$(BEOS_INSTALL_ENV)/lib @@ -188,6 +190,7 @@ ifeq ($(TARGET),windows) PKGCONFIG ?= PKG_CONFIG_LIBDIR="$(MINGW_INSTALL_ENV)/lib/pkgconfig" pkg-config endif + # TODO: this assumes GCC CFLAGS := $(CFLAGS) -U__STRICT_ANSI__ -I$(MINGW_INSTALL_ENV)/include CXXFLAGS := $(CXXFLAGS) -U__STRICT_ANSI__ -I$(MINGW_INSTALL_ENV)/include LDFLAGS := $(LDFLAGS) -L$(MINGW_INSTALL_ENV)/lib @@ -242,88 +245,6 @@ TOUCH ?= touch XSLTPROC ?= xsltproc ############################################################################### -# Default assembler/compiler/linker/archiver flags -############################################################################### - -ifeq ($(BUILD),release) - OPTCFLAGS ?= -DNDEBUG -O2 - OPTCXXFLAGS ?= -DNDEBUG -O2 -else - OPTCFLAGS ?= -g -O0 - OPTCXXFLAGS ?= -g -O0 - OPTLDFLAGS ?= -g -endif - -ifeq ($(origin ARFLAGS),default) - ARFLAGS := cru -endif - -ASFLAGS ?= -xassembler-with-cpp - -CFLAGS := $(CFLAGS) $(OPTCFLAGS) -DBUILD_TARGET_$(TARGET) -DBUILD_HOST_$(HOST) -CXXFLAGS := $(CXXFLAGS) $(OPTCXXFLAGS) \ - -DBUILD_TARGET_$(TARGET) -DBUILD_HOST_$(HOST) - -ASFLAGS := $(ASFLAGS) $(CFLAGS) -LDFLAGS := $(LDFLAGS) $(OPTLDFLAGS) - -# Extensions for coverage target -ifeq ($(MAKECMDGOALS),coverage) - COVCFLAGS ?= -fprofile-arcs -ftest-coverage - COVCXXFLAGS ?= -fprofile-arcs -ftest-coverage - COVLDFLAGS ?= -lgcov - - CFLAGS := $(CFLAGS) $(COVCFLAGS) - CXXFLAGS := $(CXXFLAGS) $(COVCXXFLAGS) - LDFLAGS := $(LDFLAGS) $(COVLDFLAGS) -endif - -# Extensions for profile target -ifeq ($(MAKECMDGOALS),profile) - PROFCFLAGS ?= -pg - PROFCXXFLAGS ?= -pg - PROFLDFLAGS ?= -pg - - CFLAGS := $(CFLAGS) $(PROFCFLAGS) - CXXFLAGS := $(CXXFLAGS) $(PROFCXXFLAGS) - LDFLAGS := $(LDFLAGS) $(PROFLDFLAGS) -endif - -############################################################################### -# lib-shared defaults -############################################################################### - -# Default library extension -ifeq ($(COMPONENT_TYPE),lib-static) - LIBEXT ?= .a -else - LIBEXT ?= .so -endif - -# If we're building a shared library, modify the flags appropriately -ifeq ($(COMPONENT_TYPE),lib-shared) - # Default CFLAGS/LDFLAGS for shared libraries - SHAREDCFLAGS ?= -fPIC -DPIC - SHAREDCXXFLAGS ?= -fPIC -DPIC - SHAREDLDFLAGS ?= -shared -Wl,-soname,$(SONAME) - SHAREDLDPATH ?= LD_LIBRARY_PATH="$(BUILDDIR):$(LD_LIBRARY_PATH)" -endif - -############################################################################### -# RISC OS module extensions -############################################################################### - -ifeq ($(COMPONENT_TYPE),riscos-module) - ifneq ($(TARGET),riscos) - $(error Attempting to build a RISC OS module for a non-RISC OS target) - endif - - CFLAGS := $(CFLAGS) -mmodule - CXXFLAGS := $(CXXFLAGS) -mmodule - LDFLAGS := $(LDFLAGS) -mmodule -endif - -############################################################################### # Override defaulted tools ############################################################################### @@ -363,42 +284,85 @@ ifeq ($(origin AR),default) endif ############################################################################### -# Other settings +# Auto-detect the toolchain ############################################################################### -# Determine if the compiler is GCC and if it supports simultaneous build & dep. -ccvsn := $(shell $(CC) --version) +# TODO: Using shell redirection like this probably hurts portability +ccvsn := $(shell $(CC) --version 2>&1) ifeq ($(ccvsn),) # Version string is blank ifeq ($(HOST),riscos) # For some reason we never see the output of SCL apps, so assume Norcroft. ccvsn := Norcroft - else - # Give up - $(error Failed to determine compiler and version) endif endif # "<binary name> (GCC) x.y.z (foo bar baz)" ifeq ($(word 2,$(ccvsn)),(GCC)) - # Looks like GCC, look for version - # If the major version (x, above) is not 2, then assume build & dep. - # This will break if using a version of GCC < 2, but that's unlikely. - GCCVER := $(word 1,$(subst ., ,$(word 3, $(ccvsn)))) - ifneq ($(GCCVER),2) - CC_CAN_BUILD_AND_DEP ?= yes - endif + toolchain := gcc else # Older versions of GCC just output the version number, so examine the # binary name in the hope of detecting more GCC. ifeq ($(findstring gcc,$(CC)),gcc) - GCCVER := $(word 1,$(subst ., ,$(ccvsn))) - ifneq ($(GCCVER),2) - CC_CAN_BUILD_AND_DEP ?= yes - endif - else - # Not GCC -- assume inability to dep - CC_CANNOT_DEP ?= yes + toolchain := gcc endif endif +# "Norcroft ..." +ifeq ($(word 1,$(ccvsn)),Norcroft) + toolchain := norcroft +endif + +ifeq ($(toolchain),) + $(error Unable to detect toolchain) +endif + +# TODO: It would be nice to avoid this hard-coded path +include build/makefiles/Makefile.$(toolchain) + +############################################################################### +# Default assembler/compiler/linker/archiver flags +############################################################################### + +ifeq ($(BUILD),release) + OPTCFLAGS ?= $(CCDEF)NDEBUG $(CCOPT) + OPTCXXFLAGS ?= $(CXXDEF)NDEBUG $(CXXOPT) +else + OPTCFLAGS ?= $(CCDBG) $(CCNOOPT) + OPTCXXFLAGS ?= $(CXXDBG) $(CXXNOOPT) + OPTLDFLAGS ?= $(LDDBG) +endif + +ifeq ($(origin ARFLAGS),default) + ARFLAGS := $(ARFLG) +endif + +# TODO: This assumes that the C compiler can cope with assembler +ASFLAGS ?= $(CCAS) + +CFLAGS := $(CFLAGS) $(OPTCFLAGS) $(CCDEF)BUILD_TARGET_$(TARGET) $(CCDEF)BUILD_HOST_$(HOST) +CXXFLAGS := $(CXXFLAGS) $(OPTCXXFLAGS) \ + $(CXXDEF)BUILD_TARGET_$(TARGET) $(CXXDEF)BUILD_HOST_$(HOST) + +ASFLAGS := $(ASFLAGS) $(CFLAGS) +LDFLAGS := $(LDFLAGS) $(OPTLDFLAGS) + +############################################################################### +# lib-shared defaults +############################################################################### + +# Default library extension +ifeq ($(COMPONENT_TYPE),lib-static) + LIBEXT ?= .a +else + LIBEXT ?= .so +endif + +# If we're building a shared library, modify the flags appropriately +ifeq ($(COMPONENT_TYPE),lib-shared) + # Default CFLAGS/LDFLAGS for shared libraries + SHAREDCFLAGS ?= $(CCSHR) $(CCDEF)PIC + SHAREDCXXFLAGS ?= $(CXXSHR) $(CCDEF)PIC + SHAREDLDFLAGS ?= $(LDSHR) + SHAREDLDPATH ?= LD_LIBRARY_PATH="$(BUILDDIR):$(LD_LIBRARY_PATH)" +endif |