diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2007-12-22 21:15:58 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2007-12-22 21:15:58 +0000 |
commit | 6ee6a8c8dc207ec357ded97c996f8a3e48df43f7 (patch) | |
tree | 13f61e557a9ffb901475fe38fc12f85bfc6093b4 | |
parent | 6a11f56dca61a1a67c8734502704a92729ad0e96 (diff) | |
download | netsurf-6ee6a8c8dc207ec357ded97c996f8a3e48df43f7.tar.gz netsurf-6ee6a8c8dc207ec357ded97c996f8a3e48df43f7.tar.bz2 |
Initial work on new makesystem. See top of Makefile.unix for notes. Not yet finished, will make ML posting when done.
svn path=/trunk/netsurf/; revision=3671
-rw-r--r-- | Makefile.sources | 95 | ||||
-rw-r--r-- | Makefile.unix | 215 |
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) |