ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SheepShaver/src/Windows/configure.ac
Revision: 1.5
Committed: 2006-05-02T19:35:39Z (18 years, 7 months ago) by gbeauche
Branch: MAIN
Changes since 1.4: +17 -1 lines
Log Message:
Add SLiRP support to SheepShaver for Windows

File Contents

# User Rev Content
1 gbeauche 1.1 dnl Process this file with autoconf to produce a configure script.
2     dnl Written in 2002 by Christian Bauer
3    
4 gbeauche 1.4 AC_INIT([SheepShaver], 2.3, [Christian.Bauer@uni-mainz.de], SheepShaver)
5 gbeauche 1.1 AC_CONFIG_SRCDIR(main_windows.cpp)
6     AC_CONFIG_AUX_DIR(../Unix)
7     AC_PREREQ(2.52)
8     AC_CONFIG_HEADER(config.h)
9    
10     dnl Canonical system information.
11     AC_CANONICAL_HOST
12     AC_CANONICAL_TARGET
13    
14     dnl Options.
15     AC_ARG_ENABLE(jit, [ --enable-jit enable JIT compiler [default=yes]], [WANT_JIT=$enableval], [WANT_JIT=yes])
16 gbeauche 1.3 AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [default=yes]], [WANT_GTK=$withval], [WANT_GTK=yes])
17 gbeauche 1.1
18     dnl Checks for programs.
19     AC_PROG_CC
20     AC_PROG_CPP
21     AC_PROG_CXX
22     AC_PROG_MAKE_SET
23     AC_PROG_EGREP
24     AC_PROG_LN_S
25     AC_PATH_PROG(PERL, [perl])
26 gbeauche 1.2 AC_CHECK_TOOL(WINDRES, windres)
27 gbeauche 1.1
28 gbeauche 1.3 dnl We use GTK+ if possible.
29     if [[ "x$WANT_GTK" = "xyes" ]]; then
30     AM_PATH_GTK_2_0(1.3.15, [], [
31     AC_MSG_WARN([Could not find GTK+ 2.0, disabling user interface.])
32     WANT_GTK=no
33     ])
34     fi
35     AC_SUBST(WANT_GTK)
36    
37 gbeauche 1.1 dnl We use 64-bit file size support if possible.
38     AC_SYS_LARGEFILE
39    
40     dnl Checks for header files.
41     AC_HEADER_STDC
42    
43     dnl Checks for typedefs, structures, and compiler characteristics.
44     AC_C_BIGENDIAN
45     AC_C_CONST
46     AC_C_INLINE
47     AC_CHECK_SIZEOF(short, 2)
48     AC_CHECK_SIZEOF(int, 4)
49     AC_CHECK_SIZEOF(long, 4)
50     AC_CHECK_SIZEOF(long long, 8)
51     AC_CHECK_SIZEOF(float, 4)
52     AC_CHECK_SIZEOF(double, 8)
53     AC_CHECK_SIZEOF(void *, 4)
54     AC_TYPE_OFF_T
55 gbeauche 1.2 AC_CHECK_TYPES(loff_t)
56 gbeauche 1.1 AC_TYPE_SIZE_T
57    
58     dnl Checks for library functions.
59 gbeauche 1.5 AC_CHECK_FUNCS(strdup strerror)
60     AC_CHECK_FUNCS(exp2f log2f exp2 log2)
61     AC_CHECK_FUNCS(floorf roundf ceilf truncf)
62     AC_CHECK_FUNCS(floor round ceil trunc)
63 gbeauche 1.1
64     dnl Define a macro that translates a yesno-variable into a C macro definition
65     dnl to be put into the config.h file
66     dnl $1 -- the macro to define
67     dnl $2 -- the value to translate
68     dnl $3 -- template name
69     AC_DEFUN([AC_TRANSLATE_DEFINE], [
70     if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
71     AC_DEFINE($1, 1, $3)
72     fi
73     ])
74    
75     dnl Check that VirtualAlloc(), VirtualProtect() work
76     AC_CACHE_CHECK([whether VirtualProtect works],
77     ac_cv_VirtualProtect_works, [
78     AC_LANG_SAVE
79     AC_LANG_CPLUSPLUS
80     ac_cv_VirtualProtect_works=yes
81     dnl First the tests that should segfault
82     for test_def in NONE_READ NONE_WRITE READ_WRITE; do
83     AC_TRY_RUN([
84     #define HAVE_WIN32_VM 1
85     #define CONFIGURE_TEST_VM_MAP
86     #define TEST_VM_PROT_$test_def
87     #include "../Unix/vm_alloc.cpp"
88     ], ac_cv_VirtualProtect_works=no, rm -f core,
89     dnl When cross-compiling, assume it works
90     ac_cv_VirtualProtect_works="yes"
91     )
92     done
93     AC_TRY_RUN([
94     #define HAVE_WIN32_VM 1
95     #define CONFIGURE_TEST_VM_MAP
96     #define TEST_VM_PROT_RDWR_WRITE
97     #include "../Unix/vm_alloc.cpp"
98     ], , ac_cv_VirtualProtect_works=no,
99     dnl When cross-compiling, assume it works
100     ac_cv_VirtualProtect_works="yes"
101     )
102     AC_LANG_RESTORE
103     ]
104     )
105     if [[ "x$ac_cv_VirtualProtect_works" = "xyes" ]]; then
106     AC_DEFINE(HAVE_WIN32_VM, 1, [Define if your system has a working Win32-based memory allocator.])
107     else
108     AC_MSG_ERROR([Sorry, Windows VM functions don't work as expected on your system.])
109     fi
110    
111     dnl Check if Windows exceptions are supported.
112     AC_CACHE_CHECK([whether your system supports Windows exceptions],
113     ac_cv_have_win32_exceptions, [
114     AC_LANG_SAVE
115     AC_LANG_CPLUSPLUS
116     AC_TRY_RUN([
117     #define HAVE_WIN32_EXCEPTIONS 1
118     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
119     #include "../Unix/vm_alloc.cpp"
120     #include "../Unix/sigsegv.cpp"
121     ],
122     ac_cv_have_win32_exceptions=yes,
123     ac_cv_have_win32_exceptions=no,
124     dnl When cross-compiling, assume it works
125     ac_cv_have_win32_exceptions="yes"
126     )
127     AC_LANG_RESTORE
128     ]
129     )
130     if [[ "x$ac_cv_have_win32_exceptions" = "xyes" ]]; then
131     AC_DEFINE(HAVE_WIN32_EXCEPTIONS, 1, [Define if your system supports Windows exceptions.])
132     else
133     AC_MSG_ERROR([Sorry, Windows exceptions don't work as expected on your system.])
134     fi
135    
136     dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
137     AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
138     ac_cv_have_skip_instruction, [
139     AC_LANG_SAVE
140     AC_LANG_CPLUSPLUS
141     AC_TRY_RUN([
142     #define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
143     #define CONFIGURE_TEST_SIGSEGV_RECOVERY
144     #include "../Unix/vm_alloc.cpp"
145     #include "../Unix/sigsegv.cpp"
146     ], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
147 gbeauche 1.2 dnl When cross-compiling, assume it works
148     ac_cv_have_skip_instruction="yes"
149 gbeauche 1.1 )
150     AC_LANG_RESTORE
151     ]
152     )
153     AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
154     [Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
155    
156     dnl We really want VOSF (Video on SEGV Signals) screen updates acceleration
157     AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
158    
159     dnl Check for GCC 2.7 or higher.
160     HAVE_GCC27=no
161     AC_MSG_CHECKING(for GCC 2.7 or higher)
162     AC_EGREP_CPP(xyes,
163     [#if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5
164     xyes
165     #endif
166     ], [AC_MSG_RESULT(yes); HAVE_GCC27=yes], AC_MSG_RESULT(no))
167    
168     dnl Check for GCC 3.0 or higher.
169     HAVE_GCC30=no
170     AC_MSG_CHECKING(for GCC 3.0 or higher)
171     AC_EGREP_CPP(xyes,
172     [#if __GNUC__ >= 3
173     xyes
174     #endif
175     ], [AC_MSG_RESULT(yes); HAVE_GCC30=yes], AC_MSG_RESULT(no))
176    
177 gbeauche 1.5 dnl Add -fno-strict-aliasing for slirp sources
178     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
179     SAVED_CFLAGS="$CFLAGS"
180     CFLAGS="$CFLAGS -fno-strict-aliasing"
181     AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
182     ac_cv_gcc_no_strict_aliasing, [
183     AC_TRY_COMPILE([],[],
184     [ac_cv_gcc_no_strict_aliasing=yes; AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")],
185     [ac_cv_gcc_no_strict_aliasing=no])
186     ])
187     CFLAGS="$SAVED_CFLAGS"
188     fi
189    
190 gbeauche 1.1 dnl CPU emulator sources
191     CPUSRCS="\
192     ../kpx_cpu/src/mathlib/ieeefp.cpp \
193     ../kpx_cpu/src/cpu/ppc/ppc-cpu.cpp \
194     ../kpx_cpu/src/cpu/ppc/ppc-decode.cpp \
195     ../kpx_cpu/src/cpu/ppc/ppc-execute.cpp \
196     ../kpx_cpu/src/cpu/ppc/ppc-translate.cpp"
197     CPPFLAGS="$CPPFLAGS -I../kpx_cpu/include -I../kpx_cpu/src"
198    
199     dnl Enable JIT compiler, if possible
200     USE_DYNGEN="no"
201     if [[ "x$WANT_JIT" = "xyes" ]]; then
202     case $host_cpu in
203     i?86)
204     DYNGEN_OP_FLAGS="-fomit-frame-pointer -mpreferred-stack-boundary=2"
205     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
206     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -falign-functions=0"
207     else
208     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -malign-functions=0"
209     fi
210     ;;
211     esac
212     USE_DYNGEN="yes"
213     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -finline-limit=10000 -g0"
214     if [[ "x$HAVE_GCC30" = "xyes" ]]; then
215     DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-reorder-blocks -fno-optimize-sibling-calls"
216     fi
217     AC_DEFINE(ENABLE_DYNGEN, 1, [Define to enable dyngen engine])
218     DYNGENSRCS="\
219     ../kpx_cpu/src/cpu/jit/dyngen.c \
220     ../kpx_cpu/src/cpu/jit/cxxdemangle.cpp"
221     CPUSRCS="\
222     ../kpx_cpu/src/cpu/jit/jit-cache.cpp \
223     ../kpx_cpu/src/cpu/jit/basic-dyngen.cpp \
224     ../kpx_cpu/src/cpu/ppc/ppc-dyngen.cpp $CPUSRCS"
225     CPPFLAGS="$CPPFLAGS -DUSE_JIT"
226     fi
227     CPUSRCS="$CPUSRCS ../kpx_cpu/sheepshaver_glue.cpp"
228    
229     dnl We really want SDL for now
230 gbeauche 1.2 AC_CHECK_TOOL(sdl_config, sdl-config, [AC_MSG_ERROR([Sorry, you currently need SDL for this port])])
231 gbeauche 1.3 SDL_CFLAGS=`$sdl_config --cflags`
232     AC_SUBST(SDL_CFLAGS)
233     SDL_LIBS=`$sdl_config --libs`
234     AC_SUBST(SDL_LIBS)
235 gbeauche 1.1 AC_DEFINE(USE_SDL, 1, [Define to enble SDL support])
236     AC_DEFINE(USE_SDL_VIDEO, 1, [Define to enable SDL video graphics support])
237     AC_DEFINE(USE_SDL_AUDIO, 1, [Define to enable SDL audio support])
238    
239     dnl Remove the "-g" option if set for GCC.
240     if [[ "x$HAVE_GCC27" = "xyes" ]]; then
241     CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
242     CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
243     fi
244    
245     dnl Generate Makefile.
246     AC_SUBST(PERL)
247     AC_SUBST(USE_DYNGEN)
248     AC_SUBST(DYNGENSRCS)
249     AC_SUBST(DYNGEN_OP_FLAGS)
250     AC_SUBST(CPUSRCS)
251     AC_OUTPUT([Makefile])
252    
253     dnl Print summary.
254     echo
255     echo SheepShaver configuration summary:
256     echo
257     echo Enable JIT compiler .............. : $WANT_JIT
258 gbeauche 1.3 echo GTK user interface ............... : $WANT_GTK
259 gbeauche 1.1 echo
260     echo "Configuration done. Now type \"make\"."