1# BEGIN LICENSE BLOCK
2# Version: CMPL 1.1
3#
4# The contents of this file are subject to the Cisco-style Mozilla Public
5# License Version 1.1 (the "License"); you may not use this file except
6# in compliance with the License.  You may obtain a copy of the License
7# at www.eclipse-clp.org/license.
8# 
9# Software distributed under the License is distributed on an "AS IS"
10# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See
11# the License for the specific language governing rights and limitations
12# under the License. 
13# 
14# The Original Code is  The ECLiPSe Constraint Logic Programming System. 
15# The Initial Developer of the Original Code is  Cisco Systems, Inc. 
16# Portions created by the Initial Developer are
17# Copyright (C) 2010 Cisco Systems, Inc.  All Rights Reserved.
18# 
19# Contributor(s): 
20# 
21# END LICENSE BLOCK
22#
23# Makefile for Gecode interface
24# $Id: Makefile.in,v 1.15 2015/10/05 20:30:23 kish_shen Exp $
25#
26
27# The location of third party software releases, e.g. Gecode
28THIRDPARTY=@ECLIPSETHIRDPARTY@
29
30
31ARCH = @ARCH@
32top_srcdir = @top_srcdir@
33PREFIX = @prefix@
34ECLIPSEDIR = $(PREFIX)
35MAKEFILE = Makefile.$(ARCH)
36OSCLASS = @OSCLASS@
37
38CC = @CC@
39CXX = @CXX@
40AR = @AR@
41CFLAGS = @CFLAGS@ @OPT_FLAGS@
42OS_INCLUDES = @OS_INCLUDES@
43OBJ_SUFFIX = @OBJECTS_SUFFIX@
44DYNLDFLAGS = @DYNLDFLAGS@
45DYLDCXX = @DYLDCXX@
46EXEEXT = @EXEEXT@
47STRIP = @STRIP@
48STRIPFLAGS = @STRIPFLAGS@
49GMP_LD = @GMP_LD@
50DESTDIR = $(PREFIX)/lib
51
52CPPFLAGS  = -I. -I$(ECLIPSEDIR)/include/$(ARCH) -I$(ECLIPSEDIR)/Kernel/src 
53STDCXXLIB = @STDCXXLIB@
54ECLIBS	= -L$(ECLIPSEDIR)/lib/$(ARCH) -leclipse @LIBS@
55
56GECODE = @GECODEDIR@
57
58ECLIPSE = $(ECLIPSEDIR)/bin/$(ARCH)/eclipse
59
60PERM = a+r,u+w,go-w
61DIRPERM = 2755
62
63.SUFFIXES:	$(SUFFIXES) .$(OBJ_SUFFIX)
64
65.c.o:
66	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
67
68ECL_ECI_FILES =	gfd.ecl 
69
70ECL_FILES =	gfd.ecl gfd_generic_interface.ecl
71
72ECL_DEST =	$(ECL_ECI_FILES:%.ecl=$(DESTDIR)/%.ecl) \
73		$(ECL_FILES:%.ecl=$(DESTDIR)/%.ecl)
74ECI_DEST =	$(ECL_ECI_FILES:%.ecl=$(PREFIX)/lib/%.eci)
75OBJ_DEST =	$(OBJ_FILES:%=$(PREFIX)/lib/%)
76
77# List of shared libraries to build
78
79OBJ_FILES =	\
80	$(ARCH)/gfd.$(OBJ_SUFFIX) 
81
82
83install:	@MAKE_TARGET@
84
85install_all:	@ALL_WITH_GECODE@
86
87install_cross:	@ALL_CROSS_WITH_GECODE@
88
89all_with_gecode:	install_cross $(ECI_DEST) 
90all_cross_with_gecode: $(OBJ_DEST) $(ECL_DEST)
91
92GECODELIBS = -lgecodeminimodel -lgecodeset \
93	   -lgecodeint -lgecodesearch -lgecodekernel -lgecodesupport    
94
95ifeq ($(OSCLASS),win)
96
97THREADLIB = 
98EXTRAFILES = gfd.def
99
100ifeq ($(ARCH),x86_64_nt)
101
102# For w64-mingw cross-compiler (downloaded Feb 2011), using g++ to link
103# seem to require libgcc_s_sjlj-1.dll at run-time. We avoid this by
104# using gcc to do the linking
105DYLDCXX = @DYLD@
106
107endif
108
109else
110
111THREADLIB = -lpthread 
112EXTRAFILES = 
113
114endif
115
116# extra flag to avoid visibility warnings in Mac OS X
117ifeq ($(ARCH),x86_64_macosx)
118
119ADD_FLAGS= --visibility=hidden
120
121else
122  ifeq ($(ARCH),i386_macosx)
123
124ADD_FLAGS=$(LOCAL_FLAGS) --visibility=hidden
125  endif
126endif
127
128# gfd.so is stripped because file is very large before stripping 
129$(ARCH)/gfd.$(OBJ_SUFFIX): gfd.cpp gfd.hpp
130	[ -d $(ARCH) ] || mkdir $(ARCH)
131	$(CXX) $(CPPFLAGS) $(CFLAGS) $(ADD_FLAGS) $(LOCAL_FLAGS) -I$(GECODE)/include gfd.cpp \
132              -c -o $(ARCH)/gfd.o
133	$(DYLDCXX) $(DYNLDFLAGS)  -L$(GECODE)/lib $(ARCH)/gfd.o $(EXTRAFILES) \
134             $(GECODELIBS) $(STDCXXLIB) $(ECLIBS) $(THREADLIB) -o $(ARCH)/gfd.$(OBJ_SUFFIX)
135	$(STRIP) $(STRIPFLAGS) $(ARCH)/gfd.$(OBJ_SUFFIX)
136
137$(PREFIX)/lib/$(ARCH)/%.$(OBJ_SUFFIX):	$(ARCH)/%.$(OBJ_SUFFIX) $(PREFIX)/lib/$(ARCH)/.stamp
138	/bin/cp $< $@
139	-@/bin/chmod $(PERM) $@
140
141%/.stamp:
142	mkdir -p $(@D)
143	@/bin/chmod $(DIRPERM) $(@D)
144	@touch $@; /bin/chmod $(PERM) $@
145
146$(DESTDIR)/$(ARCH)/%.$(OBJ_SUFFIX):	$(ARCH)/%.$(OBJ_SUFFIX) $(PREFIX)/lib/$(ARCH)/.stamp
147	/bin/cp $< $@
148	-@/bin/chmod $(PERM) $@
149
150$(DESTDIR)/%.ecl:	%.ecl $(DESTDIR)/.stamp
151	/bin/cp $< $@
152	@/bin/chmod $(PERM) $@
153
154$(DESTDIR)/%.eci: %.ecl %_comments.ecl $(PREFIX)/lib/.stamp
155	$(ECLIPSE) -e 'get_flag(library_path,P),set_flag(library_path,["."|P]),lib(document),icompile("$(*F)","$(@D)")'
156	-@/bin/chmod $(PERM) $@
157
158clean:	archclean
159
160archclean:
161	rm -rf $(ARCH)
162
163#---------------------------------------------------------------------------
164# Rules for building Gecode
165#---------------------------------------------------------------------------
166
167GECODE_VERSION=@GECODE_VERSION@
168GECODE_SVN_PASSWD=eclipse@cisco.com
169THIRDPARTY_GECODE_DEST=$(THIRDPARTY)/gecode-$(GECODE_VERSION)/$(ARCH)
170GECODEDIR=Gecode$(GECODE_VERSION)
171
172ifeq ($(ARCH),x86_64_linux)
173
174ADD_GECODE_CONFIG_FLAGS=--disable-gcc-visibility
175CONFIG_PREFIX=
176
177else
178  ifeq ($(ARCH),sparc_sunos5)
179
180ADD_GECODE_CONFIG_FLAGS=--with-host-os=linux --disable-examples
181CONFIG_PREFIX=
182
183  else
184    ifeq ($(OSCLASS),win)
185
186# assuming we are cross-compiling on 32 bit x86 Linux (i586-pc-linux)
187ADD_GECODE_CONFIG_FLAGS=--build=i586-pc-linux 
188CONFIG_PREFIX=CONFIG_SITE=../../../config.$(ARCH)
189
190    else
191
192ADD_GECODE_CONFIG_FLAGS=
193CONFIG_PREFIX=
194
195    endif
196  endif
197endif
198
199
200install_gecode:	gecode
201
202gecode:	$(GECODEDIR)/$(ARCH)/Makefile
203	( cd $(GECODEDIR)/$(ARCH) ; make ; make install )
204
205$(GECODEDIR)/$(ARCH)/Makefile:	$(GECODEDIR)/configure
206	mkdir -p $(GECODEDIR)/$(ARCH)
207	(cd $(GECODEDIR)/$(ARCH) ; $(CONFIG_PREFIX) ../configure CFLAGS="$(CLFAGS)" CXXFLAGS="$(CFLAGS)" --host=@host@ --enable-static --disable-mpfr --disable-float-vars $(ADD_GECODE_CONFIG_FLAGS) --prefix=$(THIRDPARTY_GECODE_DEST))
208
209$(GECODEDIR)/configure:
210	svn --username anonymous --password $(GECODE_SVN_PASSWD) co https://svn.gecode.org/svn/gecode/tags/release-$(GECODE_VERSION) $(GECODEDIR)
211
212