diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 619 |
1 files changed, 82 insertions, 537 deletions
@@ -3,6 +3,7 @@ # # Copyright 2007 Daniel Silverstone <dsilvers@netsurf-browser.org> # Copyright 2008 Rob Kendrick <rjek@netsurf-browser.org> +# Copyright 2024 Vincent Sanders <vince@netsurf-browser.org> # # Trivially, invoke as: # make @@ -12,8 +13,7 @@ # # Look at Makefile.config for configuration options. # -# Tested on unix platforms (building for GTK and cross-compiling for RO) and -# on RO (building for RO). +# Best results obtained building on unix platforms cross compiling for others # # To clean, invoke as above, with the 'clean' target # @@ -26,100 +26,8 @@ all: all-program -# Determine host type -# NOTE: HOST determination on RISC OS could fail because of missing bug fixes -# in UnixLib which only got addressed in UnixLib 5 / GCCSDK 4. -# When you don't have 'uname' available, you will see: -# File 'uname' not found -# When you do and using a 'uname' compiled with a buggy UnixLib, you -# will see the following printed on screen: -# RISC OS -# In both cases HOST make variable is empty and we recover from that by -# assuming we're building on RISC OS. -# In case you don't see anything printed (including the warning), you -# have an up-to-date RISC OS build system. ;-) -HOST := $(shell uname -s) - -# Sanitise host -# TODO: Ideally, we want the equivalent of s/[^A-Za-z0-9]/_/g here -HOST := $(subst .,_,$(subst -,_,$(subst /,_,$(HOST)))) - -ifeq ($(HOST),) - HOST := riscos - $(warning Build platform determination failed but that's a known problem for RISC OS so we're assuming a native RISC OS build.) -else - ifeq ($(HOST),RISC OS) - # Fixup uname -s returning "RISC OS" - HOST := riscos - endif -endif -ifeq ($(HOST),riscos) - # Build happening on RO platform, default target is RO backend - ifeq ($(TARGET),) - TARGET := riscos - endif -endif - -ifeq ($(HOST),BeOS) - HOST := beos -endif -ifeq ($(HOST),Haiku) - # Haiku implements the BeOS API - HOST := beos -endif -ifeq ($(HOST),beos) - # Build happening on BeOS platform, default target is BeOS backend - ifeq ($(TARGET),) - TARGET := beos - endif - ifeq ($(TARGET),haiku) - override TARGET := beos - endif -endif - -ifeq ($(HOST),AmigaOS) - HOST := amiga - ifeq ($(TARGET),) - TARGET := amiga - endif -endif - -ifeq ($(HOST),FreeMiNT) - HOST := mint -endif -ifeq ($(HOST),mint) - ifeq ($(TARGET),) - TARGET := atari - endif -endif +# default values for base variables -ifeq ($(findstring MINGW,$(HOST)),MINGW) - # MSYS' uname reports the likes of "MINGW32_NT-6.0" - HOST := windows -endif -ifeq ($(HOST),windows) - ifeq ($(TARGET),) - TARGET := windows - endif -endif - -# Default target is GTK backend -ifeq ($(TARGET),) - TARGET := gtk -endif - -# valid values for the TARGET -VLDTARGET := riscos gtk gtk3 beos amiga amigaos3 framebuffer windows atari monkey - -# Check for valid TARGET -ifeq ($(filter $(VLDTARGET),$(TARGET)),) - $(error Unknown TARGET "$(TARGET)", Must be one of $(VLDTARGET)) -endif - -# ensure empty values for base variables - -# Sub target for build -SUBTARGET= # Resources executable target depends upon RESOURCES= # Messages executable target depends on @@ -128,16 +36,9 @@ MESSAGES:= # The filter applied to the fat (full) messages to generate split messages MESSAGES_FILTER=any # The languages in the fat messages to convert -MESSAGES_LANGUAGES=de en fr it nl +MESSAGES_LANGUAGES=de en fr it nl zh_CN # The target directory for the split messages -MESSAGES_TARGET=!NetSurf/Resources - -# Defaults for tools -PERL=perl -MKDIR=mkdir -TOUCH=touch -STRIP?=strip -SPLIT_MESSAGES=$(PERL) utils/split-messages.pl +MESSAGES_TARGET=resources # build verbosity ifeq ($(V),1) @@ -147,190 +48,11 @@ else endif VQ=@ -# Override this only if the host compiler is called something different -HOST_CC := gcc - -ifeq ($(TARGET),riscos) - ifeq ($(HOST),riscos) - # Build for RO on RO - GCCSDK_INSTALL_ENV := <NSLibs$$Dir> - CCRES := ccres - TPLEXT := - MAKERUN := makerun - SQUEEZE := squeeze - RUNEXT := - CC := gcc - CXX := g++ - EXEEXT := - PKG_CONFIG := - else - # Cross-build for RO (either using GCCSDK 3.4.6 - AOF, - # either using GCCSDK 4 - ELF) - ifeq ($(origin GCCSDK_INSTALL_ENV),undefined) - ifneq ($(realpath /opt/netsurf/arm-unknown-riscos/env),) - GCCSDK_INSTALL_ENV := /opt/netsurf/arm-unknown-riscos/env - else - GCCSDK_INSTALL_ENV := /home/riscos/env - endif - endif - - ifeq ($(origin GCCSDK_INSTALL_CROSSBIN),undefined) - ifneq ($(realpath /opt/netsurf/arm-unknown-riscos/cross/bin),) - GCCSDK_INSTALL_CROSSBIN := /opt/netsurf/arm-unknown-riscos/cross/bin - else - GCCSDK_INSTALL_CROSSBIN := /home/riscos/cross/bin - endif - endif - - CCRES := $(GCCSDK_INSTALL_CROSSBIN)/ccres - TPLEXT := ,fec - MAKERUN := $(GCCSDK_INSTALL_CROSSBIN)/makerun - SQUEEZE := $(GCCSDK_INSTALL_CROSSBIN)/squeeze - RUNEXT := ,feb - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - ifneq (,$(findstring arm-unknown-riscos-gcc,$(CC))) - SUBTARGET := -elf - EXEEXT := ,e1f - ELF2AIF := $(GCCSDK_INSTALL_CROSSBIN)/elf2aif - else - SUBTARGET := -aof - EXEEXT := ,ff8 - endif - CXX := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*g++) - PKG_CONFIG := $(GCCSDK_INSTALL_ENV)/ro-pkg-config - endif -else - ifeq ($(TARGET),beos) - # Building for BeOS/Haiku - #ifeq ($(HOST),beos) - # Build for BeOS on BeOS - GCCSDK_INSTALL_ENV := /boot/develop - CC := gcc - CXX := g++ - EXEEXT := - PKG_CONFIG := pkg-config - #endif - else - ifeq ($(TARGET),windows) - ifneq ($(HOST),windows) - # Set Mingw defaults - GCCSDK_INSTALL_ENV ?= /opt/netsurf/i686-w64-mingw32/env - GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/i686-w64-mingw32/cross/bin - - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - WINDRES := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*windres) - - PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config - else - # Building on Windows - CC := gcc - PKG_CONFIG := - endif - else - ifeq ($(findstring amiga,$(TARGET)),amiga) - ifeq ($(findstring amiga,$(HOST)),amiga) - PKG_CONFIG := pkg-config - else - ifeq ($(TARGET),amigaos3) - GCCSDK_INSTALL_ENV ?= /opt/netsurf/m68k-unknown-amigaos/env - GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/m68k-unknown-amigaos/cross/bin - - SUBTARGET = os3 - else - GCCSDK_INSTALL_ENV ?= /opt/netsurf/ppc-amigaos/env - GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/ppc-amigaos/cross/bin - endif - - override TARGET := amiga - - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - - PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config - endif - else - ifeq ($(TARGET),atari) - ifeq ($(HOST),atari) - PKG_CONFIG := pkg-config - else - ifeq ($(HOST),mint) - PKG_CONFIG := pkg-config - else - GCCSDK_INSTALL_ENV ?= /opt/netsurf/m68k-atari-mint/env - GCCSDK_INSTALL_CROSSBIN ?= /opt/netsurf/m68k-atari-mint/cross/bin - - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - - PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config - endif - endif - else - ifeq ($(TARGET),monkey) - ifeq ($(origin GCCSDK_INSTALL_ENV),undefined) - PKG_CONFIG := pkg-config - else - PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config - endif - - ifneq ($(origin GCCSDK_INSTALL_CROSSBIN),undefined) - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - CXX := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*g++) - endif - else - ifeq ($(TARGET),framebuffer) - ifeq ($(origin GCCSDK_INSTALL_ENV),undefined) - PKG_CONFIG := pkg-config - else - PKG_CONFIG := PKG_CONFIG_LIBDIR="$(GCCSDK_INSTALL_ENV)/lib/pkgconfig" pkg-config - endif - - ifneq ($(origin GCCSDK_INSTALL_CROSSBIN),undefined) - CC := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*gcc) - CXX := $(wildcard $(GCCSDK_INSTALL_CROSSBIN)/*g++) - endif - - else - # All native targets - - # use native package config - PKG_CONFIG := pkg-config - - # gtk target processing - ifeq ($(TARGET),gtk3) - override TARGET := gtk - override NETSURF_GTK_MAJOR := 3 - SUBTARGET = $(NETSURF_GTK_MAJOR) - else - ifeq ($(TARGET),gtk) - ifeq ($(origin NETSURF_GTK_MAJOR),undefined) - override NETSURF_GTK_MAJOR := 2 - else - ifneq ($(NETSURF_GTK_MAJOR),2) - SUBTARGET = $(NETSURF_GTK_MAJOR) - endif - endif - endif - endif - endif - endif - endif - endif - endif - endif -endif +# compute HOST, TARGET and SUBTARGET +include frontends/Makefile.hts -# compiler versioning to adjust warning flags -CC_VERSION := $(shell $(CC) -dumpversion) -CC_MAJOR := $(word 1,$(subst ., ,$(CC_VERSION))) -CC_MINOR := $(word 2,$(subst ., ,$(CC_VERSION))) -define cc_ver_ge -$(shell expr $(CC_MAJOR) \>= $(1) \& $(CC_MINOR) \>= $(2)) -endef - -# CCACHE -ifeq ($(origin CCACHE),undefined) - CCACHE=$(word 1,$(shell ccache -V 2>/dev/null)) -endif -CC := $(CCACHE) $(CC) +# tools used in builds +include Makefile.tools # Target paths OBJROOT = build/$(HOST)-$(TARGET)$(SUBTARGET) @@ -341,142 +63,18 @@ TOOLROOT := $(OBJROOT)/tools CFLAGS_ENV := $(CFLAGS) CXXFLAGS_ENV := $(CXXFLAGS) -# A macro that conditionaly adds flags to the build when a feature is enabled. -# -# 1: Feature name (ie, NETSURF_USE_BMP -> BMP) -# 2: Parameters to add to CFLAGS -# 3: Parameters to add to LDFLAGS -# 4: Human-readable name for the feature -define feature_enabled - ifeq ($$(NETSURF_USE_$(1)),YES) - CFLAGS += $(2) - CXXFLAGS += $(2) - LDFLAGS += $(3) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(4) enabled (NETSURF_USE_$(1) := YES)) - endif - else ifeq ($$(NETSURF_USE_$(1)),NO) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(4) disabled (NETSURF_USE_$(1) := NO)) - endif - else - $$(info M.CONFIG: $(4) error (NETSURF_USE_$(1) := $$(NETSURF_USE_$(1)))) - $$(error NETSURF_USE_$(1) must be YES or NO) - endif -endef - -# A macro that conditionaly adds flags to the build with a uniform display. -# -# 1: Feature name (ie, NETSURF_USE_BMP -> BMP) -# 2: Human-readable name for the feature -# 3: Parameters to add to CFLAGS when enabled -# 4: Parameters to add to LDFLAGS when enabled -# 5: Parameters to add to CFLAGS when disabled -# 6: Parameters to add to LDFLAGS when disabled -define feature_switch - ifeq ($$(NETSURF_USE_$(1)),YES) - CFLAGS += $(3) - CXXFLAGS += $(3) - LDFLAGS += $(4) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(2) enabled (NETSURF_USE_$(1) := YES)) - endif - else ifeq ($$(NETSURF_USE_$(1)),NO) - CFLAGS += $(5) - CXXFLAGS += $(5) - LDFLAGS += $(6) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(2) disabled (NETSURF_USE_$(1) := NO)) - endif - else - $$(info M.CONFIG: $(4) error (NETSURF_USE_$(1) := $$(NETSURF_USE_$(1)))) - $$(error NETSURF_USE_$(1) must be YES or NO) - endif -endef - -# Extend flags with appropriate values from pkg-config for enabled features -# -# 1: pkg-config required modules for feature -# 2: Human-readable name for the feature -define pkg_config_find_and_add - ifeq ($$(PKG_CONFIG),) - $$(error pkg-config is required to auto-detect feature availability) - endif - - PKG_CONFIG_$(1)_EXISTS := $$(shell $$(PKG_CONFIG) --exists $(1) && echo yes) - - ifeq ($$(PKG_CONFIG_$(1)_EXISTS),yes) - CFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(1)) - CXXFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(1)) - LDFLAGS += $$(shell $$(PKG_CONFIG) --libs $(1)) - ifneq ($(MAKECMDGOALS),clean) - $$(info PKG.CNFG: $(2) ($(1)) enabled) - endif - else - ifneq ($(MAKECMDGOALS),clean) - $$(info PKG.CNFG: $(2) ($(1)) failed) - $$(error Unable to find library for: $(2) ($(1))) - endif - endif -endef - -# Extend flags with appropriate values from pkg-config for enabled features -# -# 1: Feature name (ie, NETSURF_USE_RSVG -> RSVG) -# 2: pkg-config required modules for feature -# 3: Human-readable name for the feature -define pkg_config_find_and_add_enabled - ifeq ($$(PKG_CONFIG),) - $$(error pkg-config is required to auto-detect feature availability) - endif - - NETSURF_FEATURE_$(1)_AVAILABLE := $$(shell $$(PKG_CONFIG) --exists $(2) && echo yes) - - ifeq ($$(NETSURF_USE_$(1)),YES) - ifeq ($$(NETSURF_FEATURE_$(1)_AVAILABLE),yes) - CFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(2)) $$(NETSURF_FEATURE_$(1)_CFLAGS) - CXXFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(2)) $$(NETSURF_FEATURE_$(1)_CFLAGS) - LDFLAGS += $$(shell $$(PKG_CONFIG) --libs $(2)) $$(NETSURF_FEATURE_$(1)_LDFLAGS) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) enabled (NETSURF_USE_$(1) := YES)) - endif - else - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) failed (NETSURF_USE_$(1) := YES)) - $$(error Unable to find library for: $(3) ($(2))) - endif - endif - else ifeq ($$(NETSURF_USE_$(1)),AUTO) - ifeq ($$(NETSURF_FEATURE_$(1)_AVAILABLE),yes) - CFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(2)) $$(NETSURF_FEATURE_$(1)_CFLAGS) - CXXFLAGS += $$(shell $$(PKG_CONFIG) --cflags $(2)) $$(NETSURF_FEATURE_$(1)_CFLAGS) - LDFLAGS += $$(shell $$(PKG_CONFIG) --libs $(2)) $$(NETSURF_FEATURE_$(1)_LDFLAGS) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) auto-enabled (NETSURF_USE_$(1) := AUTO)) - NETSURF_USE_$(1) := YES - endif - else - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) auto-disabled (NETSURF_USE_$(1) := AUTO)) - NETSURF_USE_$(1) := NO - endif - endif - else ifeq ($$(NETSURF_USE_$(1)),NO) - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) disabled (NETSURF_USE_$(1) := NO)) - endif - else - ifneq ($(MAKECMDGOALS),clean) - $$(info M.CONFIG: $(3) ($(2)) error (NETSURF_USE_$(1) := $$(NETSURF_USE_$(1)))) - $$(error NETSURF_USE_$(1) must be YES, NO, or AUTO) - endif - endif -endef +# library and feature building macros +include Makefile.macros # ---------------------------------------------------------------------------- # General flag setup # ---------------------------------------------------------------------------- +# host compiler flags +BUILD_CFLAGS = -g -W -Wall -Wundef -Wpointer-arith -Wcast-align \ + -Wwrite-strings -Wmissing-declarations -Wuninitialized \ + -Wno-unused-parameter + # Set up the warning flags here so that they can be overridden in the # Makefile.config COMMON_WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-align \ @@ -491,6 +89,16 @@ ifeq ($(call cc_ver_ge,4,6),1) COMMON_WARNFLAGS += -Wno-unused-but-set-variable endif +ifeq ($(TOOLCHAIN),gcc) + # Implicit fallthrough warnings + ifeq ($(call cc_ver_ge,7,1),1) + COMMON_WARNFLAGS += -Wimplicit-fallthrough=5 + endif +else + # non gcc has different warning syntax + COMMON_WARNFLAGS += -Wimplicit-fallthrough +endif + # deal with chaging warning flags for different platforms ifeq ($(HOST),OpenBSD) # OpenBSD headers are not compatible with redundant declaration warning @@ -521,7 +129,6 @@ $(eval $(call feature_switch,DUKTAPE,Javascript (Duktape),,,,,)) $(eval $(call pkg_config_find_and_add,libcss,CSS)) $(eval $(call pkg_config_find_and_add,libdom,DOM)) $(eval $(call pkg_config_find_and_add,libnsutils,nsutils)) -$(eval $(call pkg_config_find_and_add,libutf8proc,utf8proc)) # Common libraries without pkg-config support LDFLAGS += -lz @@ -529,15 +136,10 @@ LDFLAGS += -lz # Optional libraries with pkgconfig # define additional CFLAGS and LDFLAGS requirements for pkg-configed libs -NETSURF_FEATURE_PNG_CFLAGS := -DWITH_PNG -NETSURF_FEATURE_BMP_CFLAGS := -DWITH_BMP -NETSURF_FEATURE_GIF_CFLAGS := -DWITH_GIF -NETSURF_FEATURE_CURL_CFLAGS := -DWITH_CURL +# We only need to define the ones where the feature name doesn't exactly +# match the WITH_FEATURE flag NETSURF_FEATURE_NSSVG_CFLAGS := -DWITH_NS_SVG -NETSURF_FEATURE_OPENSSL_CFLAGS := -DWITH_OPENSSL NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE -NETSURF_FEATURE_NSPSL_CFLAGS := -DWITH_NSPSL -NETSURF_FEATURE_NSLOG_CFLAGS := -DWITH_NSLOG # libcurl and openssl ordering matters as if libcurl requires ssl it # needs to come first in link order to ensure its symbols can be @@ -552,6 +154,9 @@ else endif $(eval $(call pkg_config_find_and_add_enabled,OPENSSL,openssl,OpenSSL)) +$(eval $(call pkg_config_find_and_add_enabled,UTF8PROC,libutf8proc,utf8)) +$(eval $(call pkg_config_find_and_add_enabled,JPEGXL,libjxl,JPEGXL)) +$(eval $(call pkg_config_find_and_add_enabled,WEBP,libwebp,WEBP)) $(eval $(call pkg_config_find_and_add_enabled,PNG,libpng,PNG)) $(eval $(call pkg_config_find_and_add_enabled,BMP,libnsbmp,BMP)) $(eval $(call pkg_config_find_and_add_enabled,GIF,libnsgif,GIF)) @@ -575,6 +180,25 @@ CXXFLAGS += -DNETSURF_HOMEPAGE=\"$(NETSURF_HOMEPAGE)\" CFLAGS += -DNETSURF_LOG_LEVEL=$(NETSURF_LOG_LEVEL) CXXFLAGS += -DNETSURF_LOG_LEVEL=$(NETSURF_LOG_LEVEL) +# If we're building the sanitize goal, override things +ifneq ($(filter-out sanitize,$(MAKECMDGOALS)),$(MAKECMDGOALS)) +override NETSURF_USE_SANITIZER := YES +override NETSURF_RECOVER_SANITIZERS := NO +endif + +# If we're going to use the sanitizer set it up +ifeq ($(NETSURF_USE_SANITIZER),YES) +SAN_FLAGS := -fsanitize=address -fsanitize=undefined +ifeq ($(NETSURF_RECOVER_SANITIZERS),NO) +SAN_FLAGS += -fno-sanitize-recover +endif +else +SAN_FLAGS := +endif +CFLAGS += $(SAN_FLAGS) +CXXFLAGS += $(SAN_FLAGS) +LDFLAGS += $(SAN_FLAGS) + # and the logging filter CFLAGS += -DNETSURF_BUILTIN_LOG_FILTER=\"$(NETSURF_BUILTIN_LOG_FILTER)\" CXXFLAGS += -DNETSURF_BUILTIN_LOG_FILTER=\"$(NETSURF_BUILTIN_LOG_FILTER)\" @@ -582,6 +206,17 @@ CXXFLAGS += -DNETSURF_BUILTIN_LOG_FILTER=\"$(NETSURF_BUILTIN_LOG_FILTER)\" CFLAGS += -DNETSURF_BUILTIN_VERBOSE_FILTER=\"$(NETSURF_BUILTIN_VERBOSE_FILTER)\" CXXFLAGS += -DNETSURF_BUILTIN_VERBOSE_FILTER=\"$(NETSURF_BUILTIN_VERBOSE_FILTER)\" +# Determine if the C compiler supports statement expressions +# This is needed to permit certain optimisations in our library headers +ifneq ($(shell $(CC) -dM -E - < /dev/null | grep __GNUC__),) +CFLAGS += -DSTMTEXPR=1 +CXXFLAGS += -DSTMTEXPR=1 +endif + +# We trace during link so that we can determine if a libary changes under us in +# order to re-link. This *may* be gcc specific, so may need tweaks in future. +LDFLAGS += -Wl,--trace + # ---------------------------------------------------------------------------- # General make rules # ---------------------------------------------------------------------------- @@ -611,15 +246,18 @@ POSTEXES := include frontends/Makefile # ---------------------------------------------------------------------------- +# Build tools setup +# ---------------------------------------------------------------------------- + +include tools/Makefile + +# ---------------------------------------------------------------------------- # General source file setup # ---------------------------------------------------------------------------- # Content sources include content/Makefile -# render sources -include render/Makefile - # utility sources include utils/Makefile @@ -636,7 +274,6 @@ include desktop/Makefile S_COMMON := \ $(S_CONTENT) \ $(S_FETCHERS) \ - $(S_RENDER) \ $(S_UTILS) \ $(S_HTTP) \ $(S_NSURL) \ @@ -648,24 +285,6 @@ S_COMMON := \ # Message targets # ---------------------------------------------------------------------------- -# Message splitting rule generation macro -# 1 = Language -define split_messages -.INTERMEDIATE:$$(MESSAGES_TARGET)/$(1)/Messages.tmp - -$$(MESSAGES_TARGET)/$(1)/Messages.tmp: resources/FatMessages - $$(VQ)echo "MSGSPLIT: Language: $(1) Filter: $$(MESSAGES_FILTER)" - $$(Q)$$(MKDIR) -p $$(MESSAGES_TARGET)/$(1) - $$(Q)$$(SPLIT_MESSAGES) -l $(1) -p $$(MESSAGES_FILTER) -f messages -o $$@ $$< - -$$(MESSAGES_TARGET)/$(1)/Messages: $$(MESSAGES_TARGET)/$(1)/Messages.tmp - $$(VQ)echo "COMPRESS: $$@" - $$(Q)gzip -9n < $$< > $$@ - -CLEAN_MESSAGES += $$(MESSAGES_TARGET)/$(1)/Messages -MESSAGES += $$(MESSAGES_TARGET)/$(1)/Messages - -endef # generate the message file rules $(eval $(foreach LANG,$(MESSAGES_LANGUAGES), \ @@ -693,15 +312,23 @@ OBJECTS := $(sort $(addprefix $(OBJROOT)/,$(subst /,_,$(patsubst %.c,%.o,$(patsu # Include directory flags IFLAGS = $(addprefix -I,$(INCLUDE_DIRS)) -$(EXETARGET): $(OBJECTS) $(RESOURCES) $(MESSAGES) +$(EXETARGET): $(OBJECTS) $(RESOURCES) $(MESSAGES) tools/linktrace-to-depfile.pl $(VQ)echo " LINK: $(EXETARGET)" -ifneq ($(TARGET)$(SUBTARGET),riscos-elf) - $(Q)$(CC) -o $(EXETARGET) $(OBJECTS) $(LDFLAGS) +ifneq ($(TARGET),riscos) + $(Q)$(CC) -o $(EXETARGET) $(OBJECTS) $(LDFLAGS) > $(DEPROOT)/link-raw.d else - $(Q)$(CXX) -o $(EXETARGET:,ff8=,e1f) $(OBJECTS) $(LDFLAGS) + @# RISC OS targets are a bit special: we need to convert ELF -> AIF + ifeq ($(SUBTARGET),-aof) + $(Q)$(CC) -o $(EXETARGET) $(OBJECTS) $(LDFLAGS) > $(DEPROOT)/link-raw.d + else + $(Q)$(CXX) -o $(EXETARGET:,ff8=,e1f) $(OBJECTS) $(LDFLAGS) > $(DEPROOT)/link-raw.d $(Q)$(ELF2AIF) $(EXETARGET:,ff8=,e1f) $(EXETARGET) $(Q)$(RM) $(EXETARGET:,ff8=,e1f) + endif endif + $(VQ)echo "LINKDEPS: $(EXETARGET)" + $(Q)echo -n "$(EXETARGET) $(DEPROOT)/link.d: " > $(DEPROOT)/link.d + $(Q)$(PERL) tools/linktrace-to-depfile.pl < $(DEPROOT)/link-raw.d >> $(DEPROOT)/link.d ifeq ($(NETSURF_STRIP_BINARY),YES) $(VQ)echo " STRIP: $(EXETARGET)" $(Q)$(STRIP) $(EXETARGET) @@ -713,21 +340,16 @@ ifeq ($(TARGET),beos) $(Q)$(BEOS_SETVER) $(EXETARGET) \ -app $(VERSION_MAJ) $(VERSION_MIN) 0 d 0 \ -short "NetSurf $(VERSION_FULL)" \ - -long "NetSurf $(VERSION_FULL) © 2003 - 2016 The NetSurf Developers" + -long "NetSurf $(VERSION_FULL) © 2003 - 2021 The NetSurf Developers" $(VQ)echo " MIMESET: $(EXETARGET)" $(Q)$(BEOS_MIMESET) $(EXETARGET) endif - clean-target: $(VQ)echo " CLEAN: $(EXETARGET)" $(Q)$(RM) $(EXETARGET) CLEANS += clean-target -clean-testament: - $(VQ)echo " CLEAN: testament.h" - $(Q)$(RM) $(OBJROOT)/testament.h -CLEANS += clean-testament clean-builddir: $(VQ)echo " CLEAN: $(OBJROOT)" @@ -735,91 +357,13 @@ clean-builddir: CLEANS += clean-builddir -.PHONY: all-program testament - -testament $(OBJROOT)/testament.h: - $(Q)$(PERL) utils/git-testament.pl $(CURDIR) $(OBJROOT)/testament.h +.PHONY: all-program all-program: $(EXETARGET) $(POSTEXES) .SUFFIXES: DEPFILES := -# Now some macros which build the make system - -# 1 = Source file -# 2 = dep filename, no prefix -# 3 = obj filename, no prefix -define dependency_generate_c -DEPFILES += $(2) -$$(DEPROOT)/$(2): $$(DEPROOT)/created $(1) Makefile.config - -endef - -# 1 = Source file -# 2 = dep filename, no prefix -# 3 = obj filename, no prefix -define dependency_generate_s -DEPFILES += $(2) -$$(DEPROOT)/$(2): $$(DEPROOT)/created $(1) - -endef - -# 1 = Source file -# 2 = obj filename, no prefix -# 3 = dep filename, no prefix -ifeq ($(CC_MAJOR),2) -# simpler deps tracking for gcc2... -define compile_target_c -$$(DEPROOT)/$(3) $$(OBJROOT)/$(2): $$(OBJROOT)/created - $$(VQ)echo " DEP: $(1)" - $$(Q)$$(RM) $$(DEPROOT)/$(3) - $$(Q)$$(CC) $$(IFLAGS) $$(CFLAGS) -MM \ - $(1) | sed 's,^.*:,$$(DEPROOT)/$(3) $$(OBJROOT)/$(2):,' \ - > $$(DEPROOT)/$(3) - $$(VQ)echo " COMPILE: $(1)" - $$(Q)$$(RM) $$(OBJROOT)/$(2) - $$(Q)$$(CC) $$(COMMON_WARNFLAGS) $$(CWARNFLAGS) $$(IFLAGS) $$(CFLAGS) $(CFLAGS_ENV) -o $$(OBJROOT)/$(2) -c $(1) - -endef -else -define compile_target_c -$$(DEPROOT)/$(3) $$(OBJROOT)/$(2): $$(OBJROOT)/created - $$(VQ)echo " COMPILE: $(1)" - $$(Q)$$(RM) $$(DEPROOT)/$(3) - $$(Q)$$(RM) $$(OBJROOT)/$(2) - $$(Q)$$(CC) $$(COMMON_WARNFLAGS) $$(CWARNFLAGS) $$(IFLAGS) $$(CFLAGS) $(CFLAGS_ENV) \ - -MMD -MT '$$(DEPROOT)/$(3) $$(OBJROOT)/$(2)' \ - -MF $$(DEPROOT)/$(3) -o $$(OBJROOT)/$(2) -c $(1) - -endef -endif - -define compile_target_cpp -$$(DEPROOT)/$(3) $$(OBJROOT)/$(2): $$(OBJROOT)/created - $$(VQ)echo " DEP: $(1)" - $$(Q)$$(RM) $$(DEPROOT)/$(3) - $$(Q)$$(CC) $$(IFLAGS) $$(CXXFLAGS) $$(COMMON_WARNFLAGS) $$(CXXWARNFLAGS) -MM \ - $(1) | sed 's,^.*:,$$(DEPROOT)/$(3) $$(OBJROOT)/$(2):,' \ - > $$(DEPROOT)/$(3) - $$(VQ)echo " COMPILE: $(1)" - $$(Q)$$(RM) $$(OBJROOT)/$(2) - $$(Q)$$(CXX) $$(COMMON_WARNFLAGS) $$(CXXWARNFLAGS) $$(IFLAGS) $$(CXXFLAGS) $(CXXFLAGS_ENV) -o $$(OBJROOT)/$(2) -c $(1) - -endef - -# 1 = Source file -# 2 = obj filename, no prefix -# 3 = dep filename, no prefix -define compile_target_s -$$(DEPROOT)/$(3) $$(OBJROOT)/$(2): $$(OBJROOT)/created - $$(VQ)echo "ASSEMBLE: $(1)" - $$(Q)$$(RM) $$(DEPROOT)/$(3) - $$(Q)$$(RM) $$(OBJROOT)/$(2) - $$(Q)$$(CC) $$(ASFLAGS) -MMD -MT '$$(DEPROOT)/$(3) $$(OBJROOT)/$(2)' \ - -MF $$(DEPROOT)/$(3) -o $$(OBJROOT)/$(2) -c $(1) - -endef # Rules to construct dep lines for each object... $(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \ @@ -839,6 +383,7 @@ $(eval $(foreach SOURCE,$(filter %.m,$(SOURCES)), \ ifeq ($(filter $(MAKECMDGOALS),clean test coverage),) -include $(sort $(addprefix $(DEPROOT)/,$(DEPFILES))) +-include $(DEPROOT)/link.d endif # And rules to build the objects themselves... |