1# Copyright © 2009-2020 Inria.  All rights reserved.
2# Copyright © 2009-2012 Université Bordeaux
3# Copyright © 2009-2014 Cisco Systems, Inc.  All rights reserved.
4# Copyright © 2011-2012 Oracle and/or its affiliates.  All rights reserved.
5# See COPYING in top-level directory.
6
7AM_CFLAGS = $(HWLOC_CFLAGS)
8AM_CPPFLAGS = $(HWLOC_CPPFLAGS) -DHWLOC_INSIDE_LIBHWLOC
9AM_LDFLAGS = $(HWLOC_LDFLAGS)
10
11EXTRA_DIST = dolib.c
12
13# If we're in standalone mode, build the installable library.
14# Otherwise, build the embedded library.
15
16if HWLOC_BUILD_STANDALONE
17lib_LTLIBRARIES = libhwloc.la
18else
19noinst_LTLIBRARIES = libhwloc_embedded.la
20endif
21
22pluginsdir = @HWLOC_PLUGINS_DIR@
23plugins_LTLIBRARIES =
24plugins_ldflags = -module -avoid-version $(HWLOC_DL_LIBS) $(HWLOC_LTDL_LIBS)
25# Beware that files are not rebuilt automatically when reconfiguring with different paths in these flags.
26AM_CPPFLAGS += -DHWLOC_PLUGINS_PATH="\"$(HWLOC_PLUGINS_PATH)\"" -DRUNSTATEDIR="\"$(HWLOC_runstatedir)\""
27
28# Sources and ldflags
29
30sources = \
31        topology.c \
32        traversal.c \
33        distances.c \
34        memattrs.c \
35        cpukinds.c \
36        components.c \
37        bind.c \
38        bitmap.c \
39        pci-common.c \
40        diff.c \
41        shmem.c \
42        misc.c \
43        base64.c \
44        topology-noos.c \
45        topology-synthetic.c \
46        topology-xml.c \
47        topology-xml-nolibxml.c
48ldflags =
49
50# Conditionally add to the sources and ldflags
51
52if HWLOC_HAVE_LIBXML2
53if HWLOC_XML_LIBXML_BUILD_STATIC
54sources += topology-xml-libxml.c
55else
56plugins_LTLIBRARIES += hwloc_xml_libxml.la
57hwloc_xml_libxml_la_SOURCES = topology-xml-libxml.c
58hwloc_xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CFLAGS) -DHWLOC_INSIDE_PLUGIN
59hwloc_xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS)
60endif
61endif HWLOC_HAVE_LIBXML2
62
63if HWLOC_HAVE_PCIACCESS
64if HWLOC_PCI_BUILD_STATIC
65sources += topology-pci.c
66else
67plugins_LTLIBRARIES += hwloc_pci.la
68hwloc_pci_la_SOURCES = topology-pci.c
69hwloc_pci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCIACCESS_CFLAGS) -DHWLOC_INSIDE_PLUGIN
70hwloc_pci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCIACCESS_LIBS)
71endif
72endif HWLOC_HAVE_PCIACCESS
73
74if HWLOC_HAVE_OPENCL
75if HWLOC_OPENCL_BUILD_STATIC
76sources += topology-opencl.c
77else
78plugins_LTLIBRARIES += hwloc_opencl.la
79hwloc_opencl_la_SOURCES = topology-opencl.c
80hwloc_opencl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
81hwloc_opencl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_OPENCL_LIBS) $(HWLOC_OPENCL_LDFLAGS)
82endif
83endif HWLOC_HAVE_OPENCL
84
85if HWLOC_HAVE_CUDART
86if HWLOC_CUDA_BUILD_STATIC
87sources += topology-cuda.c
88else
89plugins_LTLIBRARIES += hwloc_cuda.la
90hwloc_cuda_la_SOURCES = topology-cuda.c
91hwloc_cuda_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDA_CFLAGS) -DHWLOC_INSIDE_PLUGIN
92hwloc_cuda_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_CUDA_LIBS)
93endif
94endif HWLOC_HAVE_CUDART
95
96if HWLOC_HAVE_NVML
97if HWLOC_NVML_BUILD_STATIC
98sources += topology-nvml.c
99else
100plugins_LTLIBRARIES += hwloc_nvml.la
101hwloc_nvml_la_SOURCES = topology-nvml.c
102hwloc_nvml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CFLAGS) -DHWLOC_INSIDE_PLUGIN
103hwloc_nvml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_NVML_LIBS)
104endif
105endif HWLOC_HAVE_NVML
106
107if HWLOC_HAVE_RSMI
108if HWLOC_RSMI_BUILD_STATIC
109sources += topology-rsmi.c
110else
111plugins_LTLIBRARIES += hwloc_rsmi.la
112hwloc_rsmi_la_SOURCES = topology-rsmi.c
113hwloc_rsmi_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CFLAGS) -DHWLOC_INSIDE_PLUGIN
114hwloc_rsmi_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_RSMI_LIBS)
115endif
116endif HWLOC_HAVE_RSMI
117
118if HWLOC_HAVE_GL
119if HWLOC_GL_BUILD_STATIC
120sources += topology-gl.c
121else
122plugins_LTLIBRARIES += hwloc_gl.la
123hwloc_gl_la_SOURCES = topology-gl.c
124hwloc_gl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_GL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
125hwloc_gl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_GL_LIBS)
126endif
127endif HWLOC_HAVE_GL
128
129if HWLOC_HAVE_SOLARIS
130sources += topology-solaris.c
131sources += topology-solaris-chiptype.c
132endif HWLOC_HAVE_SOLARIS
133
134if HWLOC_HAVE_LINUX
135sources += topology-linux.c topology-hardwired.c
136endif HWLOC_HAVE_LINUX
137
138if HWLOC_HAVE_BGQ
139sources += topology-bgq.c
140endif HWLOC_HAVE_BGQ
141
142if HWLOC_HAVE_AIX
143sources += topology-aix.c
144ldflags += -lpthread
145endif HWLOC_HAVE_AIX
146
147if HWLOC_HAVE_HPUX
148sources += topology-hpux.c
149ldflags += -lpthread
150endif HWLOC_HAVE_HPUX
151
152if HWLOC_HAVE_WINDOWS
153sources += topology-windows.c
154endif HWLOC_HAVE_WINDOWS
155
156if HWLOC_HAVE_DARWIN
157sources += topology-darwin.c
158endif HWLOC_HAVE_DARWIN
159
160if HWLOC_HAVE_FREEBSD
161sources += topology-freebsd.c
162endif HWLOC_HAVE_FREEBSD
163
164if HWLOC_HAVE_NETBSD
165sources += topology-netbsd.c
166ldflags += -lpthread
167endif HWLOC_HAVE_NETBSD
168
169if HWLOC_HAVE_X86_CPUID
170sources += topology-x86.c
171endif HWLOC_HAVE_X86_CPUID
172
173if HWLOC_HAVE_GCC
174ldflags += -no-undefined
175endif HWLOC_HAVE_GCC
176
177
178if HWLOC_HAVE_WINDOWS
179# Windows specific rules
180
181LC_MESSAGES=C
182export LC_MESSAGES
183ldflags += -Xlinker --output-def -Xlinker .libs/libhwloc.def
184
185if HWLOC_HAVE_MS_LIB
186dolib$(EXEEXT): dolib.c
187	$(CC_FOR_BUILD) $< -o $@
188.libs/libhwloc.lib: libhwloc.la dolib$(EXEEXT)
189	[ ! -r .libs/libhwloc.def ] || ./dolib$(EXEEXT) "$(HWLOC_MS_LIB)" $(HWLOC_MS_LIB_ARCH) .libs/libhwloc.def $(libhwloc_so_version) .libs/libhwloc.lib
190all-local: .libs/libhwloc.lib
191clean-local:
192	$(RM) dolib$(EXEEXT)
193endif HWLOC_HAVE_MS_LIB
194
195install-exec-hook:
196	[ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.def $(DESTDIR)$(libdir)
197if HWLOC_HAVE_MS_LIB
198	[ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.lib $(DESTDIR)$(libdir)
199	[ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.exp $(DESTDIR)$(libdir)
200endif HWLOC_HAVE_MS_LIB
201
202uninstall-local:
203	rm -f $(DESTDIR)$(libdir)/libhwloc.def
204if HWLOC_HAVE_MS_LIB
205	rm -f $(DESTDIR)$(libdir)/libhwloc.lib $(DESTDIR)$(libdir)/libhwloc.exp
206endif HWLOC_HAVE_MS_LIB
207
208# End of Windows specific rules
209endif HWLOC_HAVE_WINDOWS
210
211
212# Installable library
213
214libhwloc_la_SOURCES = $(sources)
215libhwloc_la_LDFLAGS = $(ldflags) -version-info $(libhwloc_so_version) $(HWLOC_LIBS) $(HWLOC_DL_LIBS) $(HWLOC_LTDL_LIBS) $(HWLOC_LDFLAGS)
216
217if HWLOC_HAVE_PLUGINS
218libhwloc_la_LDFLAGS += -export-dynamic
219endif
220
221# Embedded library (note the lack of a .so version number -- that
222# intentionally only appears in the installable library).  Also note
223# the lack of _LDFLAGS -- all libs are added by the upper layer (via
224# HWLOC_EMBEDDED_LIBS).
225
226libhwloc_embedded_la_SOURCES = $(sources)
227
228# XML data (only install if we're building in standalone mode)
229
230if HWLOC_BUILD_STANDALONE
231xml_DATA = $(srcdir)/hwloc.dtd $(srcdir)/hwloc2.dtd $(srcdir)/hwloc2-diff.dtd
232xmldir = $(pkgdatadir)
233EXTRA_DIST += hwloc.dtd hwloc2.dtd hwloc2-diff.dtd
234endif
235
236DISTCLEANFILES = static-components.h
237
238if HWLOC_HAVE_PLUGINS
239check_LTLIBRARIES = hwloc_fake.la
240hwloc_fake_la_SOURCES = topology-fake.c
241hwloc_fake_la_LDFLAGS = $(plugins_ldflags) -rpath /nowhere # force libtool to build a shared-library even it's check-only
242endif
243