From 6ee6a8c8dc207ec357ded97c996f8a3e48df43f7 Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Sat, 22 Dec 2007 21:15:58 +0000 Subject: 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 --- Makefile.unix | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 Makefile.unix (limited to 'Makefile.unix') 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 +# +# + +# 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) -- cgit v1.2.3