# (C) Copyright Rene Rivera, 2002-2003. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) # The following #// line will be used by the regression test table generation # program as the column heading for HTML tables. Must not include version number. #//GNU
GCC
# For adding framwork libraries; like Python, Carbon, etc. free-feature framework ; # Specify the loader for bundles. free-feature bundle-loader ; # Controll generation of compiler warnings. feature warnings : on off ; # Type of shared object to create. free-feature link-format ; # compute directories for invoking GCC # # The gcc toolset can be user-configured using the following # variables: # # GCC_ROOT_DIRECTORY # The directory in which GCC was installed. Defaults to # unset. Usually, there is no need to set this variable at # all. However, if G++ is not in the path it is usually # sufficient to configure this one variable. More fine-grained # configuration is available by setting the following: # # GCC_BIN_DIRECTORY # the directory prefix used to find the gcc executables. Defaults to # $(GCC_ROOT_DIRECTORY)/bin/, or "" if GCC_ROOT_DIRECTORY is # not set. # # GCC_INCLUDE_DIRECTORY # the directory in which to find system includes. Defaults to # empty. # # GCC_STDLIB_DIRECTORY # the directory in which to find the standard library # objects associated with this build of gcc. Defaults to # $(GCC_ROOT_DIRECTORY)/lib. # # GXX # The name by which g++ is invoked. You can also use this in # lieu of setting the property to force options such # as "-V3.0.4" into the g++ command line: "-sGXX=g++ -V3.0.4". # # GCC # Similar to GXX, the name by which gcc is invoked for "C" # language targets. # singleton variables... set-as-singleton GCC_ROOT_DIRECTORY GCC_BIN_DIRECTORY GCC_INCLUDE_DIRECTORY GCC_STDLIB_DIRECTORY ; flags darwin GCC_BIN_DIRECTORY : $(GCC_BIN_DIRECTORY) ; flags darwin GCC_INCLUDE_DIRECTORY : $(GCC_INCLUDE_DIRECTORY) ; flags darwin GCC_STDLIB_DIRECTORY : $(GCC_STDLIB_DIRECTORY) ; if ! $(GCC_BIN_DIRECTORY) { flags darwin GCC_BIN_DIRECTORY : $(GCC_ROOT_DIRECTORY)/bin/ ; } if ! $(GCC_BIN_DIRECTORY) { flags darwin GCC_BIN_DIRECTORY : "" ; } if ! $(GCC_STDLIB_DIRECTORY) { flags darwin GCC_STDLIB_DIRECTORY : $(GCC_ROOT_DIRECTORY)/lib ; } flags darwin .GCC_BIN_DIR : $(GCC_BIN_DIRECTORY) ; flags darwin .GXX : $(GXX) ; flags darwin .GCC : $(GCC) ; if ! $(.GXX) && $(GCC_ROOT_DIRECTORY) { flags darwin .GXX : g++ ; } if ! $(.GXX) { flags darwin .GXX : c++ ; } if ! $(.GCC) && $(GCC_ROOT_DIRECTORY) { flags darwin .GCC : gcc ; } if ! $(.GCC) { flags darwin .GCC : cc ; } flags darwin CFLAGS ; flags darwin C++FLAGS ; flags darwin DEFINES ; flags darwin UNDEFS ; flags darwin HDRS ; flags darwin SYSHDRS ; flags darwin LIBPATH ; flags darwin NEEDLIBS ; flags darwin FINDLIBS ; flags darwin ARFLAGS ; flags darwin TARGET_TYPE ; flags darwin FRAMEWORKS ; flags darwin DLLVERSION ; flags darwin DLLVERSION : $(DLLVERSION[1]) ; flags darwin BUNDLE_LOADER ; flags darwin ARFLAGS ; if ! $(ARFLAGS) { flags darwin ARFLAGS : "" ; } if ! $(DLLVERSION) { flags darwin DLLVERSION : $(BOOST_VERSION) ; } if ! [ MATCH "(gcc)" : $(.GCC) ] { flags darwin CFLAGS : -Wno-long-double -no-cpp-precomp ; } # GCC 4.0, the default compiler in Darwin 8.0.0, does not have # -fcoalesce-templates. GCC 3.3 needs it. if ! [ MATCH "(g[+][+])" : $(.GXX) ] && $(JAMUNAME[3]) < "8.0.0" || [ MATCH "(g[+][+]-3.3)" : $(.GXX) ] { flags darwin C++FLAGS : -fcoalesce-templates ; } flags darwin LINKFLAGS static : -static-libgcc ; flags darwin CFLAGS on : -g ; flags darwin LINKFLAGS on : -g ; flags darwin LINKFLAGS off : -Wl,-x ; flags darwin CFLAGS off : -O0 ; flags darwin CFLAGS speed : -O3 ; flags darwin CFLAGS space : -Os ; flags darwin CFLAGS off : -fno-inline ; flags darwin CFLAGS on : -Wno-inline ; flags darwin CFLAGS full : -finline-functions -Wno-inline ; flags darwin CFLAGS on : -pg ; flags darwin LINKFLAGS on : -pg ; flags darwin C++FLAGS off : -fno-rtti ; flags darwin C++FLAGS on : -fvtable-thunks ; flags darwin C++FLAGS off : -fvtable-thunks=0 ; flags darwin CFLAGS true : -fPIC ; flags darwin CFLAGS on : -Wall ; flags darwin CFLAGS off : -w ; flags darwin LINK_FORMAT $(SHARED_TYPES)/bundle : bundle ; flags darwin LINK_FORMAT $(SHARED_TYPES)/dynamic : dynamic ; if $(BUNDLE_LOADER) && ! $(LINK_FORMAT) { flags darwin LINK_FORMAT $(SHARED_TYPES) : bundle ; } if $(LINK_FORMAT) = bundle { flags darwin LINKFLAGS $(SHARED_TYPES) : -bundle ; } else { # flags darwin LINKFLAGS $(SHARED_TYPES) : # -Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ; } flags darwin .LINKFLAGS ; flags darwin DLLFLAGS : ; if -bind_at_load in $(.LINKFLAGS) { flags darwin DLLFLAGS $(SHARED_TYPES) : -bind_at_load ; .LINKFLAGS = [ difference $(.LINKFLAGS) : -bind_at_load ] ; } flags darwin LINKFLAGS : $(.LINKFLAGS) ; #### Link #### rule Link-action { _ on $(<) = " " ; DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ; if $(TARGET_TYPE) in $(SHARED_TYPES) && $(LINK_FORMAT) != bundle { #~ LINKFLAGS on $(<) += #~ "-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ; darwin-Link-DyLib-action $(<) : $(>) ; } else { darwin-Link-action $(<) : $(>) ; } } actions darwin-Link-action bind NEEDLIBS NEEDIMPS { $(SHELL_SET)$(gSHELL_LIBPATH)=$(LINK_LIBPATH) $(SHELL_EXPORT)$(gSHELL_LIBPATH) $(.GCC_BIN_DIR)$(.GXX) $(LINKFLAGS) -o "$(<[1])" "$(>)" \ -F$(FRAMEWORKS:D) -framework$(_)$(FRAMEWORKS:D=) \ -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \ -bundle_loader$(_)"$(BUNDLE_LOADER)" "$(BUNDLE_LOADER)" } actions darwin-Link-DyLib-action bind NEEDLIBS NEEDIMPS { $(SHELL_SET)$(gSHELL_LIBPATH)=$(LINK_LIBPATH) $(SHELL_EXPORT)$(gSHELL_LIBPATH) ld -dynamic -m -r -d $(DLLFLAGS) -o "$(<[1]:S=.lo)" "$(>)" \ && \ $(.GCC_BIN_DIR)$(.GXX) $(LINKFLAGS) -o "$(<[1])" "$(<[1]:S=.lo)" \ -F$(FRAMEWORKS:D) -framework$(_)$(FRAMEWORKS:D=) \ -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) -dynamiclib -install_name "$(<[1]:D=:S=.dylib)" \ && \ rm -f "$(<[1]:S=.lo)" } #### Cc ##### rule Cc-action { _ on $(<) = " " ; darwin-Cc-action $(<) : $(>) ; } actions darwin-Cc-action { $(.GCC_BIN_DIR)$(.GCC) -c -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) -F$(FRAMEWORKS:D) -I"$(HDRS)" -I"$(STDHDRS)" -I"$(SYSHDRS)" -o "$(<)" "$(>)" } #### C++ #### rule C++-action { _ on $(<) = " " ; darwin-C++-action $(<) : $(>) ; } actions darwin-C++-action { $(.GCC_BIN_DIR)$(.GXX) -c -ftemplate-depth-256 -U$(UNDEFS) -D$(DEFINES) $(CFLAGS) $(C++FLAGS) -F$(FRAMEWORKS:D) -I"$(HDRS)" -I"$(STDHDRS)" -I"$(SYSHDRS)" -o "$(<)" "$(>)" } #### Archive #### rule Archive-action { darwin-Archive-action $(<) : $(>) ; } actions updated together piecemeal darwin-Archive-action { ar -r -s $(ARFLAGS) "$(<:T)" "$(>:T)" }