diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2008-03-19 04:03:40 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2008-03-19 04:03:40 +0000 |
commit | ad71e4de6ba5b79bd58104b97048803fbbd57b54 (patch) | |
tree | a99929036f3b8421b40bfb4023b8b87dc4349100 /Makefile | |
parent | 71be1d1ed87573294a6083556b63e206bf5662e0 (diff) | |
download | netsurf-ad71e4de6ba5b79bd58104b97048803fbbd57b54.tar.gz netsurf-ad71e4de6ba5b79bd58104b97048803fbbd57b54.tar.bz2 |
Purge old buildsystem.
Rename Makefile.unix to Makefile.
svn path=/trunk/netsurf/; revision=3970
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..3b3178f57 --- /dev/null +++ b/Makefile @@ -0,0 +1,239 @@ +# +# Makefile for NetSurf +# +# Copyright 2007 Daniel Silverstone <dsilvers@netsurf-browser.org> +# +# + +# Trivially, invoke as: +# make +# to build native, or: +# make TARGET=riscos +# to cross-build for RO. +# +# Tested on unix platforms (building for GTK and cross-compiling for RO) and +# on RO (building for RO). +# +# To clean, invoke as above, with the 'clean' target +# +# To build developer Doxygen generated documentation, invoke as above, +# with the 'docs' target: +# make docs +# + +all: all-program + +# Determine host type +# NOTE: Currently, this is broken on RISC OS due to what appear to +# be bugs in UnixLib's pipe()/dup2() implementations. Until these +# are fixed and a new build of make is available, manually hardcode +# this to "riscos" (sans quotes). Please remember to change it back +# to "$(shell uname -s)" (sans quotes) again before committing any +# Makefile changes. +HOST := $(shell uname -s) + +ifeq ($(HOST),riscos) +# Build happening on RO platform, default target is RO backend +ifeq ($(TARGET),) +TARGET := riscos +endif +else +# Build happening on non-RO platform, default target is GTK backend +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 + +ifeq ($(TARGET),riscos) +ifeq ($(HOST),riscos) +# Build for RO on RO +CC := gcc +EXEEXT := +else +# Cross-build for RO +CC := /home/riscos/cross/bin/gcc +EXEEXT := ,ff8 +endif +STARTGROUP := +ENDGROUP := +else +STARTGROUP := -Wl,--start-group +ENDGROUP := -Wl,--end-group +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 \ + -D_NETBSD_SOURCE \ + $(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 + +ifeq ($(HOST),Windows_NT) +CFLAGS += -U__STRICT_ANSI__ +endif + +endif + +ifeq ($(TARGET),riscos) +ifeq ($(HOST),riscos) +GCCSDK_INSTALL_ENV := <NSLibs$$Dir> +else +GCCSDK_INSTALL_ENV := /home/riscos/env +endif + +CFLAGS += -I. -O $(WARNFLAGS) -Driscos \ + -std=c99 -D_BSD_SOURCE -D_POSIX_C_SOURCE \ + -mpoke-function-name -mthrowback + +CFLAGS += -I$(GCCSDK_INSTALL_ENV)/include \ + -I$(GCCSDK_INSTALL_ENV)/include/libxml2 \ + -I$(GCCSDK_INSTALL_ENV)/include/libmng +ifeq ($(HOST),riscos) +CFLAGS += -I<OSLib$$Dir> +endif +ASFLAGS += -I. -I$(GCCSDK_INSTALL_ENV)/include +LDFLAGS += -L$(GCCSDK_INSTALL_ENV)/lib -lcares -lrufl -lpencil \ + -lsvgtiny +ifeq ($(HOST),riscos) +LDFLAGS += -LOSLib: -lOSLib32 +else +LDFLAGS += -lOSLib32 +endif +endif + +CLEANS := clean-target + +include Makefile.sources + +OBJECTS := $(sort $(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)$$(RM) $$(DEPROOT)/$(2) + $$(Q)$$(CC) $$(CFLAGS) -MM -MT '$$(DEPROOT)/$2 $$(OBJROOT)/$(3)' \ + -MF $$(DEPROOT)/$(2) $(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)$$(RM) $$(DEPROOT)/$(2) + $$(Q)$$(CC) $$(CFLAGS) -MM -MT '$$(DEPROOT)/$2 $$(OBJROOT)/$(3)' \ + -MF $$(DEPROOT)/$(2) $(1) + +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 $(sort $(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) + +docs: + doxygen Docs/Doxyfile |