# # CDDL HEADER START # # The contents of this file are subject to the terms of the # Common Development and Distribution License (the "License"). # You may not use this file except in compliance with the License. # # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE # or http://www.opensolaris.org/os/licensing. # See the License for the specific language governing permissions # and limitations under the License. # # When distributing Covered Code, include this CDDL HEADER in each # file and include the License file at usr/src/OPENSOLARIS.LICENSE. # If applicable, add the following below this CDDL HEADER, with the # fields enclosed by brackets "[]" replaced with your own identifying # information: Portions Copyright [yyyy] [name of copyright owner] # # CDDL HEADER END # # # Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2012 by Delphix. All rights reserved. # Copyright 2014 Garrett D'Amore # Copyright 2015, OmniTI Computer Consulting, Inc. All rights reserved. # Copyright 2015 Gary Mills # Copyright 2015 Igor Kozhukhov # Copyright 2016 Toomas Soome # Copyright 2019 RackTop Systems. # Copyright 2025 Oxide Computer Company # Copyright 2020 Peter Tribble # Copyright 2021 OmniOS Community Edition (OmniOSce) Association. # Copyright 2021 Joyent, Inc. # # Hammerhead: Include guard to prevent duplicate inclusion warnings from gmake # when this file is included multiple times through different Makefile chains ifndef _MAKEFILE_MASTER _MAKEFILE_MASTER = 1 # # Makefile.master, global definitions for system source # # # Hammerhead: GNU Make compatibility # # .WAIT is supported natively in GNU Make 4.4+ as a special target # that causes parallel builds to wait for preceding prerequisites. # Do NOT override it - let GNU Make handle it. # # .KEEP_STATE is a dmake feature for dependency tracking. # GNU Make does this automatically, so we define it as a no-op. # .PHONY: .KEEP_STATE .KEEP_STATE: # Hammerhead: Use ?= to allow environment override ROOT ?= /proto # Hammerhead: amd64-only build # MACH=i386 represents the x86 CPU family (used for directory selection). # MACH64=amd64 is used for 64-bit specific paths. # BUILD32=$(POUND_SIGN) below disables 32-bit builds. MACH ?= i386 MACH64 ?= amd64 # # Adjunct root, containing an additional proto area to be searched for headers # and libraries for the target environment, which may not necessarily function # in the build environment. # # Hammerhead: Use ?= to allow environment variable to override ADJUNCT_PROTO?= # HAVE_ADJUNCT_PROTO - ADJUNCT_PROTO is set to a non-default value # NO_ADJUNCT_PROTO - ADJUNCT_PROTO is unset # # This works by replacing any value in ADJUNCT_PROTO with POUND_SIGN, which # only happens if it has some value, and then setting HAVE_ADJUNCT_PROTO # oppositely. NO_ADJUNCT_PROTO=$(ADJUNCT_PROTO:%=$(POUND_SIGN)) $(NO_ADJUNCT_PROTO)HAVE_ADJUNCT_PROTO=$(POUND_SIGN) # # A separate area to be searched for native tools and libraries for use by the # build or the build machine. These libraries are specific to the build # machine and may not work on the target machine. # NATIVE_ADJUNCT= /usr # # Compatibility code for FreeBSD etc. # COMPAT= $(SRC)/compat CONTRIB= $(SRC)/contrib # # RELEASE_BUILD should be cleared for final release builds. # NOT_RELEASE_BUILD is exactly what the name implies. # # The declaration POUND_SIGN is always '#'. This is needed to get around the # make feature that '#' is always a comment delimiter, even when escaped or # quoted. We use this macro expansion method to get POUND_SIGN rather than # always breaking out a shell because the general case can cause a noticable # slowdown in build times when so many Makefiles include Makefile.master. # # While the majority of users are expected to override the setting below # with an env file (via nightly or bldenv), if you aren't building that way # (ie, you're using "ws" or some other bootstrapping method) then you need # this definition in order to avoid the subshell invocation mentioned above. # # Hammerhead: Direct definition for GNU Make compatibility # Original dmake pattern: PRE_POUND=pre\# POUND_SIGN=$(PRE_POUND:pre\%=%) POUND_SIGN := \# NOT_RELEASE_BUILD= RELEASE_BUILD= $(POUND_SIGN) $(RELEASE_BUILD)NOT_RELEASE_BUILD= $(POUND_SIGN) # Hammerhead: SPARC_BLD/INTEL_BLD removed - amd64 only # Allow build-time "configuration" to enable or disable some things. # The default is POUND_SIGN, meaning "not enabled". If the environment # passes in an override like ENABLE_SMB_PRINTING= (empty) that will # uncomment things in the lower Makefiles to enable the feature. ENABLE_SMB_PRINTING= $(POUND_SIGN) # BUILD_TOOLS is the root of all tools including compilers. # ONBLD_TOOLS is the root of all the tools that are part of SUNWonbld. # Hammerhead: Use ?= to allow env.sh to override with local tools proto. # Default to /opt/onbld for system-installed tools. BUILD_TOOLS ?= /opt ONBLD_TOOLS ?= $(BUILD_TOOLS)/onbld # define runtime JAVA_HOME, primarily for cmd/pools/poold JAVA_HOME= /usr/java # define buildtime JAVA_ROOT JAVA_ROOT= /usr/java # Build uses java8 by default. Pass the variable below set to empty # string in the environment to override. BLD_JAVA_11= $(POUND_SIGN) # Hammerhead: GCC 14 toolchain # On OI build VM: /usr/gcc/14 (default) # On standalone hammerhead: /usr (set GNUC_ROOT=/usr in environment) GNUC_ROOT ?= /usr/gcc/14 GCCLIBDIR= $(GNUC_ROOT)/lib GCCLIBDIR64= $(GNUC_ROOT)/lib/$(MACH64) NATIVE_GNUC_ROOT= $(GNUC_ROOT) NATIVE_GCCLIBDIR= $(NATIVE_GNUC_ROOT)/lib NATIVE_GCCLIBDIR64= $(NATIVE_GNUC_ROOT)/lib/$(MACH64) DOCBOOK_XSL_ROOT= /usr/share/sgml/docbook/xsl-stylesheets # Hammerhead: Use ?= to allow environment override for tools that may be missing from onbld RPCGEN ?= $(ONBLD_TOOLS)/bin/$(MACH)/rpcgen ELFEXTRACT= $(ONBLD_TOOLS)/bin/$(MACH)/elfextract # Hammerhead: mbh_patch only exists in i386 directory MBH_PATCH= $(ONBLD_TOOLS)/bin/i386/mbh_patch BTXLD= $(ONBLD_TOOLS)/bin/$(MACH)/btxld # Hammerhead: Use /usr/bin/vtfontcvt as it's not in onbld VTFONTCVT ?= /usr/bin/vtfontcvt # Hammerhead: Use = not ?= because GNU Make has built-in defaults for YACC # (yacc) which prevent ?= from taking effect YACC = $(ONBLD_TOOLS)/bin/$(MACH)/yacc -P \ $(ONBLD_TOOLS)/share/lib/ccs/yaccpar # echo(1) and true(1) are specified without absolute paths, so that the shell # spawned by make(1) may use the built-in versions. This is minimally # problematic, as the shell spawned by make(1) is known and under control, the # only risk being if the shell falls back to $PATH. # # We specifically want an echo(1) that does interpolation of escape sequences, # which ksh93, /bin/sh, and bash will all provide. ECHO= echo TRUE= true INS= $(ONBLD_TOOLS)/bin/$(MACH)/install # Hammerhead: Tools with ?= can be overridden by the env file. # On standalone Hammerhead, boot-essential commands are in /bin/ (not /usr/bin/). # hammerhead.sh exports /bin/ paths; OI builds use the /usr/bin/ defaults below. ED ?= /usr/bin/ed SYMLINK ?= /usr/bin/ln -s LN ?= /usr/bin/ln MKDIR ?= /usr/bin/mkdir CHMOD ?= /usr/bin/chmod MV ?= /usr/bin/mv -f RM ?= /usr/bin/rm -f CUT= /usr/bin/cut NM= /usr/bin/nm DIFF= /usr/bin/diff GREP ?= /usr/bin/grep EGREP ?= /usr/bin/egrep ELFWRAP= /usr/bin/elfwrap KSH93 ?= /usr/bin/ksh93 SED ?= /usr/bin/sed AWK ?= /usr/bin/nawk CP ?= /usr/bin/cp -f MCS= /usr/bin/mcs CAT ?= /usr/bin/cat ELFDUMP= /usr/bin/elfdump M4 ?= /usr/bin/m4 GM4 ?= /usr/bin/gm4 STRIP= /usr/bin/strip # Hammerhead: Use = not ?= because GNU Make has built-in defaults for LEX # (lex) which prevent ?= from taking effect LEX = $(ONBLD_TOOLS)/bin/$(MACH)/lex -Y $(ONBLD_TOOLS)/share/lib/ccs FLEX= /usr/bin/flex BISON= /usr/bin/bison CPP= /usr/bin/cpp SH ?= /usr/bin/sh ANSI_CPP= $(GNUC_ROOT)/bin/cpp JAVAC= $(JAVA_ROOT)/bin/javac JAVADOC= $(JAVA_ROOT)/bin/javadoc JAR= $(JAVA_ROOT)/bin/jar CTFCONVERT= $(ONBLD_TOOLS)/bin/$(MACH)/ctfconvert CTFDIFF= $(ONBLD_TOOLS)/bin/$(MACH)/ctfdiff CTFMERGE= $(ONBLD_TOOLS)/bin/$(MACH)/ctfmerge CTFSTABS= $(ONBLD_TOOLS)/bin/$(MACH)/ctfstabs CTFSTRIP= $(ONBLD_TOOLS)/bin/$(MACH)/ctfstrip MANLINK= $(ONBLD_TOOLS)/bin/$(MACH)/manlink NDRGEN= $(ONBLD_TOOLS)/bin/$(MACH)/ndrgen # Hammerhead: Use our patched genoffsets that adds -E flag for GCC 14 GENOFFSETS= $(SRC)/tools/scripts/genoffsets XREF= $(ONBLD_TOOLS)/bin/xref FIND= /usr/bin/find PERL= /usr/bin/perl PERL_VERSION= 5.10.0 PERL_PKGVERS= -510 PERL_MACH= i86pc PERL_VARIANT= PERL_ARCH= $(PERL_MACH)-solaris$(PERL_VARIANT)-64int PERL_ARCH64= $(PERL_MACH)-solaris$(PERL_VARIANT)-64 PYTHON3_VERSION= 3.9 PYTHON3_PKGVERS= -39 PYTHON3_SUFFIX= PYTHON3= /usr/bin/python$(PYTHON3_VERSION) # BUILDPY3b should be overridden in the env file in order to build python # modules with a secondary python to aid migration between versions. BUILDPY3b= $(POUND_SIGN) PYTHON3b_VERSION= 3.5 PYTHON3b_PKGVERS= -35 PYTHON3b_SUFFIX= m # $(BUILDPY3b)PYTHON3b= /usr/bin/python$(PYTHON3b_VERSION) TOOLS_PYTHON= $(PYTHON3) SORT ?= /usr/bin/sort TR ?= /usr/bin/tr TOUCH= /usr/bin/touch WC= /usr/bin/wc XARGS ?= /usr/bin/xargs ELFEDIT= /usr/bin/elfedit # Hammerhead: dtrace -G invokes the illumos linker (sunld) for DOF linking. # LD_ALTEXEC must be cleared so sunld doesn't redirect to gnu-ld-wrapper # (which doesn't support -Blocal/-Breduce used by dtrace DOF linking). DTRACE= LD_ALTEXEC= /usr/sbin/dtrace -xnolibs -xldpath=/usr/bin/sunld UNIQ= /usr/bin/uniq TAR= /usr/bin/tar ASTBINDIR= /usr/bin MSGCC= $(ASTBINDIR)/msgcc MSGFMT= /usr/bin/msgfmt -s LCDEF= $(ONBLD_TOOLS)/bin/$(MACH)/localedef TIC= $(ONBLD_TOOLS)/bin/$(MACH)/tic ZIC= $(ONBLD_TOOLS)/bin/$(MACH)/zic OPENSSL= /usr/bin/openssl CPCGEN= $(ONBLD_TOOLS)/bin/$(MACH)/cpcgen GENICONVTBL= $(ONBLD_TOOLS)/bin/$(MACH)/geniconvtbl DEFAULT_CONSOLE_COLOR= \ -DDEFAULT_ANSI_FOREGROUND=ANSI_COLOR_WHITE \ -DDEFAULT_ANSI_BACKGROUND=ANSI_COLOR_BLACK FILEMODE= 644 DIRMODE= 755 # Hammerhead: GNU Make compatibility # In dmake, .NOTPARALLEL: was the default, overridden by .PARALLEL: in subdirs. # In GNU Make, parallelism is controlled by -j flag. We don't set .NOTPARALLEL: # here because that would globally disable parallelism. # Individual Makefiles that need serial builds should use .NOTPARALLEL: # For stylistic checks # # Note that the X and C checks are not used at this time and may need # modification when they are actually used. # CSTYLE= $(ONBLD_TOOLS)/bin/cstyle CSTYLE_TAIL= HDRCHK= $(ONBLD_TOOLS)/bin/hdrchk HDRCHK_TAIL= JSTYLE= $(ONBLD_TOOLS)/bin/jstyle DOT_H_CHECK= \ @$(ECHO) "checking $<"; $(CSTYLE) $< $(CSTYLE_TAIL); \ $(HDRCHK) $< $(HDRCHK_TAIL) # Hammerhead: pre-generated (rpcgen + GNU cpp truncation bug) # DOT_X_CHECK= \ # @$(ECHO) "checking $<"; $(RPCGEN) -C -h $< | $(CSTYLE) $(CSTYLE_TAIL); \ # $(RPCGEN) -C -h $< | $(HDRCHK) $< $(HDRCHK_TAIL) DOT_X_CHECK= \ @$(ECHO) "skipping rpcgen check for $< (pre-generated)" DOT_C_CHECK= \ @$(ECHO) "checking $<"; $(CSTYLE) $< $(CSTYLE_TAIL) MANIFEST_CHECK= @: INS.file= $(RM) $@; $(INS) -s -m $(FILEMODE) -f $(@D) $< INS.dir= $(INS) -s -d -m $(DIRMODE) $@ # installs and renames at once # INS.rename= $(INS.file); $(MV) $(@D)/$( $@; $(CHMOD) $(FILEMODE) $@; $(TOUCH) -r $< $@ # MACH must be set in the shell environment per uname -p on the build host # More specific architecture variables should be set in lower makefiles. # Hammerhead: Simplified for amd64-only - 64-bit only, no 32-bit builds MACH64= amd64 BUILD64= BUILD32= $(POUND_SIGN) # # C compiler verbose mode. This is so we can enable it globally, # but turn it off in the lower level makefiles of things we cannot # (or aren't going to) fix. # CCVERBOSE= -v # # generate v9 code which tolerates callers using the v7 ABI, for the sake of # system calls. CC32BITCALLERS= -massume-32bit-callers # GCC, especially, is increasingly beginning to auto-inline functions and # sadly does so separately not under the general -fno-inline-functions # Additionally, we wish to prevent optimisations which cause GCC to clone # functions -- in particular, these may cause unhelpful symbols to be # emitted instead of function names CCNOAUTOINLINE= \ -fno-inline-small-functions \ -fno-inline-functions-called-once \ -fno-ipa-cp \ -fno-ipa-icf # GCC may put functions in different named sub-sections of .text based on # their presumed calling frequency. At least in the kernel, where we actually # deliver relocatable objects, we don't want this to happen. # # Since at present we don't benefit from this even in userland, we disable it globally, # but the application of this may move into usr/src/uts/ in future. CCNOREORDER= -fno-reorder-functions \ -fno-reorder-blocks-and-partition # # gcc has a rather aggressive optimization on by default that infers loop # bounds based on undefined behavior (!!). This can lead to some VERY # surprising optimizations -- ones that may be technically correct in the # strictest sense but also result in incorrect program behavior. We turn # this optimization off, with extreme prejudice. # CCNOAGGRESSIVELOOPS= -fno-aggressive-loop-optimizations # # gcc has a limit on the maximum size of a function which will be inlined # in the presence of the 'inline' keyword; this limit varies between versions # of gcc. For consistent output and to ensure that some of the slightly larger # functions are inlined as intended, we specify the limit explicitly. # CCINLINESIZE= --param=max-inline-insns-single=450 CCWARNINLINE= -Winline # # Options to control which version of stack-protector we enable. This # gives us a bit of flexibility and is unfortunately necessary as some # modules do not function correctly with our defaults (qede). # # o STACKPROTECT_ Sets the appropriate version for the compiler # o STACKPROTECT_strong Sets us to use strong on all of the # compilers it supports. This is the same # as the default. # # o STACKPROTECT_none Disables the stack protector. # # o STACKPROTECT_all Enables it for everything. # # o STACKPROTECT_basic Enables the basic stack protector. # # -fstack-protector-strong is not available in gcc4 which is why we # have per-compiler versions below. These are not added to the default # global CFLAGS at this time as it's being incrementally enabled # throughout the build. # STACKPROTECT_ = -fstack-protector-strong STACKPROTECT_strong = $(STACKPROTECT_) STACKPROTECT_none = STACKPROTECT_all = -fstack-protector-all STACKPROTECT_basic = -fstack-protector STACKPROTECT_LD_ = -lssp_ns STACKPROTECT_LD_none = STACKPROTECT_LD_all = $(STACKPROTECT_LD_) STACKPROTECT_LD_basic = $(STACKPROTECT_LD_) CCSTACKPROTECT= $(STACKPROTECT_$(STACKPROTECT)) LDSTACKPROTECT= $(STACKPROTECT_LD_$(STACKPROTECT)) # Hammerhead: amd64-only XARCH flag amd64_XARCH= -m64 -Ui386 -U__i386 # Hammerhead: i386 (32-bit) flags needed for dboot early boot code # The dboot code starts in 32-bit protected mode before transitioning to 64-bit i386_XARCH= -m32 i386_CFLAGS= $(i386_XARCH) i386_ASFLAGS= $(i386_CFLAGS) # # These flags define what we need to be 'standalone' i.e. -not- part # of the rather more cosy userland environment. This basically means # the kernel. # # Disabling MMX also disables 3DNow, disabling SSE also disables all later # additions to SSE (SSE2, AVX ,etc.) NO_SIMD= -mno-mmx -mno-sse # Hammerhead: Changed -xmodel=kernel to GCC -mcmodel=kernel # -mno-red-zone is critical: the x86_64 ABI red zone (128 bytes below rsp) # must not be used in kernel code — interrupts and traps use the stack from # rsp and will overwrite red zone data, corrupting local variables. amd64_STAND_FLAGS= -mcmodel=kernel -mno-red-zone $(NO_SIMD) # Hammerhead: -msave-args saves function arguments on stack for mdb debugging. # This is an illumos-patched GCC extension (not available in stock upstream GCC). # On OI build VM: set SAVEARGS=-msave-args in environment (hammerhead.sh does this) # On standalone: leave empty (stock GCC 14 from bootstrap) SAVEARGS ?= amd64_STAND_FLAGS += $(SAVEARGS) # Hammerhead: amd64-only - no 32-bit STAND_FLAGS STAND_FLAGS_64 = $($(MACH64)_STAND_FLAGS) # # turn warnings into errors (C) # Hammerhead: Changed Sun Studio flags to GCC equivalents CERRWARN = -Wall -Wextra -Werror CERRWARN += -Wno-missing-braces CERRWARN += -Wno-sign-compare CERRWARN += -Wno-unused-parameter CERRWARN += -Wno-missing-field-initializers # Unfortunately, this option can misfire very easily and unfixably. CERRWARN += -Wno-array-bounds CNOWARN_UNINIT = -Wno-maybe-uninitialized CERRWARN += include $(SRC)/Makefile.smatch # # turn warnings into errors (C++) # Hammerhead: Changed Sun Studio flags to GCC equivalents CCERRWARN = -Wall -Wextra -Werror CCERRWARN += -Wno-missing-braces CCERRWARN += -Wno-sign-compare CCERRWARN += -Wno-unused-parameter CCERRWARN += -Wno-missing-field-initializers # C standard # Hammerhead: Changed Sun Studio -xc99 to GCC -std CSTD_GNU89= -std=gnu89 CSTD_GNU99= -std=gnu99 CSTD_GNU17= -std=gnu17 CSTD= $(CSTD_GNU89) # In most places, assignments to these macros should be appended with += # (CPPFLAGS.first allows values to be prepended to CPPFLAGS). # Hammerhead: SPARC CFLAGS removed - amd64 only # Hammerhead: amd64-only CFLAGS amd64_CFLAGS= $(amd64_XARCH) $(MACH64)_ASFLAGS= $($(MACH64)_CFLAGS) ASFLAGS64= $($(MACH64)_ASFLAGS) # Hammerhead: amd64-only optimization flags amd64_COPTFLAG= -O2 COPTFLAG64= $($(MACH64)_COPTFLAG) # Sometimes we want all symbols and types in debugging information even # if they aren't used. CALLSYMS= -fno-eliminate-unused-debug-symbols \ -fno-eliminate-unused-debug-types # # We force the compilers to generate the debugging information best understood # by the CTF tools. Currently this is DWARFv4. # DEBUGFORMAT= -gdwarf-4 -gstrict-dwarf # # Ask the compiler to include debugging information # CCGDEBUG= -g $(DEBUGFORMAT) # # Flags used to build in debug mode for ctf generation. # # Hammerhead: amd64-only CTF_FLAGS CTF_FLAGS_amd64 = $(CCGDEBUG) $(CSTD) $(SAVEARGS) CTF_FLAGS_64 = $(CTF_FLAGS_$(MACH64)) CTF_FLAGS = $(CTF_FLAGS_64) # # Flags used with genoffsets # Hammerhead: Add -Wno-builtin-declaration-mismatch for GCC 14 compatibility GENOFFSETS_FLAGS = $(CALLSYMS) -Wno-builtin-declaration-mismatch # Hammerhead: Use GCC directly instead of cw wrapper OFFSETS_CREATE = $(GENOFFSETS) -s $(CTFSTABS) -r $(CTFCONVERT) \ $(GCC) $(GENOFFSETS_FLAGS) $(CFLAGS) $(CPPFLAGS) OFFSETS_CREATE64 = $(GENOFFSETS) -s $(CTFSTABS) -r $(CTFCONVERT) \ $(GCC) $(GENOFFSETS_FLAGS) $(CFLAGS64) $(CPPFLAGS) # dmake SOURCEDEBUG=yes ... enables source-level debugging information, and # avoids stripping it. SOURCEDEBUG = $(POUND_SIGN) SRCDBGBLD = $(SOURCEDEBUG:yes=) # # These variables are intended ONLY for use by developers to safely pass extra # flags to the compilers without unintentionally overriding Makefile-set # flags. They should NEVER be set to any value in a Makefile. # # They come last in the associated FLAGS variable such that they can # explicitly override things if necessary, there are gaps in this, but it's # the best we can manage. # CUSERFLAGS = CUSERFLAGS64 = $(CUSERFLAGS) CCUSERFLAGS = CCUSERFLAGS64 = $(CCUSERFLAGS) CSOURCEDEBUGFLAGS = CCSOURCEDEBUGFLAGS = $(SRCDBGBLD)CSOURCEDEBUGFLAGS = $(CCGDEBUG) $(SRCDBGBLD)CCSOURCEDEBUGFLAGS = $(CCGDEBUG) # Hammerhead: For amd64-only build, CFLAGS uses 64-bit settings # Original illumos uses $(MACH)_CFLAGS which would be i386_CFLAGS (-m32) # We use $(MACH64)_CFLAGS which is amd64_CFLAGS (-m64) CFLAGS= $(COPTFLAG64) $($(MACH64)_CFLAGS) \ $(CERRWARN) $(CSTD) $(CCNOAUTOINLINE) $(CCNOREORDER) \ $(CCNOAGGRESSIVELOOPS) $(CCINLINESIZE) \ $(CSOURCEDEBUGFLAGS) $(CUSERFLAGS) CFLAGS64= $(COPTFLAG64) $($(MACH64)_CFLAGS) \ $(CERRWARN) $(CSTD) $(CCNOAUTOINLINE) $(CCNOREORDER) \ $(CCNOAGGRESSIVELOOPS) $(CCINLINESIZE) \ $(CSOURCEDEBUGFLAGS) $(CUSERFLAGS64) # # Flags that are used to build parts of the code that are subsequently # run on the build machine (also known as the NATIVE_BUILD). # NATIVE_CFLAGS= $(COPTFLAG) $($(NATIVE_MACH)_CFLAGS) \ $(CERRWARN) $(CSTD) $(CCNOAUTOINLINE) \ $(CCNOREORDER) $(CCNOAGGRESSIVELOOPS) $(CCINLINESIZE) \ $(CSOURCEDEBUGFLAGS) $(CUSERFLAGS) NATIVE_ASFLAGS= $(NATIVE_CFLAGS) NATIVE_CCFLAGS= $(CCOPTFLAG) $($(NATIVE_MACH)_CCFLAGS) $(CCSOURCEDEBUGFLAGS) \ $(CCUSERFLAGS) NATIVE_CFLAGS64= $(COPTFLAG64) $($(NATIVE_MACH64)_CFLAGS) \ $(CERRWARN) $(CSTD) $(CCNOAUTOINLINE) \ $(CCNOREORDER) $(CCNOAGGRESSIVELOOPS) $(CCINLINESIZE) \ $(CSOURCEDEBUGFLAGS) $(CUSERFLAGS64) NATIVE_ASFLAGS64= $(NATIVE_CFLAGS64) NATIVE_CCFLAGS64= $(CCOPTFLAG64) $($(NATIVE_MACH64)_CCFLAGS) \ $(CCSOURCEDEBUGFLAGS) $(CCUSERFLAGS64) DTEXTDOM=-DTEXT_DOMAIN=\"$(TEXT_DOMAIN)\" # For messaging. DTS_ERRNO=-D_TS_ERRNO CPPFLAGS.first= # Please keep empty. Only lower makefiles should set this. CPPFLAGS.master=$(DTEXTDOM) $(DTS_ERRNO) \ $(ENVCPPFLAGS1) $(ENVCPPFLAGS2) $(ENVCPPFLAGS3) $(ENVCPPFLAGS4) \ $(ADJUNCT_PROTO:%=-I%/usr/include) CPPFLAGS.native=$(ENVCPPFLAGS1) $(ENVCPPFLAGS2) $(ENVCPPFLAGS3) \ $(ENVCPPFLAGS4) -I$(NATIVE_ADJUNCT)/include CPPFLAGS= $(CPPFLAGS.first) $(CPPFLAGS.master) AS_CPPFLAGS= $(CPPFLAGS.first) $(CPPFLAGS.master) JAVAFLAGS= -source 7 -target 7 -Xlint:deprecation,-options $(BLD_JAVA_11)JAVAFLAGS= -source 7 -target 7 -Xlint:-options # # For source message catalogue # .SUFFIXES: $(SUFFIXES) .i .po MSGROOT= $(ROOT)/catalog MSGDOMAIN= $(MSGROOT)/$(TEXT_DOMAIN) MSGDOMAINPOFILE = $(MSGDOMAIN)/$(POFILE) DCMSGDOMAIN= $(MSGROOT)/LC_TIME/$(TEXT_DOMAIN) DCMSGDOMAINPOFILE = $(DCMSGDOMAIN)/$(DCFILE:.dc=.po) CLOBBERFILES += $(POFILE) $(POFILES) COMPILE.cpp= $(CC) -E -C $(CFLAGS) $(CPPFLAGS) # Hammerhead: C++ preprocessor for message extraction - uses CCFLAGS instead of CFLAGS # to avoid passing -std=gnu89 (a C-only flag) to the C++ compiler COMPILE.ccpp= $(CCC) -E -C $(CCFLAGS) $(CPPFLAGS) XGETTEXT= /usr/bin/xgettext XGETFLAGS= -c TRANSLATION_NOTE # Hammerhead: GNU xgettext may not be at /usr/gnu/bin on self-hosted builds GNUXGETTEXT= $(shell test -x /usr/gnu/bin/xgettext && echo /usr/gnu/bin/xgettext || echo /bin/true) GNUXGETFLAGS= --add-comments=TRANSLATION_NOTE --keyword=_ \ --strict --no-location --omit-header BUILD.po= $(XGETTEXT) $(XGETFLAGS) -d $( $@ ;\ $(RM) $( $*.c $(LINK.c) -o $@ $*.c -ll $(LDLIBS) $(POST_PROCESS) $(RM) $*.c .l.o: $(RM) $*.c $(LEX.l) $< > $*.c $(COMPILE.c) -o $@ $*.c $(CTFCONVERT_HOOK) $(POST_PROCESS_O) $(RM) $*.c .bin.o: $(COMPILE.b) -o $@ $< $(POST_PROCESS_O) .java.class: $(COMPILE.java) $< # Bourne and Korn shell script message catalog build rules. # We extract all gettext strings with sed(1) (being careful to permit # multiple gettext strings on the same line), weed out the dups, and # build the catalogue with awk(1). .sh.po .ksh.po: $(SED) -n -e ":a" \ -e "h" \ -e "s/.*gettext *\(\"[^\"]*\"\).*/\1/p" \ -e "x" \ -e "s/\(.*\)gettext *\"[^\"]*\"\(.*\)/\1\2/" \ -e "t a" \ $< | sort -u | $(AWK) '{ print "msgid\t" $$0 "\nmsgstr" }' > $@ # # Python and Perl executable and message catalog build rules. # .SUFFIXES: .pl .pm .py .pyc .pl: $(RM) $@; $(SED) -e "s@TEXT_DOMAIN@\"$(TEXT_DOMAIN)\"@" $< > $@; $(CHMOD) +x $@ .py: $(RM) $@; $(SED) \ -e "1s:^\#!@PYTHON@:\#!$(PYSHEBANG):" \ -e "1s:^\#!@TOOLS_PYTHON@:\#!$(TOOLS_PYTHON):" \ < $< > $@; $(CHMOD) +x $@ .py.po: $(GNUXGETTEXT) $(GNUXGETFLAGS) -d $( $@ ; $(RM) $( $@ .h.i: $(CPPFORPO) $< > $@ .y.i: $(YACC) -d $< $(CPPFORPO) y.tab.c > $@ $(RM) y.tab.c .l.i: $(LEX) $< $(CPPFORPO) lex.yy.c > $@ $(RM) lex.yy.c .c.po: $(CPPFORPO) $< > $<.i $(BUILD.po) .cc.po: $(CPPFORPOCC) $< > $<.i $(BUILD.po) .y.po: $(YACC) -d $< $(CPPFORPO) y.tab.c > $<.i $(BUILD.po) $(RM) y.tab.c .l.po: $(LEX) $< $(CPPFORPO) lex.yy.c > $<.i $(BUILD.po) $(RM) lex.yy.c # # Rules to perform stylistic checks # .SUFFIXES: .x .xml .check .xmlchk .h.check: $(DOT_H_CHECK) .x.check: $(DOT_X_CHECK) .xml.xmlchk: $(MANIFEST_CHECK) endif # _MAKEFILE_MASTER