Skip to content
Snippets Groups Projects
Commit dbd86c7b authored by deuce's avatar deuce
Browse files

New build system.

parent 4a7ea90a
No related branches found
No related tags found
No related merge requests found
...@@ -20,13 +20,13 @@ include $(SRC_ROOT)/build/Common.gmake # defines clean and output directory rule ...@@ -20,13 +20,13 @@ include $(SRC_ROOT)/build/Common.gmake # defines clean and output directory rule
CFLAGS += -I$(XPDEV_SRC) $(CIOLIB-MT_CFLAGS) CFLAGS += -I$(XPDEV_SRC) $(CIOLIB-MT_CFLAGS)
# UIFC Library Link Rule # UIFC Library Link Rule
$(UIFCLIB): $(OBJODIR) $(OBJS) $(UIFCLIB): $(OBJS)
@echo Creating $@ ... @echo Creating $@ ...
$(QUIET)ar rc $@ $(OBJS) $(QUIET)ar rc $@ $(OBJS)
$(QUIET)ranlib $@ $(QUIET)ranlib $@
# MT-UIFC Library Link Rule # MT-UIFC Library Link Rule
$(UIFCLIB-MT): $(MTOBJODIR) $(MT_OBJS) $(UIFCLIB-MT): $(MT_OBJS)
@echo Creating $@ ... @echo Creating $@ ...
$(QUIET)ar rc $@ $(MT_OBJS) $(QUIET)ar rc $@ $(MT_OBJS)
$(QUIET)ranlib $@ $(QUIET)ranlib $@
SRC_ROOT = ..
# Cross platform/compiler definitions
!include $(SRC_ROOT)\build\Common.bmake # defines clean and output directory rules
CFLAGS = $(CFLAGS) $(XPDEV-MT_CFLAGS) $(CIOLIB-MT_CFLAGS)
$(UIFCLIB): $(OBJS)
@echo Creating $< ...
-$(QUIET)$(DELETE) $@
&$(QUIET)tlib $@ +$**
$(UIFCLIB-MT): $(MT_OBJS)
@echo Creating $< ...
-$(QUIET)$(DELETE) $@
&$(QUIET)tlib $@ +$**
all: lib mtlib all: lib mtlib
lib: $(LIBODIR) $(UIFCLIB) lib: $(OBJODIR) $(LIBODIR) $(UIFCLIB)
mtlib: $(LIBODIR) $(UIFCLIB-MT) mtlib: $(MTOBJODIR) $(LIBODIR) $(UIFCLIB-MT)
# Available Options:
# NEED_THREADS = Set flags suitable for threaded programs
# Set DEBUG
ifndef DEBUG
ifndef RELEASE
DEBUG := 1
endif
endif
# VERBOSE/QUITE
ifndef VERBOSE
QUIET = @
endif
# Compiler-specific options
CFLAGS += -MMD
ifdef BUILD_DEPENDS
ifdef DONT_CLOBBER_CC
CC ?= gcc
else
CC := gcc
endif
CCPRE := $(CC)
CC := $(XPDEV)/../build/mkdep -a
CXX := $(XPDEV)/../build/mkdep -a
LD := echo
COMPILE_MSG := Depending
else
ifdef DONT_CLOBBER_CC
CC ?= gcc
else
CC := gcc
endif
CCPRE := $(CC)
CXX ?= g++
LD ?= ld
COMPILE_MSG := Compiling
endif
SLASH = /
OFILE = o
ifdef DEBUG
BUILD = debug
else
BUILD = release
endif
BUILDPATH ?= $(BUILD)
# Get OS
ifndef os
os = $(shell uname)
endif
os := $(shell echo $(os) | tr '[A-Z]' '[a-z]' | tr ' ' '_')
machine := $(shell if uname -m | egrep -v "(i[3456789]|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
ifeq ($(machine),sun4u)
CFLAGS += -D__BIG_ENDIAN__
endif
ifeq ($(machine),)
machine := $(os)
else
machine := $(os).$(machine)
endif
LIBODIR := $(CCPRE).$(machine).lib.$(BUILDPATH)
EXEODIR := $(CCPRE).$(machine).exe.$(BUILDPATH)
LDFLAGS += -L$(LIBODIR)
ifeq ($(os),netbsd)
DELETE := rm -f
else
ifeq ($(os),openbsd)
DELETE := rm -f
else
ifeq ($(os),sunos)
DELETE := rm -f
else
DELETE = rm -fv
endif
endif
endif
EXEFILE :=
ifeq ($(os),openbsd)
LIBFILE = .so.0.0
else
ifeq ($(os),darwin)
LIBFILE = .dylib
else
LIBFILE = .so
endif
endif
LIBPREFIX = lib
# OS Specific Flags
ifeq ($(os),sunos) # Solaris
CFLAGS += -D__solaris__ -DNEEDS_DAEMON -DNEEDS_FORKPTY -DNEEDS_SETENV -DNEEDS_CFMAKERAW
endif
ifeq ($(os),netbsd) # NetBSD
CFLAGS += -D__unix__ -I/usr/pkg/include -I/usr/pkg/pthreads/include -DNEEDS_FORKPTY
endif
ifeq ($(os),darwin)
CFLAGS += -D__unix__ -fno-common -D__DARWIN__
LDFLAGS += -lm
endif
# PThread-specific flags
ifeq ($(os),linux) # Linux
ifndef THREADS_ACTUALLY_WORK
PTHREAD_CFLAGS += -D_THREAD_SUID_BROKEN
endif
endif
PTHREAD_CFLAGS += -D_THREAD_SAFE -D_REENTRANT
ifeq ($(os),freebsd) # FreeBSD
PTHREAD_CFLAGS += -DUSE_XP_SEMAPHORES
PTHREAD_LDFLAGS += -pthread
XP_SEM := 1
else
ifeq ($(os),openbsd) # OpenBSD
PTHREAD_CFLAGS += -DUSE_XP_SEMAPHORES
PTHREAD_LDFLAGS += -pthread
XP_SEM := 1
else
ifeq ($(os),netbsd) # NetBSD
PTHREAD_CFLAGS += -D__unix__ -DUSE_XP_SEMAPHORES
PTHREAD_LDFLAGS += -L/usr/pkg/lib -L/usr/pkg/pthreads/lib -lpthread
XP_SEM := 1
else
ifeq ($(os),qnx) # QNX
else
ifeq ($(os),darwin) # Darwin/Mac OS X
PTHREAD_CFLAGS += -D__unix__ -DUSE_XP_SEMAPHORES -D__DARWIN__
PTHREAD_LDFLAGS += -lpthread
XP_SEM := 1
else
ifeq ($(os),sunos) # Solaris
XP_SEM := 1
PTHREAD_CFLAGS += -D_POSIX_PTHREAD_SEMANTICS
PTHREAD_CFLAGS += -DUSE_XP_SEMAPHORES
PTHREAD_LDFLAGS += -lpthread
else # Linux / Other UNIX
XP_SEM := 1
PTHREAD_CFLAGS += -DUSE_XP_SEMAPHORES
PTHREAD_LDFLAGS += -lpthread
endif
endif
endif
endif
endif
endif
ifdef DEBUG
CFLAGS += -ggdb
CFLAGS += -D_DEBUG
ODIR := $(ODIR).debug
else # RELEASE
CFLAGS := -O3 $(CFLAGS)
ODIR := $(ODIR).release
endif
vpath %.c $(XPDEV)
CFLAGS += -I$(XPDEV)
-include targets.mk
-include $(XPDEV)/rules.mk
-include objects.mk # defines $(OBJS)
ifdef XP_SEM
PTHREAD_OBJS += $(LIBODIR)$(SLASH)xpsem.$(OFILE)
endif
# Implicit C Compile Rule
$(LIBODIR)/%.o : %.c $(BUILD_DEPENDS)
@echo $(COMPILE_MSG) $<
$(QUIET)$(CC) $(CFLAGS) -o $@ -c $<
# Implicit C++ Compile Rule
$(LIBODIR)/%.o : %.cpp $(BUILD_DEPENDS)
@echo $(COMPILE_MSG) $<
$(QUIET)$(CXX) $(CFLAGS) -o $@ -c $<
ifdef NEED_THREADS
CFLAGS += $(PTHREAD_CFLAGS)
LDFLAGS += $(PTHREAD_LDFLAGS)
OBJS += $(PTHREAD_OBJS)
endif
depend:
$(QUIET)$(DELETE) $(LIBODIR)/.depend
$(QUIET)$(DELETE) $(EXEODIR)/.depend
$(QUIET)$(MAKE) BUILD_DEPENDS=FORCE
FORCE:
-include $(LIBODIR)/.depend
-include $(EXEODIR)/.depend
-include $(LIBODIR)/*.d
-include $(EXEODIR)/*.d
# Makefile SRC_ROOT = ..
!include $(SRC_ROOT)/build/Common.bmake
#########################################################################
# Makefile for cross-platform development "wrappers" test # $(XPDEV_LIB): $(OBJODIR) $(OBJS)
# For use with Borland or Microsoft C++ Compilers for Win32 # @echo Creating $< ...
# @format.tab-size 4 # -$(QUIET)$(DELETE) $@
# # &$(QUIET)tlib $@ +$**
# usage: make [msc=1] #
######################################################################### $(XPDEV-MT_LIB): $(MTOBJODIR) $(MTOBJS)
@echo Creating $< ...
# $Id$ -$(QUIET)$(DELETE) $@
&$(QUIET)tlib $@ +$**
# Macros
DEBUG = 1 # Comment out for release (non-debug) version
# OS-specific
SLASH = \ # This comment is necessary
OFILE = obj
LIBFILE = .dll
EXEFILE = .exe
DELETE = echo y | del
# Compiler-specific
!ifdef msc # Microsoft Visual C++
CC = cl
LD = link
LIBODIR = msvc.Win32
OUTPUT = -Fo
LOUTPUT = -Fe
CFLAGS = -nologo -MTd
LFLAGS = $(CFLAGS)
!ifdef DEBUG
CFLAGS = $(CFLAGS) -Yd
!endif
!else # Borland C++
CC = bcc32
LD = ilink32
LIBODIR = bcc.Win32 # Output directory
OUTPUT = -o
LOUTPUT = $(OUTPUT)
CFLAGS = -n$(LIBODIR) -WM -q
LFLAGS = $(CFLAGS)
CFLAGS = $(CFLAGS) -M -WD -WM -X-
!ifdef DEBUG
CFLAGS = $(CFLAGS) -v
!endif
!endif
# Common compiler flags
!ifdef DEBUG
CFLAGS = $(CFLAGS) -Od -D_DEBUG
!endif
# Debug or release build?
!ifdef DEBUG
LIBODIR = $(LIBODIR).debug
!else
LIBODIR = $(LIBODIR).release
!endif
!include objects.mk # defines $(OBJS)
!include targets.mk
# Implicit C Compile Rule
{.}.c.$(OFILE):
@$(CC) $(CFLAGS) -c $< $(OUTPUT)$@
# Create output directories if they don't exist
$(LIBODIR):
@if not exist $(LIBODIR) mkdir $(LIBODIR)
# Executable Build Rule
$(WRAPTEST): $(LIBODIR)\wraptest.obj $(OBJS)
@echo Linking $@
@$(CC) $(LFLAGS) $** $(LOUTPUT)$@
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment