| #******************************************************************************* | |
| # 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)$@ | |