Changeset 826 for trunk/kBuild/tools


Ignore:
Timestamp:
Feb 1, 2007, 7:39:00 AM (18 years ago)
Author:
bird
Message:

New tool that doesn't depend on GNU ld and ar: GCC3PLAIN. Use this when we're not sure the platform is using GNU ld and ar.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/kBuild/tools/GCC3PLAIN.kmk

    r819 r826  
    22## @file
    33#
    4 # kBuild Tool Config - Generic GCC v3.2.x or later Using The System GCC.
     4# kBuild Tool Config - Generic GCC v3.2.x or later Using The System GCC, any Unix Linker and Unix Archiver.
    55#
    66# Copyright (c) 2004-2007 knut st. osmundsen <bird-kBuild-spam@anduin.net>
     
    2525#
    2626
    27 TOOL_GCC3 := Generic GCC v3.2.x or later Using The System GCC and Binutils.
     27TOOL_GCC3PLAIN := Generic GCC v3.2.x or later Using The System GCC, any Unix Linker and Unix Archive.
    2828
    2929# Tool Specific Properties
    30 TOOL_GCC3_CC  ?= gcc$(HOSTSUFF_EXE)
    31 TOOL_GCC3_CXX ?= g++$(HOSTSUFF_EXE)
    32 TOOL_GCC3_AS  ?= gcc$(HOSTSUFF_EXE)
    33 ifeq ($(BUILD_TARGET),solaris) ## @todo drop the MRI script!
    34  TOOL_GCC3_AR ?= gar$(HOSTSUFF_EXE)
    35 else
    36  TOOL_GCC3_AR ?= ar$(HOSTSUFF_EXE)
     30TOOL_GCC3PLAIN_CC  ?= gcc$(HOSTSUFF_EXE)
     31TOOL_GCC3PLAIN_CXX ?= g++$(HOSTSUFF_EXE)
     32TOOL_GCC3PLAIN_AS  ?= gcc$(HOSTSUFF_EXE)
     33TOOL_GCC3PLAIN_AR  ?= ar$(HOSTSUFF_EXE)
     34TOOL_GCC3PLAIN_RANLIB ?= ranlib$(HOSTSUFF_EXE)
     35TOOL_GCC3PLAIN_LD  ?= g++$(HOSTSUFF_EXE)
     36TOOL_GCC3PLAIN_LDFLAGS.dll ?= -shared
     37TOOL_GCC3PLAIN_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(BUILD_TARGET).$(BUILD_TYPE)) $($(1)_SONAME.$(BUILD_TARGET)) $($(1)_SONAME.$(BUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
     38ifdef SLKRUNS
     39 TOOL_GCC3PLAIN_CC  += -fmessage-length=0
     40 TOOL_GCC3PLAIN_CXX += -fmessage-length=0
    3741endif
    38 ifeq ($(BUILD_TARGET),os2)
    39  TOOL_GCC3_AR_IMP ?= emximp$(HOSTSTUFF_EXE)
    40 else
    41  TOOL_GCC3_AR_IMP ?= $(ECHO) not supported!
    42 endif
    43 TOOL_GCC3_LD ?= g++$(HOSTSUFF_EXE)
    44 TOOL_GCC3_LD_SYSMOD ?= ld$(HOSTSUFF_EXE)
    45 ifndef TOOL_GCC3_LDFLAGS.$(BUILD_TARGET)
    46  TOOL_GCC3_LDFLAGS.dll ?= -shared
    47 else
    48  TOOL_GCC3_LDFLAGS.dll ?= $(TOOL_GCC3_LDFLAGS.$(BUILD_TARGET))
    49 endif
    50 TOOL_GCC3_LDFLAGS.sysmod ?= -r
    51 TOOL_GCC3_LD_SONAME ?= -Wl,-soname=$(firstword $($(1)_SONAME.$(BUILD_TARGET).$(BUILD_TYPE)) $($(1)_SONAME.$(BUILD_TARGET)) $($(1)_SONAME.$(BUILD_TYPE)) $($(1)_SONAME) $(notdir $(2)))
    52 ifeq ($(BUILD_TARGET),os2)
    53  TOOL_GCC3_LD_MAP ?= -Zmap=$(1)
    54  TOOL_GCC3_LD_SYSMOD_MAP ?= -Zmap=$(1)
    55 endif
    56 ifdef SLKRUNS
    57  TOOL_GCC3_CC  += -fmessage-length=0
    58  TOOL_GCC3_CXX += -fmessage-length=0
    59 endif
    6042
    6143# General Properties used by kBuild
    62 TOOL_GCC3_COBJSUFF         ?= .o
    63 TOOL_GCC3_CFLAGS           ?=
    64 TOOL_GCC3_CFLAGS.debug     ?= -g
    65 TOOL_GCC3_CFLAGS.profile   ?= -g -O2 #-pg
    66 TOOL_GCC3_CFLAGS.release   ?= -O2
    67 TOOL_GCC3_CINCS            ?=
    68 TOOL_GCC3_CDEFS            ?=
    69 
    70 TOOL_GCC3_CXXOBJSUFF       ?= .o
    71 TOOL_GCC3_CXXOBJSUFF       ?= .o
    72 TOOL_GCC3_CXXFLAGS         ?=
    73 TOOL_GCC3_CXXFLAGS.debug   ?= -g
    74 TOOL_GCC3_CXXFLAGS.profile ?= -g -O2 #-pg
    75 TOOL_GCC3_CXXFLAGS.release ?= -O2
    76 TOOL_GCC3_CXXINCS          ?=
    77 TOOL_GCC3_CXXDEFS          ?=
    78 
    79 TOOL_GCC3_ASFLAGS          ?= -x assembler-with-cpp
    80 TOOL_GCC3_ASFLAGS.debug    ?= -g
    81 TOOL_GCC3_ASFLAGS.profile  ?= -g
    82 TOOL_GCC3_ASOBJSUFF        ?= .o
    83 
    84 TOOL_GCC3_ARFLAGS          ?= cr
    85 TOOL_GCC3_ARLIBSUFF        ?= .a
    86 
    87 TOOL_GCC3_LDFLAGS          ?=
    88 TOOL_GCC3_LDFLAGS.debug    ?= -g
    89 TOOL_GCC3_LDFLAGS.profile  ?= -g
     44TOOL_GCC3PLAIN_COBJSUFF         ?= .o
     45TOOL_GCC3PLAIN_CFLAGS           ?=
     46TOOL_GCC3PLAIN_CFLAGS.debug     ?= -g
     47TOOL_GCC3PLAIN_CFLAGS.profile   ?= -g -O2 #-pg
     48TOOL_GCC3PLAIN_CFLAGS.release   ?= -O2
     49TOOL_GCC3PLAIN_CINCS            ?=
     50TOOL_GCC3PLAIN_CDEFS            ?=
     51
     52TOOL_GCC3PLAIN_CXXOBJSUFF       ?= .o
     53TOOL_GCC3PLAIN_CXXOBJSUFF       ?= .o
     54TOOL_GCC3PLAIN_CXXFLAGS         ?=
     55TOOL_GCC3PLAIN_CXXFLAGS.debug   ?= -g
     56TOOL_GCC3PLAIN_CXXFLAGS.profile ?= -g -O2 #-pg
     57TOOL_GCC3PLAIN_CXXFLAGS.release ?= -O2
     58TOOL_GCC3PLAIN_CXXINCS          ?=
     59TOOL_GCC3PLAIN_CXXDEFS          ?=
     60
     61TOOL_GCC3PLAIN_ASFLAGS          ?= -x assembler-with-cpp
     62TOOL_GCC3PLAIN_ASFLAGS.debug    ?= -g
     63TOOL_GCC3PLAIN_ASFLAGS.profile  ?= -g
     64TOOL_GCC3PLAIN_ASOBJSUFF        ?= .o
     65
     66TOOL_GCC3PLAIN_ARFLAGS          ?= cr
     67TOOL_GCC3PLAIN_ARLIBSUFF        ?= .a
     68
     69TOOL_GCC3PLAIN_LDFLAGS          ?=
     70TOOL_GCC3PLAIN_LDFLAGS.debug    ?= -g
     71TOOL_GCC3PLAIN_LDFLAGS.profile  ?= -g
    9072
    9173
     
    10385# @param    $(outbase)  Output basename (full). Use this for list files and such.
    10486# @param    $(objsuff)  Object suffix.
    105 TOOL_GCC3_COMPILE_C_OUTPUT =
    106 TOOL_GCC3_COMPILE_C_DEPEND =
    107 TOOL_GCC3_COMPILE_C_DEPORD =
    108 define TOOL_GCC3_COMPILE_C_CMDS
    109         $(QUIET)$(TOOL_GCC3_CC) -c\
     87TOOL_GCC3PLAIN_COMPILE_C_OUTPUT =
     88TOOL_GCC3PLAIN_COMPILE_C_DEPEND =
     89TOOL_GCC3PLAIN_COMPILE_C_DEPORD =
     90define TOOL_GCC3PLAIN_COMPILE_C_CMDS
     91        $(QUIET)$(TOOL_GCC3PLAIN_CC) -c\
    11092                $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
    11193                -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
     
    127109# @param    $(outbase)  Output basename (full). Use this for list files and such.
    128110# @param    $(objsuff)  Object suffix.
    129 TOOL_GCC3_COMPILE_CXX_OUTPUT =
    130 TOOL_GCC3_COMPILE_CXX_DEPEND =
    131 TOOL_GCC3_COMPILE_CXX_DEPORD =
    132 define TOOL_GCC3_COMPILE_CXX_CMDS
    133         $(QUIET)$(TOOL_GCC3_CXX) -c\
     111TOOL_GCC3PLAIN_COMPILE_CXX_OUTPUT =
     112TOOL_GCC3PLAIN_COMPILE_CXX_DEPEND =
     113TOOL_GCC3PLAIN_COMPILE_CXX_DEPORD =
     114define TOOL_GCC3PLAIN_COMPILE_CXX_CMDS
     115        $(QUIET)$(TOOL_GCC3PLAIN_CXX) -c\
    134116                $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
    135117                -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
     
    152134# @param    $(objsuff)  Object suffix.
    153135#
    154 TOOL_GCC3_COMPILE_AS_OUTPUT =
    155 TOOL_GCC3_COMPILE_AS_DEPEND =
    156 TOOL_GCC3_COMPILE_AS_DEPORD =
    157 define TOOL_GCC3_COMPILE_AS_CMDS
    158         $(QUIET)$(TOOL_GCC3_AS) -c\
     136TOOL_GCC3PLAIN_COMPILE_AS_OUTPUT =
     137TOOL_GCC3PLAIN_COMPILE_AS_DEPEND =
     138TOOL_GCC3PLAIN_COMPILE_AS_DEPORD =
     139define TOOL_GCC3PLAIN_COMPILE_AS_CMDS
     140        $(QUIET)$(TOOL_GCC3PLAIN_AS) -c\
    159141                $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
    160142                -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
     
    173155# @param    $(othersrc) Unhandled sources.
    174156# @param    $(outbase)  Output basename (full). Use this for list files and such.
    175 TOOL_GCC3_LINK_LIBRARY_OUTPUT = $(out).ar-script $(outbase).imp.a
    176 TOOL_GCC3_LINK_LIBRARY_DEPEND = $(othersrc)
    177 TOOL_GCC3_LINK_LIBRARY_DEPORD =
    178 ifeq ($(filter append-dash-n,$(KMK_FEATURES)),append-dash-n)
    179 define TOOL_GCC3_LINK_LIBRARY_CMDS
    180         $(QUIET)$(APPEND) $(out).ar-script 'CREATE $(out)'
    181         $(QUIET)$(APPEND) -n $(out).ar-script \
    182                 $(foreach o,$(objs), 'ADDMOD $(o)') \
    183                 $(foreach o,$(filter-out %.def %.imp,$(othersrc)), 'ADDLIB $(o)')
    184         $(if $(filter %.def %.imp,$(othersrc))\
    185                 ,$(TOOL_GCC3_AR_IMP) -o $(outbase).imp.a $(filter %.def %.imp,$(othersrc))\
    186                  $(NL)$(TAB)$(QUIET)$(APPEND) $(out).ar-script 'ADDLIB $(outbase).imp.a')
    187         $(QUIET)$(APPEND) $(out).ar-script 'SAVE'
    188         $(QUIET)$(APPEND) $(out).ar-script 'END'
    189         $(QUIET)$(TOOL_GCC3_AR) -M < $(out).ar-script
    190 endef
    191 else
    192 define TOOL_GCC3_LINK_LIBRARY_CMDS
    193         $(QUIET)$(APPEND) $(out).ar-script "CREATE $(out)"
    194         $(foreach o, $(objs)\
    195                 ,$(NL)$(TAB)$(QUIET)$(APPEND) $(out).ar-script "ADDMOD $(o)")
    196         $(foreach srclib, $(filter-out %.def %.imp,$(othersrc))\
    197                 ,$(NL)$(TAB)$(QUIET)$(APPEND) $(out).ar-script "ADDLIB $(srclib)")
    198         $(if $(filter %.def %.imp,$(othersrc))\
    199                 ,$(TOOL_GCC3_AR_IMP) -o $(outbase).imp.a $(filter %.def %.imp,$(othersrc))\
    200                  $(NL)$(TAB)$(QUIET)$(APPEND) $(out).ar-script "ADDLIB $(outbase).imp.a")
    201         $(QUIET)$(APPEND) $(out).ar-script "SAVE"
    202         $(QUIET)$(APPEND) $(out).ar-script "END"
    203         $(QUIET)$(TOOL_GCC3_AR) -M < $(out).ar-script
    204 endef
    205 endif
     157TOOL_GCC3PLAIN_LINK_LIBRARY_OUTPUT = $(out).ar-script
     158TOOL_GCC3PLAIN_LINK_LIBRARY_DEPEND = $(othersrc)
     159TOOL_GCC3PLAIN_LINK_LIBRARY_DEPORD =
     160## @todo archive merging!
     161#ifeq ($(filter xargs,$(KMK_FEATURES)),xargs) - I wonder if this works...
     162define TOOL_GCC3PLAIN_LINK_LIBRARY_CMDS
     163        $(call xargs,$(QUIET)$(TOOL_GCC3PLAIN_AR) $(flags) $(out), $(objs))
     164        $(QUIET)$(TOOL_GCC3PLAIN_RANLIB) $(out)
     165endef
     166#else
     167#define TOOL_GCC3PLAIN_LINK_LIBRARY_CMDS
     168#       $(QUIET)$(TOOL_GCC3PLAIN_AR) $(flags) $(out) $(objs)
     169#       $(QUIET)$(TOOL_GCC3PLAIN_RANLIB) $(out)
     170#endef
     171#endif
    206172
    207173
     
    219185# @param    $(custom_post)  Custom step invoked after linking.
    220186# @param    $(outbase)  Output basename (full). Use this for list files and such.
    221 TOOL_GCC3_LINK_PROGRAM_OUTPUT = $(outbase).map
    222 TOOL_GCC3_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
     187TOOL_GCC3PLAIN_LINK_PROGRAM_OUTPUT = $(outbase).map
     188TOOL_GCC3PLAIN_LINK_PROGRAM_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
    223189                $(filter %.def, $(othersrc))
    224 TOOL_GCC3_LINK_PROGRAM_DEPORD =
    225 define TOOL_GCC3_LINK_PROGRAM_CMDS
    226         $(QUIET)$(TOOL_GCC3_LD) $(flags) -o $(out) $(objs)\
     190TOOL_GCC3PLAIN_LINK_PROGRAM_DEPORD =
     191define TOOL_GCC3PLAIN_LINK_PROGRAM_CMDS
     192        $(QUIET)$(TOOL_GCC3PLAIN_LD) $(flags) -o $(out) $(objs)\
    227193                $(filter %.def, $(othersrc))\
    228194                $(foreach p,$(libpath), -L$(p))\
    229                 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))\
    230                 $(call TOOL_GCC3_LD_MAP,$(outbase).map)
     195                $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
    231196endef
    232197
     
    245210# @param    $(custom_post)  Custom step invoked after linking.
    246211# @param    $(outbase)  Output basename (full). Use this for list files and such.
    247 TOOL_GCC3_LINK_DLL_OUTPUT = $(outbase).map
    248 TOOL_GCC3_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
     212TOOL_GCC3PLAIN_LINK_DLL_OUTPUT = $(outbase).map
     213TOOL_GCC3PLAIN_LINK_DLL_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
    249214                $(filter %.def, $(othersrc))
    250 TOOL_GCC3_LINK_DLL_DEPORD =
    251 define TOOL_GCC3_LINK_DLL_CMDS
    252         $(QUIET)$(TOOL_GCC3_LD) $(TOOL_GCC3_LDFLAGS.dll) $(flags) -o $(out)\
    253                 $(if $(filter-out win32 os2, $(BUILD_TARGET)),$(call TOOL_GCC3_LD_SONAME,$(target),$(out)))\
     215TOOL_GCC3PLAIN_LINK_DLL_DEPORD =
     216define TOOL_GCC3PLAIN_LINK_DLL_CMDS
     217        $(QUIET)$(TOOL_GCC3PLAIN_LD) $(TOOL_GCC3PLAIN_LDFLAGS.dll) $(flags) -o $(out)\
     218                $(if $(filter-out win32 os2, $(BUILD_TARGET)),$(call TOOL_GCC3PLAIN_LD_SONAME,$(target),$(out)))\
    254219                $(objs)\
    255220                $(filter %.def, $(othersrc))\
    256221                $(foreach p,$(libpath), -L$(p))\
    257                 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))\
    258                 $(call TOOL_GCC3_LD_MAP,$(outbase).map)
    259 endef
    260 
    261 
    262 ## Link system module (windows aka driver, linux aka kernel module)
    263 # @param    $(target)   Normalized main target name.
    264 # @param    $(out)              System module name.
    265 # @param    $(objs)     Object files to link together.
    266 # @param    $(libs)     Libraries to search.
    267 # @param    $(libpath)  Library search paths.
    268 # @param    $(flags)    Flags.
    269 # @param    $(dirdep)   Directory creation dependency.
    270 # @param    $(deps)             Other dependencies.
    271 # @param    $(othersrc) Unhandled sources.
    272 # @param    $(custom_pre)   Custom step invoked before linking.
    273 # @param    $(custom_post)  Custom step invoked after linking.
    274 # @param    $(outbase)  Output basename (full). Use this for list files and such.
    275 TOOL_GCC3_LINK_SYSMOD_OUTPUT = $(outbase).map
    276 TOOL_GCC3_LINK_SYSMOD_DEPEND = $(foreach lib,$(libs),$(if $(findstring $(lib),$(subst /,x,$(lib))),, $(lib)))\
    277                 $(filter %.def, $(othersrc))
    278 TOOL_GCC3_LINK_SYSMOD_DEPORD =
    279 define TOOL_GCC3_LINK_SYSMOD_CMDS
    280         $(QUIET)$(TOOL_GCC3_LD_SYSMOD) $(TOOL_GCC3_LDFLAGS.sysmod) $(flags) -o $(out) $(objs)\
    281                 $(filter %.def, $(othersrc))\
    282                 $(foreach p,$(libpath), -L$(p))\
    283                 $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))\
    284                 $(call TOOL_GCC3_LD_SYSMOD_MAP,$(outbase).map)
    285 endef
    286 
     222                $(foreach lib,$(libs), $(if $(findstring $(lib),$(subst /,x,$(lib))), -l$(patsubst lib%,%,$(basename $(lib))), $(lib)))
     223endef
     224
Note: See TracChangeset for help on using the changeset viewer.