xref: /illumos-gate/usr/src/lib/libumem/Makefile.com (revision 2dc5cbd37af38054ac6aab88a3ecee22a13ed2eb)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21#
22# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25# Copyright (c) 2018, Joyent, Inc.
26#
27
28#
29# The build process for libumem is sightly different from that used by other
30# libraries, because libumem must be built in two flavors - as a standalone
31# for use by kmdb and as a normal library.  We use $(CURTYPE) to indicate the
32# current flavor being built.
33#
34
35LIBRARY = libumem.a
36STANDLIBRARY = libstandumem.so
37VERS = .1
38
39# By default, we build the shared library.  Construction of the standalone
40# is specifically requested by architecture-specific Makefiles.
41TYPES = library
42CURTYPE = library
43
44# This would be much prettier if a) Makefile.lib didn't reqire both $(SRCS) and
45# $(OBJECTS) to be set or b) make gave us a nice way to do basename in pattern
46# replacement definitions.
47
48# Files specific to the library version of libumem
49OBJECTS_library = \
50	init_lib.o \
51	umem_agent_support.o \
52	umem_fail.o \
53	umem_fork.o \
54	umem_update_thread.o \
55	vmem_mmap.o \
56	vmem_sbrk.o
57
58SRCS_library = $(OBJECTS_library:%.o=../common/%.c)
59
60# Files specific to the standalone version of libumem
61OBJECTS_standalone = \
62	init_stand.o \
63	stub_stand.o \
64	vmem_stand.o
65
66SRCS_standalone = $(OBJECTS_standalone:%.o=../common/%.c)
67
68# Architecture-dependent files common to both versions of libumem
69OBJECTS_common_isadep = \
70	asm_subr.o \
71	umem_genasm.o
72
73SRCS_common_isadep = \
74	$(ISASRCDIR)/asm_subr.s \
75	$(ISASRCDIR)/umem_genasm.c
76
77# Architecture-independent files common to both versions  of libumem
78OBJECTS_common_common = \
79	envvar.o \
80	getpcstack.o \
81	malloc.o \
82	misc.o \
83	vmem_base.o \
84	umem.o \
85	vmem.o
86
87SRCS_common_common = $(OBJECTS_common_common:%.o=../common/%.c)
88
89OBJECTS = \
90	$(OBJECTS_$(CURTYPE)) \
91	$(OBJECTS_common_isadep) \
92	$(OBJECTS_common_common)
93
94include ../../Makefile.lib
95include ../../Makefile.rootfs
96
97SRCS = \
98	$(SRCS_$(CURTYPE)) \
99	$(SRCS_common_isadep) \
100	$(SRCS_common_common)
101
102SRCDIR = ../common
103
104#
105# Used to verify that the standalone doesn't have any unexpected external
106# dependencies.
107#
108LINKTEST_OBJ = objs/linktest_stand.o
109
110CLOBBERFILES_standalone = $(LINKTEST_OBJ)
111CLOBBERFILES += $(CLOBBERFILES_$(CURTYPE))
112
113LIBS_standalone = $(STANDLIBRARY)
114LIBS_library = $(DYNLIB) $(LINTLIB)
115LIBS =	$(LIBS_$(CURTYPE))
116
117MAPFILE_SUPPLEMENTAL_standalone = ../common/stand_mapfile
118MAPFILE_SUPPLEMENTAL = $(MAPFILE_SUPPLEMENTAL_$(CURTYPE))
119
120LDLIBS +=	-lc
121
122LDFLAGS_standalone = $(ZNOVERSION) $(BREDUCE) -M../common/mapfile-vers \
123	-M$(MAPFILE_SUPPLEMENTAL) -dy -r
124LDFLAGS = $(LDFLAGS_$(CURTYPE))
125
126ASFLAGS_standalone = -DUMEM_STANDALONE
127ASFLAGS_library =
128ASFLAGS += -P $(ASFLAGS_$(CURTYPE)) -D_ASM
129
130CERRWARN += -_gcc=-Wno-switch
131CERRWARN += -_gcc=-Wno-uninitialized
132
133SMOFF += deref_check
134
135$(LINTLIB) := SRCS = ../common/$(LINTSRC)
136
137# We want the thread-specific errno in the library, but we don't want it in
138# the standalone.  $(DTS_ERRNO) is designed to add -D_TS_ERRNO to $(CPPFLAGS),
139# in order to enable this feature.  Conveniently, -D_REENTRANT does the same
140# thing.  As such, we null out $(DTS_ERRNO) to ensure that the standalone
141# doesn't get it.
142DTS_ERRNO=
143
144# We need to rename some standard functions so we can easily implement them
145# in consumers.
146STAND_RENAMED_FUNCS= \
147	atomic_add_64 \
148	atomic_add_32_nv \
149	atomic_swap_64 \
150	snprintf \
151	vsnprintf
152
153CPPFLAGS_standalone = -DUMEM_STANDALONE $(STAND_RENAMED_FUNCS:%=-D%=umem_%)
154CPPFLAGS_library = -D_REENTRANT
155CPPFLAGS +=	-I../common -I../../common/inc $(CPPFLAGS_$(CURTYPE))
156
157CFLAGS_standalone = $(STAND_FLAGS_32)
158CFLAGS_common =
159CFLAGS += $(CFLAGS_$(CURTYPE)) $(CFLAGS_common)
160
161CFLAGS64_standalone = $(STAND_FLAGS_64)
162CFLAGS64 += $(CCVERBOSE) $(CFLAGS64_$(CURTYPE)) $(CFLAGS64_common)
163
164INSTALL_DEPS_library =		$(ROOTLINKS) $(ROOTLINT) $(ROOTLIBS)
165
166#
167# turn off ptr-cast warnings, since we do them all the time
168#
169LINTFLAGS +=	-erroff=E_BAD_PTR_CAST_ALIGN
170LINTFLAGS64 +=	-erroff=E_BAD_PTR_CAST_ALIGN
171
172DYNFLAGS +=     $(ZINTERPOSE)
173
174.KEEP_STATE:
175