summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.sources95
-rw-r--r--Makefile.unix215
2 files changed, 310 insertions, 0 deletions
diff --git a/Makefile.sources b/Makefile.sources
new file mode 100644
index 000000000..ceb89ec06
--- /dev/null
+++ b/Makefile.sources
@@ -0,0 +1,95 @@
+#
+# Makefile for NetSurf
+#
+# Included by main makefile -- indicates sources
+# for each build.
+#
+
+S_CONTENT := content.c fetch.c fetchcache.c urldb.c \
+ fetchers/fetch_curl.c
+S_CSS := css.c css_enum.c parser.c ruleset.c scanner.c
+S_RENDER := box.c box_construct.c box_normalise.c \
+ directory.c form.c html.c html_redraw.c \
+ imagemap.c layout.c list.c table.c textplain.c
+S_UTILS := filename.c hashtable.c messages.c talloc.c \
+ url.c utf8.c utils.c useragent.c
+S_DESKTOP := knockout.c options.c tree.c version.c
+
+# S_COMMON are sources common to all builds
+S_COMMON := $(addprefix content/,$(S_CONTENT)) \
+ $(addprefix css/,$(S_CSS)) \
+ $(addprefix render/,$(S_RENDER)) \
+ $(addprefix utils/,$(S_UTILS)) \
+ $(addprefix desktop/,$(S_DESKTOP))
+
+S_IMAGE := bmp.c bmpread.c gif.c gifread.c ico.c jpeg.c \
+ mng.c svg.c rsvg.c
+# S_IMAGE are sources related to image management
+S_IMAGE := $(addprefix image/,$(S_IMAGE))
+
+# S_BROWSER are sources related to full browsers but are common
+# between RO and Unix builds
+S_BROWSER := browser.c frames.c history_core.c netsurf.c selection.c textinput.c
+S_BROWSER := $(addprefix desktop/,$(S_BROWSER))
+
+# S_RISCOS are sources purely for the RISC OS build
+S_RISCOS := 401login.c artworks.c assert.c awrender.s bitmap.c buffer.c \
+ cookies.c configure.c debugwin.c dialog.c download.c draw.c filetype.c \
+ font.c global_history.c gui.c help.c history.c hotlist.c image.c \
+ menus.c message.c palettes.c plotters.c plugin.c print.c query.c \
+ save.c save_complete.c save_draw.c schedule.c search.c sprite.c \
+ sslcert.c textarea.c textselection.c theme.c theme_install.c \
+ thumbnail.c \
+ treeview.c ucstables.c uri.c url_complete.c url_protocol.c wimp.c wimp_event.c \
+ window.c gui/progress_bar.c gui/status_bar.c \
+ $(addprefix configure/,con_cache.c con_connect.c con_content.c con_fonts.c \
+ con_home.c con_image.c con_inter.c con_language.c con_memory.c con_secure.c \
+ con_theme.c)
+S_RISCOS := $(addprefix riscos/,$(S_RISCOS)) desktop/save_text.c
+
+# S_GTK are sources purely for the GTK build
+S_GTK := font_pango.c gtk_bitmap.c gtk_gui.c gtk_schedule.c \
+ gtk_thumbnail.c gtk_options.c \
+ gtk_plotters.c gtk_treeview.c gtk_scaffolding.c gtk_completion.c \
+ gtk_login.c gtk_throbber.c \
+ gtk_history.c gtk_window.c gtk_filetype.c gtk_download.c
+S_GTK := $(addprefix gtk/,$(S_GTK))
+
+
+# Some extra rules for building the scanner etc.
+css/css_enum.c css/css_enum.h: css/css_enums css/makeenum
+ $(VQ)echo "MAKEENUM: css"
+ $(Q)$(PERL) css/makeenum css/css_enum < css/css_enums
+css/parser.c css/parser.h: css/parser.y
+ $(VQ)echo " LEMON: css/parser.y"
+ $(Q)# If lemon really fails hard, we'll never know, sorry
+ $(Q)cd css; lemon parser.y || true
+css/scanner.c: css/scanner.l
+ $(VQ)echo " RE2C: css/scanner.l"
+ $(Q)cd css; re2c -s scanner.l > scanner.c
+utils/translit.c: transtab
+ $(VQ)echo "TRANSTAB: utils/translit.c"
+ $(Q)cd utils; $(PERL) tt2code < transtab > translit.c
+
+clean-intermediates:
+ $(VQ)echo " CLEAN: intermediates"
+ $(Q)$(RM) css/css_enum.c css/css_enum.h css/parser.c css/parser.h
+ $(Q)$(RM) css/scanner.c utils/translit.c
+
+CLEANS += clean-intermediates
+
+# Finally select the correct set of sources for this build...
+
+ifeq ($(TARGET),riscos)
+SOURCES := $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_RISCOS)
+EXETARGET := !NetSurf/!RunImage,ff8
+endif
+
+ifeq ($(TARGET),gtk)
+SOURCES := $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_GTK)
+EXETARGET := nsgtk
+endif
+
+ifeq ($(SOURCES),)
+$(error Unable to build NetSurf, could not determine set of sources to build)
+endif
diff --git a/Makefile.unix b/Makefile.unix
new file mode 100644
index 000000000..d924890cb
--- /dev/null
+++ b/Makefile.unix
@@ -0,0 +1,215 @@
+#
+# Makefile for NetSurf
+#
+# Copyright 2007 Daniel Silverstone <dsilvers@netsurf-browser.org>
+#
+#
+
+# Trivially, invoke as:
+# make -f Makefile.unix
+# to build native, or:
+# make -f Makefile.unix TARGET=riscos
+# to cross-build for RO.
+#
+# Thus-far only tested on unix platforms. on RO in theory it ought to
+# work as per the native build.
+#
+# To clean, invoke as above, with the 'clean' target
+#
+
+all: all-program
+
+# Determine host type
+HOST_SYSTEM := $(shell uname -s)
+
+ifeq ($(HOST_SYSTEM),riscos)
+# Native build on RO
+HOST=riscos
+ifeq ($(TARGET),)
+TARGET := riscos
+endif
+else
+HOST=unix
+ifeq ($(TARGET),)
+TARGET := gtk
+endif
+endif
+
+Q=@
+VQ=@
+PERL=perl
+MKDIR=mkdir
+TOUCH=touch
+
+OBJROOT := $(HOST)-$(TARGET)
+
+$(OBJROOT)/created:
+ $(VQ)echo " MKDIR: $(OBJROOT)"
+ $(Q)$(MKDIR) $(OBJROOT)
+ $(Q)$(TOUCH) $(OBJROOT)/created
+
+DEPROOT := $(OBJROOT)/deps
+$(DEPROOT)/created: $(OBJROOT)/created
+ $(VQ)echo " MKDIR: $(DEPROOT)"
+ $(Q)$(MKDIR) $(DEPROOT)
+ $(Q)$(TOUCH) $(DEPROOT)/created
+
+#WARNFLAGS = -W -Wall -Wundef -Wpointer-arith -Wcast-qual \
+# -Wcast-align -Wwrite-strings -Wstrict-prototypes \
+# -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls \
+# -Wnested-externs -Winline -Wno-unused-parameter -Wuninitialized
+
+STARTGROUP := -Wl,--start-group
+ENDGROUP := -Wl,--end-group
+
+ifeq ($(TARGET),riscos)
+ifeq ($(HOST),riscos)
+# Build for RO on RO
+CC := gcc
+else
+# Cross-build for RO
+CC := /home/riscos/cross/bin/gcc
+endif
+STARTGROUP :=
+ENDGROUP :=
+endif
+
+LDFLAGS := -lxml2 -lz -lm -lcurl -lssl -lcrypto -lmng \
+ -ljpeg
+
+ifeq ($(TARGET),gtk)
+# Building for GTK, we need the GTK flags
+
+GTKCFLAGS := -std=c99 -Dgtk -Dnsgtk \
+ -DGTK_DISABLE_DEPRECATED \
+ -D_BSD_SOURCE \
+ -D_XOPEN_SOURCE=600 \
+ -D_POSIX_C_SOURCE=200112L \
+ $(WARNFLAGS) -I. -g -O \
+ $(shell pkg-config --cflags libglade-2.0 gtk+-2.0 librsvg-2.0) \
+ $(shell xml2-config --cflags)
+
+GTKLDFLAGS := $(shell pkg-config --cflags --libs libglade-2.0 gtk+-2.0 gthread-2.0 gmodule-2.0 librsvg-2.0)
+CFLAGS += $(GTKCFLAGS)
+LDFLAGS += $(GTKLDFLAGS) -llcms
+
+ifneq ($(HOST),riscos)
+ifeq ($(shell uname -s),Windows_NT)
+CFLAGS += -U__STRICT_ANSI__
+endif
+endif
+
+endif
+
+ifeq ($(TARGET),riscos)
+GCCSDK_INSTALL_ENV := /home/riscos/env
+
+CFLAGS += -I. -O $(WARNFLAGS) -Driscos -std=c99 -D_BSD_SOURCE
+
+CFLAGS += -I$(GCCSDK_INSTALL_ENV)/include \
+ -I$(GCCSDK_INSTALL_ENV)/include/libxml2 \
+ -I$(GCCSDK_INSTALL_ENV)/include/libmng
+ASFLAGS += -I. -I$(GCCSDK_INSTALL_ENV)/include
+LDFLAGS += -L$(GCCSDK_INSTALL_ENV)/lib -lcares -lOSLib32 -lrufl -lpencil
+endif
+
+CLEANS := clean-target
+
+include Makefile.sources
+
+OBJECTS := $(addprefix $(OBJROOT)/,$(subst /,_,$(patsubst %.c,%.o,$(patsubst %.s,%.o,$(SOURCES)))))
+
+$(EXETARGET): $(OBJECTS)
+ $(VQ)echo " LINK: $(EXETARGET)"
+ $(Q)$(CC) -o $(EXETARGET) $(STARTGROUP) $(OBJECTS) $(ENDGROUP) $(LDFLAGS)
+
+clean-target:
+ $(VQ)echo " CLEAN: $(EXETARGET)"
+ $(Q)$(RM) $(EXETARGET)
+
+clean-builddir:
+ $(VQ)echo " CLEAN: $(OBJROOT)"
+ $(Q)$(RM) -r $(OBJROOT)
+CLEANS += clean-builddir
+
+all-program: $(EXETARGET)
+
+.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) css/css_enum.h css/parser.h
+ $$(VQ)echo " DEP: $(1)"
+ $$(Q)( \
+ (echo -n "$$(DEPROOT)/$2 $$(OBJROOT)/$(3)"; \
+ $$(CC) -M $$(CFLAGS) $(1) | \
+ $$(PERL) -pe's/^.+(:.+)$$$$/$$$$1/') > $$(DEPROOT)/$(2) \
+ ) || ($$(RM) $$(DEPROOT)/$(2) ; exit 1)
+
+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)
+ $$(VQ)echo " DEP: $(1)"
+ $$(Q)( \
+ (echo -n "$$(DEPROOT)/$2 $$(OBJROOT)/$(3)"; \
+ $$(CC) -M $$(ASFLAGS) $(1) | \
+ $$(PERL) -pe's/^.+(:.+)$$$$/$$$$1/') > $$(DEPROOT)/$(2) \
+ ) || $$(RM) $$(DEPROOT)/$(2)
+
+endef
+
+# 1 = Source file
+# 2 = obj filename, no prefix
+# 3 = dep filename, no prefix
+define compile_target_c
+$$(OBJROOT)/$(2): $$(OBJROOT)/created $$(DEPROOT)/$(3)
+ $$(VQ)echo " COMPILE: $(1)"
+ $$(Q)$$(CC) $$(CFLAGS) -o $$@ -c $(1)
+
+endef
+
+# 1 = Source file
+# 2 = obj filename, no prefix
+# 3 = dep filename, no prefix
+define compile_target_s
+$$(OBJROOT)/$(2): $$(OBJROOT)/created
+ $$(VQ)echo " ASSEMBLE: $(1)"
+ $$(Q)$$(CC) $$(ASFLAGS) -o $$@ -c $(1)
+
+endef
+
+# Rules to construct dep lines for each object...
+$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \
+ $(call dependency_generate_c,$(SOURCE),$(subst /,_,$(SOURCE:.c=.d)),$(subst /,_,$(SOURCE:.c=.o)))))
+
+# Cannot currently generate dep files for S files because they're objasm
+# when we move to gas format, we will be able to.
+
+#$(eval $(foreach SOURCE,$(filter %.s,$(SOURCES)), \
+# $(call dependency_generate_s,$(SOURCE),$(subst /,_,$(SOURCE:.s=.d)),$(subst /,_,$(SOURCE:.s=.o)))))
+
+ifneq ($(MAKECMDGOALS),clean)
+-include $(addprefix $(DEPROOT)/,$(DEPFILES))
+endif
+
+# And rules to build the objects themselves...
+
+$(eval $(foreach SOURCE,$(filter %.c,$(SOURCES)), \
+ $(call compile_target_c,$(SOURCE),$(subst /,_,$(SOURCE:.c=.o)),$(subst /,_,$(SOURCE:.c=.d)))))
+
+$(eval $(foreach SOURCE,$(filter %.s,$(SOURCES)), \
+ $(call compile_target_s,$(SOURCE),$(subst /,_,$(SOURCE:.s=.o)),$(subst /,_,$(SOURCE:.s=.d)))))
+
+
+clean: $(CLEANS)