blob: f25dcd47f4bb7a490ac6dcaa6fa3c39b574aa059 [file] [log] [blame]
#*******************************************************************************
# Copyright (c) 2014-2015 Zeligsoft (2009) Limited and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#*******************************************************************************
# Top level makefile for building RTS services library.
#
# By default, the RTS library is put into a 'lib' directory under the $RTSROOT
# directory. The user can specify an alternate location with LIBDEST=xxx.
# The LIBDEST directory is created if it doesn't exist.
#
# Build products are put into BUILDROOT (default is +/build). Created by build.
#
# Targets:
# (none) : The default target is 'all' - same as 'library'.
# all : everything - currently only 'library'
# library : the RTS services library
# clean : Delete all build products.
#
# Variables should be specified during make and make clean
# invoke with <var>=<value> or with environment variables:
# TARGETOS : Target platform. (i.e. TARGETOS=linux)
# BUILDTOOLS : (i.e. BUILDTOOLS=x86-gcc-4.6.3)
#
# Variables (can be overridden during make invoke with <var>=<value>):
# RTSROOT : default RTSROOT=. : umlrt.rts repo dir.
# BUILDROOT : default BUILDROOT=$(RTSROOT)/build : build output dir.
# CONFIG : default CONFIG=$(TARGETOS).$(BUILDTOOLS)
# LIBDEST : Change default library destination directory.
# DEPEND : default DEPEND=1 : 'DEPEND=0' to skip dependency generation.
#
# Local variables (not typically passed in via env) are in lower-case.
#
# Examples:
# make : Default - same as 'make all' and 'make library'
# make all : Default - same as 'make' and 'make library'
# make library : Default - same as 'make' and 'make all'
# make DEPEND=0 : Build the library but skip building dependencies
# make clean : clean all build products (library, objects, dependency files.)
# make LIBDEST=~/lib : Put library into '~/lib'.
# make BUILDROOT=~/build : Put build-products into '~/build'.
#
# After a clean pull from the repo, "make DEPEND=0" will build everything but
# will skip building dependencies (hence will be faster). (Dependencies are not
# required for this scenario to guarantee everything gets explicitly built.)
#
# RTSROOT and BUILDROOT notes
# ---------------------------
# RTSROOT names the top-level (umlrt.rts) directory. The default RTSROOT
# is current working directory (where this Makefile currently resides).
#
# BUILDROOT names the top-level build-products output directory tree.
# Object files and dependency files are written here.
# This directory tree is created by the build process if it doesn't yexist.
# The tree-structure under BUILDROOT matches the associated directory tree
# under RTSROOT.
# set default value for TARGETOS if is it not defined
ifeq ($(TARGETOS), )
$(warning warning: TARGETOS not defined. Choosing linux)
TARGETOS=linux
endif
# set default value for BUILDTOOLS if is it not defined
ifeq ($(BUILDTOOLS), )
$(warning warning: BUILDTOOLS not defined. Choosing x86-gcc-4.6.3)
BUILDTOOLS=x86-gcc-4.6.3
endif
# cwd is source root - current version assumes cwd is top-level src directory.
# This can be overridden while invoking make with RTSROOT=xxx.
RTSROOT=.
# Build output (objects) are placed in a directory tree
# This can be overridden while invoking make with BUILDROOT=xxx.
BUILDROOT=$(RTSROOT)/obj
# This can be overridden while invoking make with TARGETOS=xxx, BUILDTOOLS=yyy.
CONFIG=$(TARGETOS).$(BUILDTOOLS)
# Destination directory for the RTS services library.
LIBDEST=$(RTSROOT)/lib/$(CONFIG)
# Ouput RTS services library
library=$(LIBDEST)/$(LIB_PRFX)rts$(LIB_EXT)
-include $(RTSROOT)/build/host/host.mk
ifneq ($(MAKECMDGOALS),clean)
-include $(RTSROOT)/build/buildtools/$(BUILDTOOLS)/buildtools.mk
-include $(RTSROOT)/build/os/default.mk
-include $(RTSROOT)/build/os/$(TARGETOS)/os.mk
-include $(RTSROOT)/build/config/$(CONFIG)/config.mk
ifeq ($(DEPEND),1)
-include $(obj:$(OBJ_EXT)=$(DEP_EXT))
endif
endif
CC_DEFINES:=$(foreach d, $(CC_DEFINES), $(CC_DEF)$d)
CC_INCLUDES:=$(foreach i, $(CC_INCLUDES), $(CC_INC)$i)
# Phony targets.
.PHONY : all clean library
# Build everything.
all : library
# phony target for the RTS services library (is currently the default target)
library : $(library)
# Clean everything.
clean :
-@$(RMDIR) "$(RTSROOT)/lib/$(CONFIG)" 2> $(NUL)
@echo $(RMDIR) "$(RTSROOT)/lib/$(CONFIG)"
-@$(RMDIR) "$(RTSROOT)/obj/$(CONFIG)" 2> $(NUL)
@echo $(RMDIR) "$(RTSROOT)/obj/$(CONFIG)"
# RTS services library build
$(library) : $(CC_OBJS)
-@$(MKDIR) "$(LIBDEST)" 2> $(NUL)
$(AR) $(AR_FLAGS) $(AR_OUT)$@ $^
#TODO replace -M? options with variables
# dependencies rule
$(BUILDROOT)/$(CONFIG)/%$(DEP_EXT) : $(RTSROOT)/%$(CC_EXT)
-@$(MKDIR) "$(dir $@)" 2> $(NUL)
-@$(CC) $(DEP_FLAGS) $^ $(CC_FLAGS) $(DEP_TARGET) $(DEP_FILE) $@
# objects rule
$(BUILDROOT)/$(CONFIG)/%$(OBJ_EXT) : $(RTSROOT)/%$(CC_EXT)
-@$(MKDIR) "$(dir $@)" 2> $(NUL)
$(CC) $< $(CC_FLAGS) $(CC_DEFINES) $(CC_INCLUDES) $(CC_OUT)$@