iBoot/makefiles/lib.mk

101 lines
2.8 KiB
Makefile

# Copyright (C) 2008-2011 Apple Inc. All rights reserved.
#
# This document is the property of Apple Inc.
# It is considered confidential and proprietary.
#
# This document may not be reproduced or transmitted in any form,
# in whole or in part, without the express written permission of
# Apple Inc.
#
################################################################################
# Makefile to build a library common to multiple build targets in the iBoot tree
#
# We expect the following to be set:
#
# MODULE
# Path to a directory containing a library.mk Makefile for the library
# we are going to build.
#
# TAG
# A unique identifier for the library we are going to build.
#
# OPTIONS
#
# Options to pass to the compiler when building the library.
#
include makefiles/macros.mk
include makefiles/config.mk
LIBDIR := $(OBJROOT)/build/lib-$(TAG)
LIBOBJDIR := $(addprefix $(LIBDIR)/,$(MODULE))
GLOBAL_ALLFLAGS += $(OPTIONS)
LIBRARY_LDFLAGS += $(OPTIONS)
# XXX HACK ALERT
# It would be nice to have both makefile options and compile options encoded in the
# library spec. Currently the only one we need is ARCH, so just hack it for now.
ifneq ($(findstring arm64,$(TAG)),)
ARCH := arm64
else
ifneq ($(findstring arm,$(TAG)),)
ARCH := arm
endif
endif
# XXX HACK ALERT
# Libraries don't process options the same way as non-library files. In order
# to get the build flavor in the same format that everything else expects
# we have to play some games.
BUILD := $(lastword $(subst -, ,$(TAG)))
GLOBAL_ALLFLAGS += -D$(BUILD)_BUILD=1
# For ROMRELEASE builds, define RELEASE_BUILD so that everything that uses
# BUILD_RELEASE doesn't have to be touched to use ROMRELEASE also. Also,
# libraries must be completely silent and not emit any debug or panic strings
# for ROMRELEASE builds.
ifeq ($(BUILD),ROMRELEASE)
GLOBAL_ALLFLAGS += -DRELEASE_BUILD=1 -DDEBUG_LEVEL=DEBUG_SILENT -DNO_PANIC_STRINGS=1
endif
ifeq ($(BUILD),RELEASE)
GLOBAL_ALLFLAGS += -DTERSE_PANIC_STRINGS=1
endif
# Read the module makefile
#
# The module makefile defines COMMONLIBS containing the names of libraries
# to build. For each entry in COMMONLIBS there is:
#
# o an <entry>_BUILD variable which gives the name of the output library.
# o an <entry>_OBJS variable which gives the name of the objects to be built into the library.
include $(MODULE)/library.mk
TARGETVARS := $(addsuffix _BUILD,$(COMMONLIBS))
MAKELIBS := $(foreach i,$(TARGETVARS),$(value $i))
$(MAKELIBS): objs = $(value $(addsuffix _OBJS,$(basename $(notdir $@))))
$(MAKELIBS):
@$(MKDIR)
@echo AR $@
$(_v)$(AR) -crS $@ $(objs)
$(_v)$(RANLIB) $@
# Now we can define object build rules
include makefiles/build.mk
build: $(MAKELIBS)
clean:
$(_v)rm -rf $(LIBDIR)
# Empty rule for .d files
%.d:
%.Td:
ifeq ($(filter $(MAKECMDGOALS), clean), )
-include $(ALL_DEPS)
endif