1if HAVE_CLANG
2MAYBE_INTERFACE = interface
3FORCE:
4interface/extract_interface: FORCE
5	$(MAKE) $(AM_MAKEFLAGS) -C interface extract_interface
6endif
7SUBDIRS = . $(MAYBE_INTERFACE) doc
8DIST_SUBDIRS = $(MAYBE_INTERFACE) doc
9
10ACLOCAL_AMFLAGS = -I m4
11AUTOMAKE_OPTIONS = nostdinc subdir-objects
12
13lib_LTLIBRARIES = libisl.la
14noinst_PROGRAMS = isl_test isl_polyhedron_sample isl_pip \
15	isl_polyhedron_minimize isl_polytope_scan \
16	isl_polyhedron_detect_equalities isl_cat \
17	isl_closure isl_bound isl_schedule isl_codegen isl_test_int \
18	isl_flow isl_flow_cmp isl_schedule_cmp
19TESTS = isl_test codegen_test.sh pip_test.sh bound_test.sh isl_test_int \
20	flow_test.sh schedule_test.sh
21if HAVE_CPP_ISL_H
22  CPP_H = include/isl/cpp.h
23if HAVE_CXX11
24  noinst_PROGRAMS += isl_test_cpp
25  TESTS += isl_test_cpp
26endif
27endif
28if HAVE_CLANG
29if HAVE_CXX11
30  noinst_PROGRAMS += isl_test_cpp-checked isl_test_cpp-checked-conversion
31  TESTS += isl_test_cpp-checked isl_test_cpp-checked-conversion
32endif
33if HAVE_PYTHON
34  TESTS += isl_test_python.py
35  isl_test_python.py: interface/isl.py libisl.la
36endif
37endif
38TEST_EXTENSIONS = .py
39AM_TESTS_ENVIRONMENT = \
40	export PYTHONPATH=interface; \
41	export LD_LIBRARY_PATH=.libs;
42PY_LOG_COMPILER = $(PYTHON)
43
44if IMATH_FOR_MP
45
46MP_SRC = \
47	isl_imath.c \
48	isl_imath.h \
49	isl_int_imath.h \
50	imath_wrap/gmp_compat.h \
51	imath_wrap/imath.h \
52	imath_wrap/imrat.h \
53	imath_wrap/wrap.h \
54	imath_wrap/gmp_compat.c \
55	imath_wrap/imath.c \
56	imath_wrap/imrat.c
57
58noinst_PROGRAMS += isl_test_imath
59TESTS += isl_test_imath
60
61if SMALL_INT_OPT
62MP_SRC += isl_int_sioimath.h \
63	isl_int_sioimath.c \
64	isl_val_sioimath.c
65else
66MP_SRC += isl_val_imath.c
67endif
68
69MP_INCLUDE_H =
70endif
71
72if GMP_FOR_MP
73if NEED_GET_MEMORY_FUNCTIONS
74GET_MEMORY_FUNCTIONS=mp_get_memory_functions.c
75endif
76
77MP_SRC = \
78	$(GET_MEMORY_FUNCTIONS) \
79	isl_int_gmp.h \
80	isl_gmp.c \
81	isl_val_gmp.c
82
83MP_INCLUDE_H = include/isl/val_gmp.h
84endif
85
86includes = -I. -I$(srcdir) -I$(srcdir)/include -Iinclude/
87AM_CPPFLAGS = $(includes) @MP_CPPFLAGS@
88AM_CFLAGS = @WARNING_FLAGS@
89
90libisl_la_SOURCES = \
91	$(MP_SRC) \
92	isl_aff.c \
93	isl_aff_map.c \
94	isl_aff_private.h \
95	isl_affine_hull.c \
96	isl_arg.c \
97	isl_ast.c \
98	isl_ast_private.h \
99	isl_ast_build.c \
100	isl_ast_build_private.h \
101	isl_ast_build_expr.c \
102	isl_ast_build_expr.h \
103	isl_ast_codegen.c \
104	isl_ast_graft.c \
105	isl_ast_graft_private.h \
106	isl_basis_reduction.h \
107	basis_reduction_tab.c \
108	isl_bernstein.c \
109	isl_bernstein.h \
110	isl_blk.c \
111	isl_blk.h \
112	isl_bound.c \
113	isl_bound.h \
114	isl_box.c \
115	isl_coalesce.c \
116	isl_constraint.c \
117	isl_constraint_private.h \
118	isl_convex_hull.c \
119	isl_ctx.c \
120	isl_ctx_private.h \
121	isl_deprecated.c \
122	isl_dim_map.h \
123	isl_dim_map.c \
124	isl_equalities.c \
125	isl_equalities.h \
126	isl_factorization.c \
127	isl_factorization.h \
128	isl_farkas.c \
129	isl_ffs.c \
130	isl_flow.c \
131	isl_fold.c \
132	isl_hash.c \
133	isl_hash_private.h \
134	isl_id_to_ast_expr.c \
135	isl_id_to_id.c \
136	isl_id_to_pw_aff.c \
137	isl_ilp.c \
138	isl_ilp_private.h \
139	isl_input.c \
140	isl_int.h \
141	isl_local.h \
142	isl_local.c \
143	isl_local_space_private.h \
144	isl_local_space.c \
145	isl_lp.c \
146	isl_lp_private.h \
147	isl_map.c \
148	isl_map_list.c \
149	isl_map_simplify.c \
150	isl_map_subtract.c \
151	isl_map_private.h \
152	isl_map_to_basic_set.c \
153	isl_mat.c \
154	isl_mat_private.h \
155	isl_morph.c \
156	isl_morph.h \
157	isl_id.c \
158	isl_id_private.h \
159	isl_obj.c \
160	isl_options.c \
161	isl_options_private.h \
162	isl_output.c \
163	isl_output_private.h \
164	isl_point_private.h \
165	isl_point.c \
166	isl_polynomial_private.h \
167	isl_polynomial.c \
168	isl_printer_private.h \
169	isl_printer.c \
170	print.c \
171	isl_range.c \
172	isl_range.h \
173	isl_reordering.c \
174	isl_reordering.h \
175	isl_sample.h \
176	isl_sample.c \
177	isl_scan.c \
178	isl_scan.h \
179	isl_schedule.c \
180	isl_schedule_band.c \
181	isl_schedule_band.h \
182	isl_schedule_node.c \
183	isl_schedule_node_private.h \
184	isl_schedule_read.c \
185	isl_schedule_tree.c \
186	isl_schedule_tree.h \
187	isl_schedule_private.h \
188	isl_schedule_constraints.c \
189	isl_schedule_constraints.h \
190	isl_scheduler.c \
191	isl_set_list.c \
192	isl_sort.c \
193	isl_sort.h \
194	isl_space.c \
195	isl_space_private.h \
196	isl_stream.c \
197	isl_stream_private.h \
198	isl_seq.c \
199	isl_seq.h \
200	isl_stride.c \
201	isl_tab.c \
202	isl_tab.h \
203	isl_tab_pip.c \
204	isl_tarjan.c \
205	isl_tarjan.h \
206	isl_transitive_closure.c \
207	isl_union_map.c \
208	isl_union_map_private.h \
209	isl_union_set_private.h \
210	isl_val.c \
211	isl_val_private.h \
212	isl_vec_private.h \
213	isl_vec.c \
214	isl_version.c \
215	isl_vertices_private.h \
216	isl_vertices.c \
217	isl_yaml.h
218libisl_la_LIBADD = @MP_LIBS@
219libisl_la_LDFLAGS = -version-info @versioninfo@ \
220	@MP_LDFLAGS@
221
222isl_test_LDFLAGS = @MP_LDFLAGS@
223isl_test_LDADD = libisl.la @MP_LIBS@
224
225isl_test_int_LDFLAGS = @MP_LDFLAGS@
226isl_test_int_LDADD = libisl.la @MP_LIBS@
227
228if IMATH_FOR_MP
229isl_test_imath_LDFLAGS = @MP_LDFLAGS@
230isl_test_imath_LDADD = libisl.la @MP_LIBS@
231endif
232
233isl_polyhedron_sample_LDADD = libisl.la
234isl_polyhedron_sample_SOURCES = \
235	polyhedron_sample.c
236
237isl_pip_LDFLAGS = @MP_LDFLAGS@
238isl_pip_LDADD = libisl.la @MP_LIBS@
239isl_pip_SOURCES = \
240	pip.c
241
242isl_schedule_LDFLAGS = @MP_LDFLAGS@
243isl_schedule_LDADD = libisl.la @MP_LIBS@
244isl_schedule_SOURCES = \
245	schedule.c
246
247isl_schedule_cmp_LDFLAGS = @MP_LDFLAGS@
248isl_schedule_cmp_LDADD = libisl.la @MP_LIBS@
249isl_schedule_cmp_SOURCES = \
250	schedule_cmp.c
251
252isl_flow_LDFLAGS = @MP_LDFLAGS@
253isl_flow_LDADD = libisl.la @MP_LIBS@
254isl_flow_SOURCES = \
255	flow.c
256
257isl_flow_cmp_LDFLAGS = @MP_LDFLAGS@
258isl_flow_cmp_LDADD = libisl.la @MP_LIBS@
259isl_flow_cmp_SOURCES = \
260	flow_cmp.c
261
262isl_codegen_LDFLAGS = @MP_LDFLAGS@
263isl_codegen_LDADD = libisl.la @MP_LIBS@
264isl_codegen_SOURCES = \
265	codegen.c
266
267isl_bound_LDFLAGS = @MP_LDFLAGS@
268isl_bound_LDADD = libisl.la @MP_LIBS@
269isl_bound_SOURCES = \
270	bound.c
271
272isl_polyhedron_minimize_LDFLAGS = @MP_LDFLAGS@
273isl_polyhedron_minimize_LDADD = libisl.la @MP_LIBS@
274isl_polyhedron_minimize_SOURCES = \
275	polyhedron_minimize.c
276
277isl_polytope_scan_LDADD = libisl.la
278isl_polytope_scan_SOURCES = \
279	polytope_scan.c
280
281isl_polyhedron_detect_equalities_LDADD = libisl.la
282isl_polyhedron_detect_equalities_SOURCES = \
283	polyhedron_detect_equalities.c
284
285isl_cat_LDADD = libisl.la
286isl_cat_SOURCES = \
287	cat.c
288
289isl_closure_LDADD = libisl.la
290isl_closure_SOURCES = \
291	closure.c
292
293isl_test_cpp_CXXFLAGS = @CXX11FLAGS@
294isl_test_cpp_SOURCES = \
295	isl_test_cpp.cc \
296	include/isl/cpp.h
297isl_test_cpp_LDFLAGS = @MP_LDFLAGS@
298isl_test_cpp_LDADD = libisl.la @MP_LIBS@
299
300isl_test_cpp_checked_CXXFLAGS = @CXX11FLAGS@
301isl_test_cpp_checked_SOURCES = \
302	isl_test_cpp-checked.cc \
303	include/isl/cpp-checked.h
304isl_test_cpp_checked_LDFLAGS = @MP_LDFLAGS@
305isl_test_cpp_checked_LDADD = libisl.la @MP_LIBS@
306
307isl_test_cpp_checked_conversion_CXXFLAGS = @CXX11FLAGS@
308isl_test_cpp_checked_conversion_SOURCES = \
309	isl_test_cpp-checked-conversion.cc \
310	include/isl/cpp-checked-conversion.h
311isl_test_cpp_checked_conversion_LDFLAGS = @MP_LDFLAGS@
312isl_test_cpp_checked_conversion_LDADD = libisl.la @MP_LIBS@
313
314# dummy library that captures the dependencies on all headers
315# that are relevant for the bindings
316noinst_LIBRARIES = libdep.a
317libdep_a_SOURCES = all.c
318
319if HAVE_CLANG
320interface/isl.py: interface/extract_interface libdep.a python/isl.py.top
321	(cat $(srcdir)/python/isl.py.top && \
322		interface/extract_interface$(EXEEXT) --language=python \
323			$(includes) $(srcdir)/all.h) \
324			> $@ || (rm $@ && false)
325
326include/isl/cpp.h: interface/extract_interface libdep.a \
327		cpp/cpp.h.top cpp/cpp.h.pre cpp/cpp.h.bot
328	$(MKDIR_P) "include/isl/cpp" && \
329	(cat $(srcdir)/cpp/cpp.h.top $(srcdir)/all.h \
330	    $(srcdir)/cpp/cpp.h.pre && \
331		interface/extract_interface$(EXEEXT) --language=cpp \
332			$(includes) $(srcdir)/all.h && \
333		cat $(srcdir)/cpp/cpp.h.bot) \
334			> $@ || (rm $@ && false)
335
336include/isl/cpp-checked.h: interface/extract_interface libdep.a \
337		cpp/cpp-checked.h.top \
338		cpp/cpp-checked.h.pre cpp/cpp-checked.h.bot
339	(cat $(srcdir)/cpp/cpp-checked.h.top $(srcdir)/all.h \
340	    $(srcdir)/cpp/cpp-checked.h.pre && \
341		interface/extract_interface$(EXEEXT) \
342			--language=cpp-checked \
343			$(includes) $(srcdir)/all.h && \
344		cat $(srcdir)/cpp/cpp-checked.h.bot) \
345			> $@ || (rm $@ && false)
346
347include/isl/cpp-checked-conversion.h: interface/extract_interface libdep.a \
348		cpp/cpp-checked-conversion.h.top \
349		cpp/cpp-checked-conversion.h.bot
350	(cat $(srcdir)/cpp/cpp-checked-conversion.h.top && \
351		interface/extract_interface$(EXEEXT) \
352			--language=cpp-checked-conversion \
353			$(includes) $(srcdir)/all.h && \
354		cat $(srcdir)/cpp/cpp-checked-conversion.h.bot) \
355			> $@ || (rm $@ && false)
356endif
357
358nodist_pkginclude_HEADERS = \
359	include/isl/stdint.h
360pkginclude_HEADERS = \
361	$(CPP_H) \
362	$(MP_INCLUDE_H) \
363	include/isl/aff.h \
364	include/isl/aff_type.h \
365	include/isl/arg.h \
366	include/isl/ast.h \
367	include/isl/ast_type.h \
368	include/isl/ast_build.h \
369	include/isl/constraint.h \
370	include/isl/ctx.h \
371	include/isl/fixed_box.h \
372	include/isl/flow.h \
373	include/isl/id.h \
374	include/isl/id_type.h \
375	include/isl/id_to_ast_expr.h \
376	include/isl/id_to_id.h \
377	include/isl/id_to_pw_aff.h \
378	include/isl/ilp.h \
379	include/isl/hash.h \
380	include/isl/hmap.h \
381	include/isl/hmap_templ.c \
382	include/isl/list.h \
383	include/isl/local_space.h \
384	include/isl/lp.h \
385	include/isl/mat.h \
386	include/isl/map.h \
387	include/isl/map_to_basic_set.h \
388	include/isl/map_type.h \
389	include/isl/maybe.h \
390	include/isl/maybe_ast_expr.h \
391	include/isl/maybe_basic_set.h \
392	include/isl/maybe_id.h \
393	include/isl/maybe_pw_aff.h \
394	include/isl/maybe_templ.h \
395	include/isl/multi.h \
396	include/isl/obj.h \
397	include/isl/options.h \
398	include/isl/point.h \
399	include/isl/polynomial.h \
400	include/isl/polynomial_type.h \
401	include/isl/printer.h \
402	include/isl/printer_type.h \
403	include/isl/schedule.h \
404	include/isl/schedule_node.h \
405	include/isl/schedule_type.h \
406	include/isl/set.h \
407	include/isl/set_type.h \
408	include/isl/space.h \
409	include/isl/space_type.h \
410	include/isl/stream.h \
411	include/isl/stride_info.h \
412	include/isl/union_map.h \
413	include/isl/union_map_type.h \
414	include/isl/union_set.h \
415	include/isl/union_set_type.h \
416	include/isl/val.h \
417	include/isl/val_type.h \
418	include/isl/vec.h \
419	include/isl/version.h \
420	include/isl/vertices.h
421
422if HAVE_CLANG
423    CPP_INTERFACES = \
424	include/isl/cpp.h \
425	include/isl/cpp-checked.h \
426	include/isl/cpp-checked-conversion.h
427endif
428BUILT_SOURCES = gitversion.h $(CPP_INTERFACES)
429CLEANFILES = gitversion.h interface/isl.py $(CPP_INTERFACES)
430
431DISTCLEANFILES = \
432	isl-uninstalled.sh \
433	isl-uninstalled.pc \
434	isl.pc \
435	isl.pc.in \
436	include/isl/stdint.h
437
438EXTRA_DIST = \
439	LICENSE \
440	isl_config_post.h \
441	basis_reduction_templ.c \
442	bset_to_bmap.c \
443	bset_from_bmap.c \
444	extract_key.c \
445	isl_list_templ.c \
446	isl_list_templ.h \
447	isl_map_lexopt_templ.c \
448	isl_maybe_map.h \
449	isl_multi_macro.h \
450	isl_multi_explicit_domain.c \
451	isl_multi_pw_aff_explicit_domain.c \
452	isl_multi_union_pw_aff_explicit_domain.c \
453	isl_multi_no_explicit_domain.c \
454	isl_multi_templ.c \
455	isl_multi_templ.h \
456	isl_multi_align_templ.c \
457	isl_multi_align_set.c \
458	isl_multi_align_union_set.c \
459	isl_multi_apply_templ.c \
460	isl_multi_apply_set.c \
461	isl_multi_apply_union_set.c \
462	isl_multi_cmp.c \
463	isl_multi_coalesce.c \
464	isl_multi_dims.c \
465	isl_multi_floor.c \
466	isl_multi_gist.c \
467	isl_multi_hash.c \
468	isl_multi_intersect.c \
469	print_templ.c \
470	print_templ_yaml.c \
471	isl_power_templ.c \
472	isl_pw_macro.h \
473	isl_pw_templ.c \
474	isl_pw_templ.h \
475	isl_pw_eval.c \
476	isl_pw_hash.c \
477	isl_pw_union_opt.c \
478	read_in_string_templ.c \
479	set_to_map.c \
480	set_from_map.c \
481	set_list_from_map_list_inl.c \
482	isl_tab_lexopt_templ.c \
483	uset_to_umap.c \
484	uset_from_umap.c \
485	isl_union_macro.h \
486	isl_union_templ.c \
487	isl_union_single.c \
488	isl_union_multi.c \
489	isl_union_eval.c \
490	isl_union_neg.c \
491	libisl-gdb.py \
492	doc/CodingStyle \
493	doc/SubmittingPatches \
494	doc/implementation.tex \
495	doc/isl.bib \
496	doc/mypod2latex \
497	doc/manual.tex \
498	doc/reading.tex \
499	doc/user.pod \
500	imath/gmp_compat.c \
501	imath/gmp_compat.h \
502	imath/imath.c \
503	imath/imath.h \
504	imath/imrat.c \
505	imath/imrat.h \
506	all.h \
507	cpp \
508	python \
509	isl_test_cpp-generic.cc \
510	isl_test_python.py \
511	test_inputs
512
513if HAVE_CLANG
514dist-hook: interface/isl.py
515	cp interface/isl.py $(distdir)/interface/
516else
517dist-hook:
518endif
519	echo @GIT_HEAD_VERSION@ > $(distdir)/GIT_HEAD_ID
520	(cd doc; make manual.pdf)
521	cp doc/manual.pdf $(distdir)/doc/
522
523pkgconfigdir=$(pkgconfig_libdir)
524pkgconfig_DATA = $(pkgconfig_libfile)
525
526gitversion.h: @GIT_HEAD@
527	$(AM_V_GEN)echo '#define GIT_HEAD_ID "'@GIT_HEAD_VERSION@'"' > $@
528
529install-data-local: $(srcdir)/libisl-gdb.py
530	@libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p;}" \
531		 $(builddir)/libisl.la`; \
532	case $$libisl in \
533	'') echo Cannot find isl library name. GDB bindings not installed.;; \
534	*) echo $(INSTALL_DATA) $(srcdir)/libisl-gdb.py \
535		$(DESTDIR)$(libdir)/$$libisl-gdb.py; \
536	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"; \
537	$(INSTALL_DATA) $(srcdir)/libisl-gdb.py \
538	    $(DESTDIR)$(libdir)/$$libisl-gdb.py; \
539	esac
540
541uninstall-local:
542	@libisl=`sed -ne "/^library_names=/{s/.*='//;s/'$$//;s/ .*//;p;}" \
543		 $(builddir)/libisl.la`; \
544	if test -n "$${libisl}"; then \
545		rm -f $(DESTDIR)$(libdir)/$$libisl-gdb.py; \
546	fi
547