Changeset 3250


Ignore:
Timestamp:
Dec 28, 2018, 11:43:52 PM (6 years ago)
Author:
bird
Message:

Working on precompiled headers for GCC.

Location:
trunk/kBuild
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/kBuild/header.kmk

    r3166 r3250  
    10901090## PROPS_TOOLS
    10911091# This is a subset of PROPS_SINGLE.
    1092 PROPS_TOOLS := TOOL CTOOL CXXTOOL OBJCTOOL OBJCXXTOOL ASTOOL RCTOOL ARTOOL LDTOOL FETCHTOOL UNPACKTOOL PATCHTOOL
     1092PROPS_TOOLS := TOOL CTOOL CXXTOOL PCHTOOL OBJCTOOL OBJCXXTOOL ASTOOL RCTOOL ARTOOL LDTOOL FETCHTOOL UNPACKTOOL PATCHTOOL
    10931093
    10941094## PROPS_SINGLE
     
    10971097# will do the necessary inheritance for templates, sdks, tools and targets.
    10981098PROPS_SINGLE := $(PROPS_TOOLS) TEMPLATE INSTTYPE INST STAGE NOINST BLD_TYPE BLD_TRG BLD_TRG_ARCH BLD_TRG_CPU FETCHDIR \
    1099         OBJSUFF COBJSUFF CXXOBJSUFF OBJCOBJSUFF OBJCXXOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF BINSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF \
     1099        OBJSUFF COBJSUFF CXXOBJSUFF PCHOBJSUFF OBJCOBJSUFF OBJCXXOBJSUFF ASOBJSUFF RCOBJSUFF SYSSUFF BINSUFF EXESUFF DLLSUFF LIBSUFF ARLIBSUFF \
    11001100        MODE UID GID LD_DEBUG DEBUG_INSTTYPE DEBUG_INST DEBUG_STAGE
    11011101## PROPS_SINGLE_LNK
     
    11201120        CFLAGS CDEFS \
    11211121        CXXFLAGS CXXDEFS \
     1122        PCHFLAGS PCHDEFS \
    11221123        OBJCFLAGS OBJCDEFS \
    11231124        OBJCXXFLAGS OBJCXXDEFS \
     
    11381139PROPS_ACCUMULATE_L := \
    11391140        SDKS USES SOURCES EXEC_SOURCES SRC_HANDLERS INTERMEDIATES \
    1140         INCS CINCS CXXINCS OBJCINCS OBJCXXINCS ASINCS RCINCS \
     1141        INCS CINCS CXXINCS PCHINCS OBJCINCS OBJCXXINCS ASINCS RCINCS \
    11411142        LIBS LIBPATH \
    11421143        DIRS BLDDIRS CLEAN
     
    12081209## KBUILD_COMPILE_CATEGTORIES
    12091210# Tools categories for compiling.
    1210 KBUILD_COMPILE_CATEGTORIES   := AS C CXX OBJC OBJCXX RC
     1211KBUILD_COMPILE_CATEGTORIES   := AS C CXX PCH OBJC OBJCXX RC
    12111212
    12121213## KBUILD_GENERIC_CATEGORIES
  • TabularUnified trunk/kBuild/tools/GXX3.kmk

    r3121 r3250  
    3737TOOL_GXX3_CC  ?= gcc$(HOSTSUFF_EXE)
    3838TOOL_GXX3_CXX ?= g++$(HOSTSUFF_EXE)
     39TOOL_GXX3_PCH ?= $(TOOL_GXX3_CXX)
    3940TOOL_GXX3_AS  ?= gcc$(HOSTSUFF_EXE)
    4041ifeq ($(KBUILD_TARGET),solaris)
     
    7374 TOOL_GXX3_CC  += -fmessage-length=0
    7475 TOOL_GXX3_CXX += -fmessage-length=0
     76 TOOL_GXX3_PCH += -fmessage-length=0
    7577endif
    7678
     
    8587
    8688TOOL_GXX3_CXXOBJSUFF       ?= .o
    87 TOOL_GXX3_CXXOBJSUFF       ?= .o
    8889TOOL_GXX3_CXXFLAGS         ?=
    8990TOOL_GXX3_CXXFLAGS.debug   ?= -g
     
    9293TOOL_GXX3_CXXINCS          ?=
    9394TOOL_GXX3_CXXDEFS          ?=
     95
     96TOOL_GXX3_PCHOBJSUFF       ?= .h.gch
     97TOOL_GXX3_PCHFLAGS         ?= $(TOOL_GXX3_CXXFLAGS)
     98TOOL_GXX3_PCHFLAGS.debug   ?= $(TOOL_GXX3_CXXFLAGS.debug)
     99TOOL_GXX3_PCHFLAGS.profile ?= $(TOOL_GXX3_CXXFLAGS.profile)
     100TOOL_GXX3_PCHFLAGS.release ?= $(TOOL_GXX3_CXXFLAGS.release)
     101TOOL_GXX3_PCHINCS          ?= $(TOOL_GXX3_CXXINCS)
     102TOOL_GXX3_PCHDEFS          ?= $(TOOL_GXX3_CXXDEFS)
    94103
    95104TOOL_GXX3_ASFLAGS          ?= -x assembler-with-cpp
     
    163172# @param    $(outbase)  Output basename (full). Use this for list files and such.
    164173# @param    $(objsuff)  Object suffix.
    165 TOOL_GXX3_COMPILE_CXX_DEPEND =
    166174TOOL_GXX3_COMPILE_CXX_DEPORD =
    167175ifdef KBUILD_USE_KOBJCACHE
    168176TOOL_GXX3_COMPILE_CXX_USES_KOBJCACHE = 1
     177TOOL_GXX3_COMPILE_CXX_DEPEND =
    169178TOOL_GXX3_COMPILE_CXX_OUTPUT = $(outbase).ii
    170179define TOOL_GXX3_COMPILE_CXX_CMDS
     
    183192endef
    184193else # !KBUILD_USE_KOBJCACHE
     194TOOL_GXX3_COMPILE_CXX_DEPEND = $($(target)_1_GCC_PCH_FILE)
    185195TOOL_GXX3_COMPILE_CXX_OUTPUT =
    186196define TOOL_GXX3_COMPILE_CXX_CMDS
    187197        $(QUIET)$(TOOL_GXX3_CXX) -c\
    188                 $(flags) $(addprefix -I, $(incs)) $(addprefix -D, $(defs))\
    189                 -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
    190                 -o $(obj)\
     198                $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
     199                -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
     200                -o $(obj) $(if-expr defined($(target)_PCH_HDR) \
     201                ,-Winvalid-pch -H -include $(basename $($(target)_1_GCC_PCH_FILE)),) \
    191202                $(abspath $(source))
    192203        $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
    193204endef
    194205endif # !KBUILD_USE_KOBJCACHE
     206
     207
     208## Precompile C++ header.
     209# @param    $(target)   Normalized main target name.
     210# @param    $(source)   Source filename (relative).
     211# @param    $(obj)      Object file name. This shall be (re)created by the compilation.
     212# @param    $(dep)          Dependcy file. This shall be (re)created by the compilation.
     213# @param    $(flags)    Flags.
     214# @param    $(defs)     Definitions. No -D or something.
     215# @param    $(incs)     Includes. No -I or something.
     216# @param    $(dirdep)   Directory creation dependency.
     217# @param    $(deps)             Other dependencies.
     218# @param    $(outbase)  Output basename (full). Use this for list files and such.
     219# @param    $(objsuff)  Object suffix.
     220TOOL_GXX3_COMPILE_PCH_DEPORD = $($(target)_1_GCC_PCH_DIR)
     221TOOL_GXX3_COMPILE_PCH_DEPEND =
     222TOOL_GXX3_COMPILE_PCH_OUTPUT = $($(target)_1_GCC_PCH_FILE)
     223define TOOL_GXX3_COMPILE_PCH_CMDS
     224        $(QUIET)$(TOOL_GXX3_PCH) -c\
     225                $(flags) $(addprefix -I, $($(target)_1_GCC_PCH_DIR) $(incs)) $(addprefix -D, $(defs))\
     226                -Wp,-MD,$(dep) -Wp,-MT,$(obj) -Wp,-MP\
     227                -o $(obj)\
     228                $(abspath $(source))
     229        $(INSTALL) --hard-link-files-when-possible -m 0644 -- "$(obj)" "$($(target)_1_GCC_PCH_FILE)"
     230        $(QUIET)$(APPEND) -n "$(dep)" "" "$(source):" ""
     231endef
    195232
    196233
  • TabularUnified trunk/kBuild/units/gccprecomp.kmk

    r3247 r3250  
    11# $Id$
    22## @file
    3 # kBuild Unit - Target Level Precompiled Headers for Visual C++.
     3# kBuild Unit - Target Level Precompiled Headers for GNU GCC.
    44#
    55
     
    3333
    3434
    35 UNIT_vccprecomp = Target level precompiled Headers for Visual C++
     35UNIT_gccprecomp = Target level precompiled Headers for Visual C++
    3636
    3737#
    3838# Early target processing pass #1.
    3939#
    40 # This set the internal _VCC_PCH_FILE and VCC_COMMON_OBJ_PDB properties,
    41 # which will be picked up by the VCCxxx tool.
     40# This sets $(target)_1_GCC_PCH_DIR as the include directory for the precompiled
     41# header, adding it to BLDDIRS to get a mkdir rule for it, and then calculates the
     42# .gch name and stores that in $(target)_1_GCC_PCH_FILE for compile rule dependencies.
    4243#
    43 define def_unit_vccprecomp_target_pre
    44  $(target)_1_VCC_PCH_FILE       := $(outbase)-pch.pch
    45  $(target)_1_VCC_COMMON_OBJ_PDB := $(outbase)-common-obj.pdb
     44define def_unit_gccprecomp_target_pre
     45 $(target)_BLDDIRS        += $($(target)_0_OUTDIR)/pch/
     46 $(target)_1_GCC_PCH_DIR  := $($(target)_0_OUTDIR)/pch/
     47 $(target)_1_GCC_PCH_FILE := $($(target)_0_OUTDIR)/pch/$(notdir $($(target)_PCH_HDR)).gch
    4648endef
    4749
     
    4951# Early target processing pass #2.
    5052#
    51 # This sets up a rule for creating the .pch file after qt5 and similar units
     53# This sets up a rule for creating the .gch file after qt5 and similar units
    5254# are done modifying INCS, DEFS and company.  The 'tool' variable is defined by
    5355# footer-pass2-compiling-targets.kmk and is really the LD tool, but that'll
    54 # have to do for now.  The '-PCH' variant of the VCC tool, is defined together
     56# have to do for now.  The '-PCH' variant of the GCC/LLVM tool, is defined together
    5557# with $(tool) and allow us to bypass the options and dependencies triggered
    5658# by _1_VCC_PCH_FILE, _1_VCC_COMMON_OBJ_PDB and _PCH_HDR, and also make sure we
    5759# don't get circular dependencies by way of kDepObj and the debug info.
    5860#
    59 define def_unit_vccprecomp_target_pre_2
     61define def_unit_gccprecomp_target_pre_2
    6062 local source := $($(target)_PCH_HDR)
    61  $(source)_TOOL := $(tool)-PCH
    6263 local suff   := $(suffix $(source))
    63  local type   := CXX
     64 local type   := PCH
    6465 $(kb-src-one 2)
    6566endef
Note: See TracChangeset for help on using the changeset viewer.