mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-11-27 02:49:42 +00:00
Delete obsolete build files under src/MacOSX, which are no longer
needed since the same build can be produced from src/Unix via ./configure --enable-macosx-gui.
This commit is contained in:
parent
145f6c3d02
commit
4f63169cc9
@ -1,55 +0,0 @@
|
|||||||
How to build this source
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
1) Install the OS X Development tools
|
|
||||||
|
|
||||||
Source now only builds on 10.2 and 10.3. On 10.1, there are a few
|
|
||||||
compile and link errors that I just can't be bothered to fix.
|
|
||||||
On 10.4 when doing Xcode builds, there are problems with the way that
|
|
||||||
I have built libslirp.a. For now, do "make" instead of "make ide".
|
|
||||||
|
|
||||||
|
|
||||||
2) Open a Terminal, and cd to BasiliskII-1.0/src/MacOSX
|
|
||||||
|
|
||||||
3) autoconf
|
|
||||||
autoheader
|
|
||||||
./configure
|
|
||||||
|
|
||||||
This creates some symlinks to files in the Unix source and
|
|
||||||
/usr/libexec directories, generates ./configure, and runs it.
|
|
||||||
|
|
||||||
The end result is a Makefile and some header files
|
|
||||||
|
|
||||||
4) make
|
|
||||||
|
|
||||||
This should generate the uae_cpu emulator core's source,
|
|
||||||
compile the SLIRP sources and then the application.
|
|
||||||
|
|
||||||
* It is also possible to use the OS X integrated development environment
|
|
||||||
(i.e. "Project Builder" or Xcode) to build the application, instead of make.
|
|
||||||
Instead of step 4) above, do these steps:
|
|
||||||
|
|
||||||
4) make ide
|
|
||||||
|
|
||||||
This should generate the uae_cpu emulator core's source,
|
|
||||||
and then open the project in the Project Builder or Xcode IDE.
|
|
||||||
|
|
||||||
5) From the Build menu, choose 'Build' or 'Build & Run'
|
|
||||||
|
|
||||||
This should build everything
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
1) Compiling cpuemu.cpp takes 58 seconds on my 384MB G4 400.
|
|
||||||
Compiling it as separate files (cpuemu1.cpp thru cpuemu8.cpp)
|
|
||||||
takes 68 seconds on the same machine. If you have less RAM,
|
|
||||||
it may be faster to compile it as separate files.
|
|
||||||
|
|
||||||
2) If you want to change the addressing default
|
|
||||||
(which is currently direct), you have to reconfigure.
|
|
||||||
(i.e. make clean; ./configure --enable-addressing=banks)
|
|
||||||
|
|
||||||
3) To emulate a Mac Classic, or any Mac with 24bit addressing,
|
|
||||||
the app needs to be built with the above (bank) style addressing.
|
|
@ -1,307 +0,0 @@
|
|||||||
# Unix makefile for Basilisk II
|
|
||||||
|
|
||||||
## System specific configuration
|
|
||||||
SHELL = /bin/sh
|
|
||||||
|
|
||||||
HOST_CC = @CC@
|
|
||||||
HOST_CXX = @CXX@
|
|
||||||
CC_PROG = @CC@
|
|
||||||
CXX_PROG = @CXX@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CXXFLAGS = @CXXFLAGS@
|
|
||||||
CPPFLAGS = @CPPFLAGS@ -I../include -I. @CPUINCLUDES@ -I../slirp
|
|
||||||
DEFS = @DEFS@ @DEFINES@ -D_REENTRANT -DAQUA -DFPU_IEEE
|
|
||||||
LDFLAGS = @LDFLAGS@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
|
|
||||||
CFLAGS += -g
|
|
||||||
CPPFLAGS += -I../uae_cpu
|
|
||||||
CXXFLAGS += -g
|
|
||||||
LN_S = ln -s
|
|
||||||
|
|
||||||
## Compilers selection (XXX hackery for 10.2 cross-compilation...)
|
|
||||||
SDK_VERSION.ppc = @PPC_SDK_VERSION@
|
|
||||||
SDK_VERSION = $(SDK_VERSION.$(ARCH))
|
|
||||||
ifeq ($(SDK_VERSION), 10.2.8)
|
|
||||||
CC_PROG = gcc-3.3
|
|
||||||
CXX_PROG = g++-3.3
|
|
||||||
SDK_ROOT = /Developer/SDKs/MacOSX10.2.8.sdk
|
|
||||||
CC_ROOT = -F$(SDK_ROOT)/System/Library/Frameworks
|
|
||||||
LDFLAGS += -Wl,-syslibroot,$(SDK_ROOT)
|
|
||||||
endif
|
|
||||||
ifeq ($(SDK_VERSION), 10.3.9)
|
|
||||||
CC_ROOT = -isysroot /Developer/SDKs/MacOSX10.3.9.sdk -mmacosx-version-min=10.3
|
|
||||||
endif
|
|
||||||
ifeq ($(SDK_VERSION), 10.4)
|
|
||||||
CC_ROOT = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4
|
|
||||||
endif
|
|
||||||
CC = $(CC_PROG) $(CC_ROOT) -arch $(ARCH)
|
|
||||||
CXX = $(CXX_PROG) $(CC_ROOT) -arch $(ARCH)
|
|
||||||
|
|
||||||
SLIRP_CFLAGS = @SLIRP_CFLAGS@
|
|
||||||
SLIRP_SRCS = @SLIRP_SRCS@
|
|
||||||
SLIRP_OBJS = $(SLIRP_SRCS:../slirp/%.c=obj/%.o)
|
|
||||||
|
|
||||||
## CPU emulation code
|
|
||||||
WANT_JIT = @WANT_JIT@
|
|
||||||
WANT_JIT_DEBUG = @WANT_JIT_DEBUG@
|
|
||||||
USE_JIT = no
|
|
||||||
CPUSRCS = \
|
|
||||||
../uae_cpu/basilisk_glue.cpp ../uae_cpu/readcpu.cpp \
|
|
||||||
../uae_cpu/memory.cpp ../uae_cpu/newcpu.cpp ../uae_cpu/fpu/fpu_ieee.cpp
|
|
||||||
GEN_CPUSRCS = \
|
|
||||||
cpustbl.cpp cpudefs.cpp \
|
|
||||||
cpuemu1.cpp cpuemu2.cpp cpuemu3.cpp cpuemu4.cpp \
|
|
||||||
cpuemu5.cpp cpuemu6.cpp cpuemu7.cpp cpuemu8.cpp
|
|
||||||
ifeq ($(ARCH), i386)
|
|
||||||
USE_JIT = $(WANT_JIT)
|
|
||||||
DEFS += -DUNALIGNED_PROFITABLE -DREGPARAM="__attribute__((regparm(3)))"
|
|
||||||
DEFS += -DX86_ASSEMBLY -DOPTIMIZED_FLAGS -DSAHF_SETO_PROFITABLE
|
|
||||||
endif
|
|
||||||
ifeq ($(ARCH), x86_64)
|
|
||||||
USE_JIT = $(WANT_JIT)
|
|
||||||
DEFS += -DUNALIGNED_PROFITABLE
|
|
||||||
DEFS += -DX86_64_ASSEMBLY -DOPTIMIZED_FLAGS
|
|
||||||
endif
|
|
||||||
ifeq ($(USE_JIT), yes)
|
|
||||||
DEFS += -DUSE_JIT -DUSE_JIT_FPU
|
|
||||||
ifeq ($(WANT_JIT_DEBUG), yes)
|
|
||||||
DEFS += -DJIT_DEBUG
|
|
||||||
endif
|
|
||||||
CPUSRCS += \
|
|
||||||
../uae_cpu/compiler/compemu_support.cpp \
|
|
||||||
../uae_cpu/compiler/compemu_fpp.cpp
|
|
||||||
GEN_CPUSRCS += \
|
|
||||||
cpuemu1_nf.cpp cpuemu2_nf.cpp cpuemu3_nf.cpp cpuemu4_nf.cpp \
|
|
||||||
cpuemu5_nf.cpp cpuemu6_nf.cpp cpuemu7_nf.cpp cpuemu8_nf.cpp \
|
|
||||||
compemu1.cpp compemu2.cpp compemu3.cpp compemu4.cpp \
|
|
||||||
compemu5.cpp compemu6.cpp compemu7.cpp compemu8.cpp \
|
|
||||||
cpustbl_nf.cpp compstbl.cpp
|
|
||||||
endif
|
|
||||||
|
|
||||||
GEN_DIR = gen
|
|
||||||
ifneq ($(ARCH),)
|
|
||||||
GEN_DIR = gen.$(ARCH)
|
|
||||||
endif
|
|
||||||
CPUSRCS += $(foreach file, $(GEN_CPUSRCS), $(GEN_DIR)/$(file))
|
|
||||||
CPPFLAGS += -I$(GEN_DIR)
|
|
||||||
|
|
||||||
## Source files thst replace/augment the ones from the Unix directory
|
|
||||||
SYSSRCS = serial_unix.cpp ../dummy/scsi_dummy.cpp \
|
|
||||||
audio_macosx.cpp AudioBackEnd.cpp AudioDevice.cpp MacOSX_sound_if.cpp \
|
|
||||||
clip_macosx.cpp Controller.mm Emulator.mm EmulatorView.mm \
|
|
||||||
ether_unix.cpp extfs_macosx.cpp main_macosx.mm misc_macosx.mm \
|
|
||||||
NNThread.m prefs_macosx.cpp PrefsEditor.mm sys_darwin.cpp video_macosx.mm
|
|
||||||
|
|
||||||
## Files
|
|
||||||
SRCS = ../main.cpp ../prefs.cpp ../prefs_items.cpp \
|
|
||||||
sys_unix.cpp ../rom_patches.cpp ../slot_rom.cpp ../rsrc_patches.cpp \
|
|
||||||
../emul_op.cpp ../macos_util.cpp ../xpram.cpp xpram_unix.cpp ../timer.cpp \
|
|
||||||
timer_unix.cpp ../adb.cpp ../serial.cpp ../ether.cpp \
|
|
||||||
../sony.cpp ../disk.cpp ../cdrom.cpp ../scsi.cpp ../video.cpp \
|
|
||||||
vm_alloc.cpp sigsegv.cpp ../audio.cpp ../extfs.cpp \
|
|
||||||
../user_strings.cpp user_strings_unix.cpp sshpty.c strlcpy.c \
|
|
||||||
$(SYSSRCS) $(CPUSRCS) $(SLIRP_SRCS)
|
|
||||||
|
|
||||||
## Source files from Unix source directory that we link to
|
|
||||||
UNIXSRCS = ether_unix.cpp semaphore.h serial_unix.cpp sigsegv.cpp sigsegv.h \
|
|
||||||
sshpty.c sshpty.h strlcpy.c strlcpy.h sys_unix.cpp timer_unix.cpp \
|
|
||||||
user_strings_unix.cpp user_strings_unix.h \
|
|
||||||
vm_alloc.cpp vm_alloc.h xpram_unix.cpp
|
|
||||||
|
|
||||||
## Documentation files
|
|
||||||
DOCS = README.txt Credits.html ToDo.html HowTo.html Versions.html
|
|
||||||
|
|
||||||
## Binaries to build
|
|
||||||
APP = BasiliskII
|
|
||||||
APP_APP = $(APP).app
|
|
||||||
TARGET_ARCHES = @TARGET_ARCHES@
|
|
||||||
PROGS = $(foreach arch, $(TARGET_ARCHES), $(APP).$(arch))
|
|
||||||
|
|
||||||
BLESS = $(OBJ_DIR)/lowmem
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
.PHONY: modules install installdirs uninstall mostlyclean clean distclean depend dep
|
|
||||||
.SUFFIXES:
|
|
||||||
.SUFFIXES: .c .cpp .s .o .h
|
|
||||||
|
|
||||||
all: $(APP)_app
|
|
||||||
|
|
||||||
README.txt: ../../README
|
|
||||||
$(LN_S) $< $@
|
|
||||||
$(UNIXSRCS): %: ../Unix/%
|
|
||||||
$(LN_S) $< $@
|
|
||||||
|
|
||||||
OBJ_DIR = obj
|
|
||||||
ifneq ($(ARCH),)
|
|
||||||
OBJ_DIR = obj.$(ARCH)
|
|
||||||
endif
|
|
||||||
$(OBJ_DIR)::
|
|
||||||
@[ -d $(OBJ_DIR) ] || mkdir $(OBJ_DIR) > /dev/null 2>&1
|
|
||||||
|
|
||||||
define SRCS_LIST_TO_OBJS
|
|
||||||
$(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(foreach file, $(SRCS), \
|
|
||||||
$(basename $(notdir $(file))))))
|
|
||||||
endef
|
|
||||||
OBJS = $(SRCS_LIST_TO_OBJS)
|
|
||||||
|
|
||||||
SRC_PATHS += $(sort $(foreach file, $(SRCS), $(dir $(file))))
|
|
||||||
VPATH :=
|
|
||||||
VPATH += $(addprefix :, $(subst ,:, $(filter-out $($(subst, :, ,$(VPATH))), $(SRC_PATHS))))
|
|
||||||
|
|
||||||
define PROGS_template
|
|
||||||
$(APP).$(1): links
|
|
||||||
+$(MAKE) $(OBJ_DIR).$(1)/$(APP) ARCH=$(1)
|
|
||||||
$(LN_S) -f $(OBJ_DIR).$(1)/$(APP) $(APP).$(1)
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(APP): $(PROGS)
|
|
||||||
lipo $(foreach arch, $(TARGET_ARCHES), -arch $(arch) $(APP).$(arch)) \
|
|
||||||
-create -output $@
|
|
||||||
|
|
||||||
$(foreach arch,$(TARGET_ARCHES),$(eval $(call PROGS_template,$(arch))))
|
|
||||||
|
|
||||||
links: $(UNIXSRCS)
|
|
||||||
|
|
||||||
$(BLESS): $(OBJ_DIR) $(OBJ_DIR)/lowmem.o
|
|
||||||
$(HOST_CC) -o $@ $(OBJ_DIR)/lowmem.o
|
|
||||||
$(OBJ_DIR)/lowmem.o: ../Unix/Darwin/lowmem.c
|
|
||||||
$(HOST_CC) -o $@ -c $<
|
|
||||||
|
|
||||||
$(OBJ_DIR)/$(APP): $(OBJ_DIR) $(GEN_DIR) $(OBJS) $(BLESS)
|
|
||||||
$(CXX) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
|
|
||||||
$(BLESS) $@
|
|
||||||
|
|
||||||
$(APP)_app: $(APP) $(DOCS) Info.plist $(APP).icns
|
|
||||||
rm -rf $(APP_APP)/Contents
|
|
||||||
mkdir -p $(APP_APP)/Contents
|
|
||||||
cp -f ../MacOSX/Info.plist $(APP_APP)/Contents/
|
|
||||||
echo -n 'APPL????' > $(APP_APP)/Contents/PkgInfo
|
|
||||||
mkdir -p $(APP_APP)/Contents/MacOS
|
|
||||||
cp -f $(APP) $(APP_APP)/Contents/MacOS/
|
|
||||||
strip -x $(APP_APP)/Contents/MacOS/$(APP)
|
|
||||||
mkdir -p $(APP_APP)/Contents/Resources
|
|
||||||
cp -Rp English.lproj $(APP_APP)/Contents/Resources/
|
|
||||||
cp -f $(APP).icns $(APP_APP)/Contents/Resources/
|
|
||||||
cp -f $(DOCS) $(APP_APP)/Contents/Resources/
|
|
||||||
find $(APP_APP) -type d -name CVS | xargs rm -rf
|
|
||||||
|
|
||||||
mostlyclean:
|
|
||||||
rm -f $(PROGS) $(OBJ_DIR)/* core* *.core *~ *.bak
|
|
||||||
rm -f $(foreach arch, $(TARGET_ARCHES), $(GEN_DIR).$(arch)/*)
|
|
||||||
rm -f $(foreach arch, $(TARGET_ARCHES), $(OBJ_DIR).$(arch)/*)
|
|
||||||
|
|
||||||
clean: mostlyclean
|
|
||||||
rm -f $(UNIXSRCS)
|
|
||||||
rm -f README.txt
|
|
||||||
|
|
||||||
distclean: clean
|
|
||||||
rm -rf $(foreach arch, $(TARGET_ARCHES), $(GEN_DIR).$(arch))
|
|
||||||
rm -rf $(foreach arch, $(TARGET_ARCHES), $(OBJ_DIR).$(arch))
|
|
||||||
rm -rf autom4te.cache
|
|
||||||
rm -f Makefile
|
|
||||||
rm -f config.cache config.log config.status config.h configure
|
|
||||||
|
|
||||||
depend dep:
|
|
||||||
makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null
|
|
||||||
|
|
||||||
$(OBJ_DIR)/%.o : ../slirp/%.c
|
|
||||||
$(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(SLIRP_CFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.o : %.c
|
|
||||||
$(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.o : %.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.o : %.m
|
|
||||||
$(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.o : %.mm
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.o : %.s
|
|
||||||
$(CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.ho : %.c
|
|
||||||
$(HOST_CC) $(CPPFLAGS) $(DEFS) $(CFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/%.ho : %.cpp
|
|
||||||
$(HOST_CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(OBJ_DIR)/build68k: $(OBJ_DIR)/build68k.ho
|
|
||||||
$(HOST_CC) -o $@ $(OBJ_DIR)/build68k.ho
|
|
||||||
$(OBJ_DIR)/gencpu: $(OBJ_DIR)/gencpu.ho $(OBJ_DIR)/readcpu.ho $(OBJ_DIR)/cpudefs.ho
|
|
||||||
$(HOST_CXX) -o $@ $(OBJ_DIR)/gencpu.ho $(OBJ_DIR)/readcpu.ho $(OBJ_DIR)/cpudefs.ho
|
|
||||||
$(OBJ_DIR)/gencomp: $(OBJ_DIR)/gencomp.ho $(OBJ_DIR)/readcpu.ho $(OBJ_DIR)/cpudefs.ho
|
|
||||||
$(HOST_CXX) -o $@ $(OBJ_DIR)/gencomp.ho $(OBJ_DIR)/readcpu.ho $(OBJ_DIR)/cpudefs.ho
|
|
||||||
|
|
||||||
$(GEN_DIR)::
|
|
||||||
@[ -d $(GEN_DIR) ] || mkdir $(GEN_DIR) > /dev/null 2>&1
|
|
||||||
|
|
||||||
$(GEN_DIR)/cpudefs.cpp: $(OBJ_DIR)/build68k ../uae_cpu/table68k
|
|
||||||
$(OBJ_DIR)/build68k <../uae_cpu/table68k > $@
|
|
||||||
$(GEN_DIR)/cpustbl.cpp: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(GEN_DIR)/cpustbl_nf.cpp: $(GEN_DIR)/cpustbl.cpp
|
|
||||||
$(GEN_DIR)/compstbl.cpp: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(GEN_DIR)/cputbl.h: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(GEN_DIR)/comptbl.h: $(GEN_DIR)/compemu.cpp
|
|
||||||
|
|
||||||
$(GEN_DIR)/cpuemu.cpp: $(OBJ_DIR)/gencpu
|
|
||||||
cd $(GEN_DIR) && ../$(OBJ_DIR)/gencpu
|
|
||||||
|
|
||||||
$(GEN_DIR)/compemu.cpp: $(OBJ_DIR)/gencomp
|
|
||||||
cd $(GEN_DIR) && ../$(OBJ_DIR)/gencomp
|
|
||||||
|
|
||||||
$(OBJ_DIR)/cpustbl_nf.o: $(GEN_DIR)/cpustbl.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -DNOFLAGS -c $< -o $@
|
|
||||||
|
|
||||||
$(OBJ_DIR)/compemu_support.o: compemu_support.cpp $(GEN_DIR)/comptbl.h
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) $(CXXFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(OBJ_DIR)/cpuemu1.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_1 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu2.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_2 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu3.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_3 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu4.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_4 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu5.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_5 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu6.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_6 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu7.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_7 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu8.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_8 $(CXXFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(OBJ_DIR)/cpuemu1_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_1 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu2_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_2 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu3_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_3 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu4_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_4 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu5_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_5 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu6_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_6 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu7_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_7 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/cpuemu8_nf.o: $(GEN_DIR)/cpuemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_8 -DNOFLAGS $(CXXFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(OBJ_DIR)/compemu1.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_1 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu2.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_2 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu3.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_3 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu4.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_4 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu5.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_5 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu6.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_6 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu7.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_7 $(CXXFLAGS) -c $< -o $@
|
|
||||||
$(OBJ_DIR)/compemu8.o: $(GEN_DIR)/compemu.cpp
|
|
||||||
$(CXX) $(CPPFLAGS) $(DEFS) -DPART_8 $(CXXFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
|
@ -1,77 +0,0 @@
|
|||||||
/*
|
|
||||||
* config_macosx.h - MacOS X macros determined at compile-time
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Basilisk II (C) 1997-2008 Christian Bauer
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Supported platforms are: ppc, ppc64, x86, x86_64 */
|
|
||||||
#if ! defined __ppc__ && ! defined __ppc64__ && ! defined __i386__ && ! defined __x86_64__
|
|
||||||
# error "Unsupported architecture. Please fix arch-specific macros"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Size of data types */
|
|
||||||
#define SIZEOF_FLOAT 4
|
|
||||||
#define SIZEOF_DOUBLE 8
|
|
||||||
#if defined __ppc__ || defined __ppc64__
|
|
||||||
# if defined __LONG_DOUBLE_128__
|
|
||||||
# define SIZEOF_LONG_DOUBLE 16
|
|
||||||
# else
|
|
||||||
# define SIZEOF_LONG_DOUBLE 8
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# define SIZEOF_LONG_DOUBLE 16
|
|
||||||
#endif
|
|
||||||
#define SIZEOF_SHORT 2
|
|
||||||
#define SIZEOF_INT 4
|
|
||||||
#if defined __ppc64__ || defined __x86_64__
|
|
||||||
# define SIZEOF_LONG 8
|
|
||||||
#else
|
|
||||||
# define SIZEOF_LONG 4
|
|
||||||
#endif
|
|
||||||
#define SIZEOF_LONG_LONG 8
|
|
||||||
#define SIZEOF_VOID_P SIZEOF_LONG /* ILP32 or LP64 */
|
|
||||||
|
|
||||||
/* Endian-ness of data types */
|
|
||||||
#if ! defined __LITTLE_ENDIAN__
|
|
||||||
# define WORDS_BIGENDIAN 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to the floating point format of the host machine. */
|
|
||||||
#define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT
|
|
||||||
|
|
||||||
/* Define to 1 if the host machine stores floating point numbers in memory
|
|
||||||
with the word containing the sign bit at the lowest address, or to 0 if it
|
|
||||||
does it the other way around. This macro should not be defined if the
|
|
||||||
ordering is the same as for multi-word integers. */
|
|
||||||
/* #undef HOST_FLOAT_WORDS_BIG_ENDIAN */
|
|
||||||
|
|
||||||
/* Define if your system supports Mach exceptions. */
|
|
||||||
#define HAVE_MACH_EXCEPTIONS 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <mach/mach.h> header file. */
|
|
||||||
#define HAVE_MACH_MACH_H 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mach_task_self' function. */
|
|
||||||
#define HAVE_MACH_TASK_SELF 1
|
|
||||||
|
|
||||||
/* Define if your system has a working vm_allocate()-based memory allocator. */
|
|
||||||
#define HAVE_MACH_VM 1
|
|
||||||
|
|
||||||
/* Define if the __PAGEZERO Mach-O Low Memory Globals hack works. */
|
|
||||||
#define PAGEZERO_HACK 1
|
|
@ -1,794 +0,0 @@
|
|||||||
dnl Mac OS X configuration driver
|
|
||||||
dnl $Id$
|
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
dnl Based on Unix/configure.in
|
|
||||||
dnl Written in 1999 by Christian Bauer et al.
|
|
||||||
dnl Occasionally re-synchronised (merged?) with latest version
|
|
||||||
dnl Written in 2002 by Christian Bauer et al.
|
|
||||||
|
|
||||||
dnl autoconf on 10.1 doesn't understand these
|
|
||||||
dnl AC_INIT([Basilisk II], 1.0, [Christian.Bauer@uni-mainz.de], BasiliskII)
|
|
||||||
dnl AC_CONFIG_SRCDIR(main_macosx.mm)
|
|
||||||
AC_INIT(main_macosx.mm)
|
|
||||||
AC_CONFIG_AUX_DIR(../Unix)
|
|
||||||
AC_PREREQ(2.12)
|
|
||||||
AC_CONFIG_HEADER(config.h)
|
|
||||||
AH_TOP([
|
|
||||||
/* Include MacOS X macros determined at compile-time */
|
|
||||||
#include "config_macosx.h"
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Aliases for PACKAGE and VERSION macros.
|
|
||||||
AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE_NAME", [Define this program name.])
|
|
||||||
AC_DEFINE_UNQUOTED(VERSION, "$PACKAGE_VERSION", [Define this program version.])
|
|
||||||
|
|
||||||
dnl Some systems do not put corefiles in the currect directory, avoid saving
|
|
||||||
dnl cores for the configure tests since some are intended to dump core.
|
|
||||||
ulimit -c 0
|
|
||||||
|
|
||||||
dnl Universal binaries.
|
|
||||||
AC_ARG_ENABLE(universal,
|
|
||||||
[ --enable-universal enable universal binaries for selected arches [default=no]],
|
|
||||||
[ WANT_UNIVERSAL=""
|
|
||||||
for arch in $enableval; do
|
|
||||||
case $arch in
|
|
||||||
yes) WANT_UNIVERSAL="i386 ppc";;
|
|
||||||
ppc|ppc64|i386|x86_64) WANT_UNIVERSAL="$WANT_UNIVERSAL $arch";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
])
|
|
||||||
AC_ARG_WITH(ppc-sdk, [ --with-ppc-sdk=VERSION use specific SDK VERSION for ppc builds [default=earliest]], [PPC_SDK_VERSION=$withval])
|
|
||||||
|
|
||||||
dnl Video options.
|
|
||||||
AC_ARG_ENABLE(multiwin,
|
|
||||||
[ --enable-multiwin allow multiple emulator windows [default=no]], [ENABLE_MULTIPLE=$enableval], [ENABLE_MULTIPLE=no])
|
|
||||||
|
|
||||||
dnl JIT compiler options.
|
|
||||||
AC_ARG_ENABLE(jit-compiler, [ --enable-jit-compiler enable JIT compiler [default=no]], [WANT_JIT=$enableval], [WANT_JIT=no])
|
|
||||||
AC_ARG_ENABLE(jit-debug, [ --enable-jit-debug activate native code disassemblers [default=no]], [WANT_JIT_DEBUG=$enableval], [WANT_JIT_DEBUG=no])
|
|
||||||
|
|
||||||
dnl Addressing modes.
|
|
||||||
AC_ARG_ENABLE(addressing,
|
|
||||||
[ --enable-addressing=AM specify the addressing mode to use [default=fastest]],
|
|
||||||
[ case "$enableval" in
|
|
||||||
real) ADDRESSING_TEST_ORDER="real";;
|
|
||||||
direct) ADDRESSING_TEST_ORDER="direct";;
|
|
||||||
banks) ADDRESSING_TEST_ORDER="banks";;
|
|
||||||
fastest)ADDRESSING_TEST_ORDER="direct banks";;
|
|
||||||
*) AC_MSG_ERROR([--enable-addressing takes only one of the following values: fastest, real, direct, banks]);;
|
|
||||||
esac
|
|
||||||
],
|
|
||||||
[ ADDRESSING_TEST_ORDER="direct banks"
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl External packages.
|
|
||||||
AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=no])
|
|
||||||
|
|
||||||
dnl Canonical system information.
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
AC_CANONICAL_TARGET
|
|
||||||
|
|
||||||
dnl Target OS type (target is host if not cross-compiling).
|
|
||||||
case "$target_os" in
|
|
||||||
linux*) OS_TYPE=linux;;
|
|
||||||
netbsd*) OS_TYPE=netbsd;;
|
|
||||||
freebsd*) OS_TYPE=freebsd;;
|
|
||||||
solaris*) OS_TYPE=solaris;;
|
|
||||||
darwin*) OS_TYPE=darwin;;
|
|
||||||
*) OS_TYPE=`echo $target_os | sed -e 's/-/_/g' | sed -e 's/\./_/g'`;;
|
|
||||||
esac
|
|
||||||
DEFINES="$DEFINES -DOS_$OS_TYPE"
|
|
||||||
|
|
||||||
dnl Target CPU type.
|
|
||||||
HAVE_I386=no
|
|
||||||
HAVE_M68K=no
|
|
||||||
HAVE_SPARC=no
|
|
||||||
HAVE_POWERPC=no
|
|
||||||
HAVE_X86_64=no
|
|
||||||
case "$target_cpu" in
|
|
||||||
i386* | i486* | i586* | i686* | i786* ) HAVE_I386=yes;;
|
|
||||||
m68k* ) HAVE_M68K=yes;;
|
|
||||||
sparc* ) HAVE_SPARC=yes;;
|
|
||||||
powerpc* ) HAVE_POWERPC=yes;;
|
|
||||||
x86_64* ) HAVE_X86_64=yes;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_CC_C_O
|
|
||||||
AC_PROG_CPP
|
|
||||||
AC_PROG_CXX
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_EGREP
|
|
||||||
|
|
||||||
dnl We use mon if possible.
|
|
||||||
MONSRCS=
|
|
||||||
if [[ "x$WANT_MON" = "xyes" ]]; then
|
|
||||||
AC_MSG_CHECKING(for mon)
|
|
||||||
mon_srcdir=../../../mon/src
|
|
||||||
if grep mon_init $mon_srcdir/mon.h >/dev/null 2>/dev/null; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(ENABLE_MON, 1, [Define if using "mon".])
|
|
||||||
MONSRCS="$mon_srcdir/mon.cpp $mon_srcdir/mon_6502.cpp $mon_srcdir/mon_z80.cpp $mon_srcdir/mon_cmd.cpp $mon_srcdir/mon_disass.cpp $mon_srcdir/mon_ppc.cpp $mon_srcdir/mon_lowmem.cpp $mon_srcdir/disass/floatformat.c $mon_srcdir/disass/i386-dis.c $mon_srcdir/disass/m68k-dis.c $mon_srcdir/disass/m68k-opc.c $mon_srcdir/disass/mips-dis.c $mon_srcdir/disass/mips-opc.c $mon_srcdir/disass/mips16-opc.c"
|
|
||||||
AC_SUBST(MONSRCS)
|
|
||||||
CXXFLAGS="$CXXFLAGS -I$mon_srcdir -I$mon_srcdir/disass"
|
|
||||||
AC_CHECK_LIB(ncurses, tgetent, ,
|
|
||||||
[AC_CHECK_LIB(termcap, tgetent, ,
|
|
||||||
[AC_CHECK_LIB(termlib, tgetent, ,
|
|
||||||
[AC_CHECK_LIB(terminfo, tgetent, ,
|
|
||||||
[AC_CHECK_LIB(Hcurses, tgetent, ,
|
|
||||||
[AC_CHECK_LIB(curses, tgetent)])])])])])
|
|
||||||
AC_CHECK_LIB(readline, readline)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_WARN([Could not find mon, ignoring --with-mon.])
|
|
||||||
WANT_MON=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl We want pthreads. Try libpthread first, then libc_r (FreeBSD), then PTL.
|
|
||||||
HAVE_PTHREADS=yes
|
|
||||||
AC_CHECK_LIB(pthread, pthread_create, , [
|
|
||||||
AC_CHECK_LIB(c_r, pthread_create, , [
|
|
||||||
AC_CHECK_LIB(PTL, pthread_create, , [
|
|
||||||
HAVE_PTHREADS=no
|
|
||||||
])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
dnl OS X does have pthreads, but not in any of the above locations:
|
|
||||||
HAVE_PTHREADS=yes
|
|
||||||
if [[ "x$HAVE_PTHREADS" = "xyes" ]]; then
|
|
||||||
AC_DEFINE(HAVE_PTHREADS, 1, [Define if pthreads are available.])
|
|
||||||
fi
|
|
||||||
AC_CHECK_FUNCS(pthread_cond_init)
|
|
||||||
AC_CHECK_FUNCS(pthread_cancel pthread_testcancel)
|
|
||||||
AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
|
|
||||||
AC_CHECK_FUNCS(pthread_mutexattr_settype)
|
|
||||||
AC_CHECK_FUNCS(pthread_mutexattr_setpshared)
|
|
||||||
|
|
||||||
dnl If POSIX.4 semaphores are not available, we emulate them with pthread mutexes.
|
|
||||||
SEMSRC=
|
|
||||||
AC_CHECK_FUNCS(sem_init, , [
|
|
||||||
if test "x$HAVE_PTHREADS" = "xyes"; then
|
|
||||||
SEMSRC=posix_sem.cpp
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl We want to enable multiple window support if possible
|
|
||||||
if [[ "x$WANT_MWIN" = "xyes" ]]; then
|
|
||||||
WANT_MWIN=yes
|
|
||||||
DEFINES="$DEFINES -DENABLE_MULTIPLE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl We use 64-bit file size support if possible.
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS(stdlib.h stdint.h)
|
|
||||||
AC_CHECK_HEADERS(unistd.h fcntl.h sys/types.h sys/time.h sys/mman.h mach/mach.h)
|
|
||||||
AC_CHECK_HEADERS(readline.h history.h readline/readline.h readline/history.h)
|
|
||||||
AC_CHECK_HEADERS(sys/socket.h sys/ioctl.h sys/filio.h sys/bitypes.h sys/wait.h)
|
|
||||||
AC_CHECK_HEADERS(sys/poll.h sys/select.h)
|
|
||||||
AC_CHECK_HEADERS(arpa/inet.h)
|
|
||||||
AC_CHECK_HEADERS(linux/if.h linux/if_tun.h net/if.h net/if_tun.h, [], [], [
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
#include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
])
|
|
||||||
AC_CHECK_HEADERS(AvailabilityMacros.h)
|
|
||||||
AC_CHECK_HEADERS(IOKit/storage/IOBlockStorageDevice.h)
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_C_INLINE
|
|
||||||
AC_TYPE_OFF_T
|
|
||||||
dnl These two symbols are not defined in 10.1's autoconf:
|
|
||||||
dnl AC_CHECK_TYPE(loff_t, off_t)
|
|
||||||
dnl AC_CHECK_TYPE(caddr_t, [char *])
|
|
||||||
dnl We define loff_t as a typedef of off_t in sysdeps.h if we don't have LOFF_T
|
|
||||||
dnl OS X does have caddr_t, but the above check doesn't work, so we have to do:
|
|
||||||
AC_DEFINE(HAVE_CADDR_T, 1, [The type "caddr_t" does exist on MacOS X.])
|
|
||||||
AC_TYPE_SIZE_T
|
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_STRUCT_TM
|
|
||||||
|
|
||||||
dnl Check whether sys/socket.h defines type socklen_t.
|
|
||||||
dnl (extracted from ac-archive/Miscellaneous)
|
|
||||||
AC_CACHE_CHECK([for socklen_t],
|
|
||||||
ac_cv_type_socklen_t, [
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
], [socklen_t len = 42; return 0;],
|
|
||||||
ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no,
|
|
||||||
dnl When cross-compiling, do not assume anything.
|
|
||||||
ac_cv_type_socklen_t="guessing no"
|
|
||||||
)
|
|
||||||
])
|
|
||||||
if [[ "x$ac_cv_type_socklen_t" != "xyes" ]]; then
|
|
||||||
AC_DEFINE(socklen_t, int, [Define to 'int' if <sys/types.h> doesn't define.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
AC_CHECK_FUNCS(strdup strerror cfmakeraw)
|
|
||||||
AC_CHECK_FUNCS(clock_gettime timer_create)
|
|
||||||
AC_CHECK_FUNCS(sigaction signal)
|
|
||||||
AC_CHECK_FUNCS(poll inet_aton)
|
|
||||||
|
|
||||||
dnl Darwin seems to define mach_task_self() instead of task_self().
|
|
||||||
AC_CHECK_FUNCS(mach_task_self task_self)
|
|
||||||
|
|
||||||
dnl Check for headers and functions related to pty support (sshpty.c)
|
|
||||||
dnl From openssh-3.2.2p1 configure.ac
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS(strings.h login.h sys/bsdtty.h sys/stat.h util.h pty.h)
|
|
||||||
AC_CHECK_FUNCS(_getpty vhangup strlcpy)
|
|
||||||
if test -z "$no_dev_ptmx" ; then
|
|
||||||
if test "x$disable_ptmx_check" != "xyes" ; then
|
|
||||||
AC_CHECK_FILE([/dev/ptmx],
|
|
||||||
[
|
|
||||||
AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1, [Define if you have /dev/ptmx.])
|
|
||||||
have_dev_ptmx=1
|
|
||||||
]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_CHECK_FILE([/dev/ptc],
|
|
||||||
[
|
|
||||||
AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1, [Define if you have /dev/ptc.])
|
|
||||||
have_dev_ptc=1
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl (end of code from openssh-3.2.2p1 configure.ac)
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check for systems where POSIX-style non-blocking I/O (O_NONBLOCK)
|
|
||||||
dnl doesn't work or is unimplemented. On these systems (mostly older
|
|
||||||
dnl ones), use the old BSD-style FIONBIO approach instead. [tcl.m4]
|
|
||||||
AC_CACHE_CHECK([FIONBIO vs. O_NONBLOCK for non-blocking I/O],
|
|
||||||
ac_cv_nonblocking_io, [
|
|
||||||
case "$host" in
|
|
||||||
*-*-osf*)
|
|
||||||
ac_cv_nonblocking_io=FIONBIO
|
|
||||||
;;
|
|
||||||
*-*-sunos4*)
|
|
||||||
ac_cv_nonblocking_io=FIONBIO
|
|
||||||
;;
|
|
||||||
*-*-ultrix*)
|
|
||||||
ac_cv_nonblocking_io=FIONBIO
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
ac_cv_nonblocking_io=O_NONBLOCK
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
if [[ "$ac_cv_nonblocking_io" = "FIONBIO" ]]; then
|
|
||||||
AC_DEFINE(USE_FIONBIO, 1, [Define if BSD-style non-blocking I/O is to be used])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check whether compiler supports byte bit-fields
|
|
||||||
AC_CACHE_CHECK([whether compiler supports byte bit-fields],
|
|
||||||
ac_cv_have_byte_bitfields, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_RUN([
|
|
||||||
struct A {
|
|
||||||
unsigned char b1:4;
|
|
||||||
unsigned char b2:4;
|
|
||||||
unsigned char c;
|
|
||||||
unsigned short s;
|
|
||||||
unsigned char a[4];
|
|
||||||
};
|
|
||||||
|
|
||||||
int main(void) {
|
|
||||||
A a;
|
|
||||||
return ! (sizeof(A) == 8 && &a.c == ((unsigned char *)&a + 1));
|
|
||||||
}],
|
|
||||||
[ac_cv_have_byte_bitfields=yes],
|
|
||||||
[ac_cv_have_byte_bitfields=no],
|
|
||||||
dnl When cross-compiling, assume only GCC supports this
|
|
||||||
[if [[ "$GCC" = "yes" ]]; then
|
|
||||||
ac_cv_have_byte_bitfields="guessing yes"
|
|
||||||
else
|
|
||||||
ac_cv_have_byte_bitfields="guessing no"
|
|
||||||
fi]
|
|
||||||
)
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl AC_CHECK_FRAMEWORK($1=NAME, $2=INCLUDES)
|
|
||||||
AC_DEFUN([AC_CHECK_FRAMEWORK], [
|
|
||||||
AS_VAR_PUSHDEF([ac_Framework], [ac_cv_framework_$1])dnl
|
|
||||||
AC_CACHE_CHECK([whether compiler supports framework $1],
|
|
||||||
ac_Framework, [
|
|
||||||
saved_LIBS="$LIBS"
|
|
||||||
LIBS="$LIBS -framework $1"
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[$2], [],
|
|
||||||
[AS_VAR_SET(ac_Framework, yes)], [AS_VAR_SET(ac_Framework, no); LIBS="$saved_LIBS"]
|
|
||||||
)
|
|
||||||
])
|
|
||||||
AS_IF([test AS_VAR_GET(ac_Framework) = yes],
|
|
||||||
[AC_DEFINE(AS_TR_CPP(HAVE_FRAMEWORK_$1), 1, [Define if framework $1 is available.])]
|
|
||||||
)
|
|
||||||
AS_VAR_POPDEF([ac_Framework])dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Check for some MacOS X frameworks
|
|
||||||
AC_CHECK_FRAMEWORK(AppKit, [])
|
|
||||||
AC_CHECK_FRAMEWORK(Carbon, [#include <Carbon/Carbon.h>])
|
|
||||||
AC_CHECK_FRAMEWORK(IOKit, [#include <IOKit/IOKitLib.h>])
|
|
||||||
AC_CHECK_FRAMEWORK(CoreFoundation, [#include <CoreFoundation/CoreFoundation.h>])
|
|
||||||
AC_CHECK_FRAMEWORK(CoreAudio, [#include <CoreAudio/CoreAudio.h>])
|
|
||||||
AC_CHECK_FRAMEWORK(AudioUnit, [#include <AudioUnit/AudioUnit.h>])
|
|
||||||
AC_CHECK_FRAMEWORK(AudioToolbox, [#include <AudioToolbox/AudioToolbox.h>])
|
|
||||||
|
|
||||||
dnl Select system-dependant source files.
|
|
||||||
ETHERSRC=ether_unix.cpp
|
|
||||||
DEFINES="$DEFINES -DBSD_COMP"
|
|
||||||
CXXFLAGS="$CXXFLAGS -fpermissive"
|
|
||||||
dnl Check for the CAM library
|
|
||||||
AC_CHECK_LIB(cam, cam_open_btl, HAVE_LIBCAM=yes, HAVE_LIBCAM=no)
|
|
||||||
if [[ "x$HAVE_LIBCAM" = "xno" ]]; then
|
|
||||||
AC_MSG_WARN([Cannot find libcam for SCSI management, disabling SCSI support.])
|
|
||||||
else
|
|
||||||
dnl Check for the sys kernel includes
|
|
||||||
AC_CHECK_HEADER(camlib.h)
|
|
||||||
if [[ "x$ac_cv_header_camlib_h" = "xno" ]]; then
|
|
||||||
dnl In this case I should fix this thing including a "patch"
|
|
||||||
dnl to access directly to the functions in the kernel :) --Orlando
|
|
||||||
AC_MSG_WARN([Cannot find includes for CAM library, disabling SCSI support.])
|
|
||||||
else
|
|
||||||
SCSISRC=FreeBSD/scsi_freebsd.cpp
|
|
||||||
LIBS="$LIBS -lcam"
|
|
||||||
DEFINES="$DEFINES -DCAM"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Is the slirp library supported?
|
|
||||||
WANT_SLIRP=no
|
|
||||||
case "$ac_cv_have_byte_bitfields" in
|
|
||||||
yes|"guessing yes")
|
|
||||||
WANT_SLIRP=yes
|
|
||||||
ETHERSRC=ether_unix.cpp
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
if [[ "x$WANT_SLIRP" = "xyes" ]]; then
|
|
||||||
AC_DEFINE(HAVE_SLIRP, 1, [Define if slirp library is supported])
|
|
||||||
SLIRP_SRCS="\
|
|
||||||
../slirp/bootp.c ../slirp/ip_output.c ../slirp/tcp_input.c \
|
|
||||||
../slirp/cksum.c ../slirp/mbuf.c ../slirp/tcp_output.c \
|
|
||||||
../slirp/debug.c ../slirp/misc.c ../slirp/tcp_subr.c \
|
|
||||||
../slirp/if.c ../slirp/sbuf.c ../slirp/tcp_timer.c \
|
|
||||||
../slirp/ip_icmp.c ../slirp/slirp.c ../slirp/tftp.c \
|
|
||||||
../slirp/ip_input.c ../slirp/socket.c ../slirp/udp.c"
|
|
||||||
fi
|
|
||||||
AC_SUBST(WANT_SLIRP)
|
|
||||||
AC_SUBST(SLIRP_SRCS)
|
|
||||||
|
|
||||||
|
|
||||||
dnl Define a macro that translates a yesno-variable into a C macro definition
|
|
||||||
dnl to be put into the config.h file
|
|
||||||
dnl $1 -- the macro to define
|
|
||||||
dnl $2 -- the value to translate
|
|
||||||
dnl $3 -- template name
|
|
||||||
AC_DEFUN([AC_TRANSLATE_DEFINE], [
|
|
||||||
if [[ "x$2" = "xyes" -o "x$2" = "xguessing yes" ]]; then
|
|
||||||
AC_DEFINE($1, 1, $3)
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Check that the host supports TUN/TAP devices
|
|
||||||
AC_CACHE_CHECK([whether TUN/TAP is supported],
|
|
||||||
ac_cv_tun_tap_support, [
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#if defined(HAVE_LINUX_IF_H) && defined(HAVE_LINUX_IF_TUN_H)
|
|
||||||
#include <linux/if.h>
|
|
||||||
#include <linux/if_tun.h>
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_IF_TUN_H)
|
|
||||||
#include <net/if.h>
|
|
||||||
#include <net/if_tun.h>
|
|
||||||
#endif
|
|
||||||
], [
|
|
||||||
struct ifreq ifr;
|
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
|
||||||
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
|
|
||||||
],
|
|
||||||
ac_cv_tun_tap_support=yes, ac_cv_tun_tap_support=no
|
|
||||||
)
|
|
||||||
])
|
|
||||||
AC_TRANSLATE_DEFINE(ENABLE_TUNTAP, "$ac_cv_tun_tap_support",
|
|
||||||
[Define if your system supports TUN/TAP devices.])
|
|
||||||
|
|
||||||
dnl Check signal handlers need to be reinstalled
|
|
||||||
AC_CACHE_CHECK([whether signal handlers need to be reinstalled],
|
|
||||||
ac_cv_signal_need_reinstall, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <stdlib.h>
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#include <signal.h>
|
|
||||||
static int handled_signal = 0;
|
|
||||||
RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
|
|
||||||
int main(void) { /* returns 0 if signals need not to be reinstalled */
|
|
||||||
signal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
|
|
||||||
exit(handled_signal == 2);
|
|
||||||
}
|
|
||||||
], ac_cv_signal_need_reinstall=yes, ac_cv_signal_need_reinstall=no,
|
|
||||||
dnl When cross-compiling, do not assume anything.
|
|
||||||
ac_cv_signal_need_reinstall="guessing yes"
|
|
||||||
)
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_TRANSLATE_DEFINE(SIGNAL_NEED_REINSTALL, "$ac_cv_signal_need_reinstall",
|
|
||||||
[Define if your system requires signals to be reinstalled.])
|
|
||||||
|
|
||||||
dnl Check if sigaction handlers need to be reinstalled
|
|
||||||
AC_CACHE_CHECK([whether sigaction handlers need to be reinstalled],
|
|
||||||
ac_cv_sigaction_need_reinstall, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include <stdlib.h>
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#include <signal.h>
|
|
||||||
static int handled_signal = 0;
|
|
||||||
RETSIGTYPE sigusr1_handler(int) { handled_signal++; }
|
|
||||||
typedef RETSIGTYPE (*signal_handler)(int);
|
|
||||||
static signal_handler mysignal(int sig, signal_handler handler) {
|
|
||||||
struct sigaction old_sa;
|
|
||||||
struct sigaction new_sa;
|
|
||||||
new_sa.sa_handler = handler;
|
|
||||||
return ((sigaction(sig,&new_sa,&old_sa) < 0) ? SIG_IGN : old_sa.sa_handler);
|
|
||||||
}
|
|
||||||
int main(void) { /* returns 0 if signals need not to be reinstalled */
|
|
||||||
mysignal(SIGUSR1, sigusr1_handler); raise(SIGUSR1); raise(SIGUSR1);
|
|
||||||
exit(handled_signal == 2);
|
|
||||||
}
|
|
||||||
], ac_cv_sigaction_need_reinstall=yes, ac_cv_sigaction_need_reinstall=no,
|
|
||||||
dnl When cross-compiling, do not assume anything.
|
|
||||||
ac_cv_sigaction_need_reinstall="guessing yes"
|
|
||||||
)
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_TRANSLATE_DEFINE(SIGACTION_NEED_REINSTALL, "$ac_cv_sigaction_need_reinstall",
|
|
||||||
[Define if your system requires sigactions to be reinstalled.])
|
|
||||||
|
|
||||||
dnl Check if we can ignore the fault (instruction skipping in SIGSEGV handler)
|
|
||||||
AC_CACHE_CHECK([whether we can skip instruction in SIGSEGV handler],
|
|
||||||
ac_cv_have_skip_instruction, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_RUN([
|
|
||||||
#include "config_macosx.h"
|
|
||||||
#define HAVE_SIGSEGV_SKIP_INSTRUCTION 1
|
|
||||||
#define CONFIGURE_TEST_SIGSEGV_RECOVERY
|
|
||||||
#include "../Unix/vm_alloc.cpp"
|
|
||||||
#include "../Unix/sigsegv.cpp"
|
|
||||||
], ac_cv_have_skip_instruction=yes, ac_cv_have_skip_instruction=no,
|
|
||||||
dnl When cross-compiling, do not assume anything.
|
|
||||||
ac_cv_have_skip_instruction=no
|
|
||||||
)
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
]
|
|
||||||
)
|
|
||||||
AC_TRANSLATE_DEFINE(HAVE_SIGSEGV_SKIP_INSTRUCTION, "$ac_cv_have_skip_instruction",
|
|
||||||
[Define if we can ignore the fault (instruction skipping in SIGSEGV handler).])
|
|
||||||
|
|
||||||
dnl We can do Video on SEGV Signals
|
|
||||||
CAN_VOSF=yes
|
|
||||||
|
|
||||||
dnl A dummy program that returns always true
|
|
||||||
AC_PATH_PROG([BLESS], "true")
|
|
||||||
|
|
||||||
dnl Check for linker script support
|
|
||||||
case $target_os:$target_cpu in
|
|
||||||
linux*:i?86) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-i386.ld";;
|
|
||||||
linux*:x86_64) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-x86_64.ld";;
|
|
||||||
linux*:powerpc) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-ppc.ld";;
|
|
||||||
netbsd*:i?86) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/linux-i386.ld";;
|
|
||||||
freebsd*:i?86) LINKER_SCRIPT_FLAGS="-Wl,-T,ldscripts/freebsd-i386.ld";;
|
|
||||||
darwin*:*) LINKER_SCRIPT_FLAGS="-Wl,-seg1addr,0x78048000";;
|
|
||||||
esac
|
|
||||||
if [[ -n "$LINKER_SCRIPT_FLAGS" ]]; then
|
|
||||||
AC_CACHE_CHECK([whether linker script is usable],
|
|
||||||
ac_cv_linker_script_works, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
saved_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS $LINKER_SCRIPT_FLAGS"
|
|
||||||
AC_TRY_RUN(
|
|
||||||
[int main() {if ((char *)&main < (char *)0x70000000) return 1;}],
|
|
||||||
[ac_cv_linker_script_works=yes],
|
|
||||||
[ac_cv_linker_script_works=no],
|
|
||||||
dnl When cross-compiling, assume it works
|
|
||||||
[ac_cv_linker_script_works="guessing yes"]
|
|
||||||
)
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
if [[ "$ac_cv_linker_script_works" = "no" ]]; then
|
|
||||||
LDFLAGS="$saved_LDFLAGS"
|
|
||||||
LINKER_SCRIPT_FLAGS=""
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
fi
|
|
||||||
AC_TRANSLATE_DEFINE(HAVE_LINKER_SCRIPT, "$ac_cv_linker_script_works",
|
|
||||||
[Define if there is a linker script to relocate the executable above 0x70000000.])
|
|
||||||
|
|
||||||
dnl Determine the addressing mode to use
|
|
||||||
ADDRESSING_MODE=""
|
|
||||||
AC_MSG_CHECKING([for the addressing mode to use])
|
|
||||||
for am in $ADDRESSING_TEST_ORDER; do
|
|
||||||
case $am in
|
|
||||||
real)
|
|
||||||
dnl Requires VOSF screen updates
|
|
||||||
if [[ "x$CAN_VOSF" = "xno" ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
dnl Real addressing will probably work.
|
|
||||||
ADDRESSING_MODE="real"
|
|
||||||
WANT_VOSF=yes dnl we can use VOSF and we need it actually
|
|
||||||
DEFINES="$DEFINES -DREAL_ADDRESSING"
|
|
||||||
AC_DEFINE(REAL_ADDRESSING, 1, [Emulated memory is memory mapped to actual address.])
|
|
||||||
LDFLAGS="$LDFLAGS -pagezero_size 0x2000"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
direct)
|
|
||||||
dnl Requires VOSF screen updates
|
|
||||||
if [[ "x$CAN_VOSF" = "xyes" ]]; then
|
|
||||||
ADDRESSING_MODE="direct"
|
|
||||||
WANT_VOSF=yes dnl we can use VOSF and we need it actually
|
|
||||||
DEFINES="$DEFINES -DDIRECT_ADDRESSING"
|
|
||||||
AC_DEFINE(DIRECT_ADDRESSING, 1, [Emulated memory is an offset from actual address.])
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
banks)
|
|
||||||
dnl Default addressing mode
|
|
||||||
ADDRESSING_MODE="memory banks"
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([Internal configure.in script error for $am addressing mode])
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
AC_MSG_RESULT($ADDRESSING_MODE)
|
|
||||||
if [[ "x$ADDRESSING_MODE" = "x" ]]; then
|
|
||||||
AC_MSG_WARN([Sorry, no suitable addressing mode in $ADDRESSING_TEST_ORDER])
|
|
||||||
ADDRESSING_MODE="memory banks"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Banked Memory Addressing mode is not supported by the JIT compiler
|
|
||||||
if [[ "x$WANT_JIT" = "xyes" -a "x$ADDRESSING_MODE" = "xmemory banks" ]]; then
|
|
||||||
AC_MSG_ERROR([Sorry, the JIT Compiler requires Direct Addressing, at least])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Enable VOSF screen updates with this feature is requested and feasible
|
|
||||||
if [[ "x$WANT_VOSF" = "xyes" -a "x$CAN_VOSF" = "xyes" ]]; then
|
|
||||||
AC_DEFINE(ENABLE_VOSF, 1, [Define if using video enabled on SEGV signals.])
|
|
||||||
else
|
|
||||||
WANT_VOSF=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Check for GAS.
|
|
||||||
HAVE_GAS=no
|
|
||||||
AC_MSG_CHECKING(for GAS .p2align feature)
|
|
||||||
cat >conftest.S << EOF
|
|
||||||
.text
|
|
||||||
.p2align 5
|
|
||||||
EOF
|
|
||||||
if $CC conftest.S -c -o conftest.o >/dev/null 2>&1 ; then HAVE_GAS=yes; fi
|
|
||||||
AC_MSG_RESULT($HAVE_GAS)
|
|
||||||
|
|
||||||
dnl Check for GCC 2.7 or higher.
|
|
||||||
HAVE_GCC27=no
|
|
||||||
AC_MSG_CHECKING(for GCC 2.7 or higher)
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 5)
|
|
||||||
# error gcc < 2.7
|
|
||||||
#endif
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT(yes); HAVE_GCC27=yes],
|
|
||||||
[AC_MSG_RESULT(no)])
|
|
||||||
|
|
||||||
dnl Check for GCC 3.0 or higher.
|
|
||||||
HAVE_GCC30=no
|
|
||||||
AC_MSG_CHECKING(for GCC 3.0 or higher)
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
|
|
||||||
# error gcc < 3
|
|
||||||
#endif
|
|
||||||
]])],
|
|
||||||
[AC_MSG_RESULT(yes); HAVE_GCC30=yes],
|
|
||||||
[AC_MSG_RESULT(no)])
|
|
||||||
|
|
||||||
dnl Check for ICC.
|
|
||||||
AC_MSG_CHECKING(for ICC)
|
|
||||||
HAVE_ICC=no
|
|
||||||
if $CXX -V -v 2>&1 | grep -q "Intel(R) C++ Compiler"; then
|
|
||||||
HAVE_ICC=yes
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($HAVE_ICC)
|
|
||||||
|
|
||||||
dnl Set "-fomit-frame-pointer" on i386 GCC 2.7 or higher.
|
|
||||||
dnl Also set "-fno-exceptions" for C++ because exception handling requires
|
|
||||||
dnl the frame pointer.
|
|
||||||
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_I386" = "xyes" ]]; then
|
|
||||||
CFLAGS="$CFLAGS -fomit-frame-pointer"
|
|
||||||
CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fno-exceptions"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl (gb) Do not merge constants since it breaks fpu/fpu_x86.cpp.
|
|
||||||
dnl As of 2001/08/02, this affects the following compilers:
|
|
||||||
dnl Official: probably gcc-3.1 (mainline CVS)
|
|
||||||
dnl Mandrake: gcc-2.96 >= 0.59mdk, gcc-3.0.1 >= 0.1mdk
|
|
||||||
dnl Red Hat : gcc-2.96 >= 89, gcc-3.0 >= 1
|
|
||||||
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
|
|
||||||
SAVED_CXXFLAGS="$CXXFLAGS"
|
|
||||||
CXXFLAGS="$CXXFLAGS -fno-merge-constants"
|
|
||||||
AC_CACHE_CHECK([whether GCC supports constants merging], ac_cv_gcc_constants_merging, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_COMPILE([],[],[ac_cv_gcc_constants_merging=yes],[ac_cv_gcc_constants_merging=no])
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
])
|
|
||||||
if [[ "x$ac_cv_gcc_constants_merging" != "xyes" ]]; then
|
|
||||||
CXXFLAGS="$SAVED_CXXFLAGS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Store motion was introduced in 3.3-hammer branch and any gcc >= 3.4
|
|
||||||
dnl However, there are some corner cases exposed on x86-64
|
|
||||||
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
|
|
||||||
SAVED_CXXFLAGS="$CXXFLAGS"
|
|
||||||
CXXFLAGS="$CXXFLAGS -fno-gcse-sm"
|
|
||||||
AC_CACHE_CHECK([whether GCC supports store motion], ac_cv_gcc_store_motion, [
|
|
||||||
AC_LANG_SAVE
|
|
||||||
AC_LANG_CPLUSPLUS
|
|
||||||
AC_TRY_COMPILE([],[],[ac_cv_gcc_store_motion=yes],[ac_cv_gcc_store_motion=no])
|
|
||||||
AC_LANG_RESTORE
|
|
||||||
])
|
|
||||||
if [[ "x$ac_cv_gcc_store_motion" != "xyes" ]]; then
|
|
||||||
CXXFLAGS="$SAVED_CXXFLAGS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Add -fno-strict-aliasing for slirp sources
|
|
||||||
if [[ "x$HAVE_GCC30" = "xyes" ]]; then
|
|
||||||
SAVED_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
||||||
AC_CACHE_CHECK([whether the compiler supports -fno-strict-aliasing],
|
|
||||||
ac_cv_gcc_no_strict_aliasing, [
|
|
||||||
AC_TRY_COMPILE([],[],[ac_cv_gcc_no_strict_aliasing=yes],[ac_cv_gcc_no_strict_aliasing=no])
|
|
||||||
])
|
|
||||||
if [[ "x$ac_cv_gcc_no_strict_aliasing" = "xyes" ]]; then
|
|
||||||
AC_SUBST(SLIRP_CFLAGS, "-fno-strict-aliasing")
|
|
||||||
fi
|
|
||||||
CFLAGS="$SAVED_CFLAGS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Add -mdynamic-no-pic for MacOS X (XXX icc10 will support MacOS X)
|
|
||||||
if [[ "x$HAVE_GCC30" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
|
|
||||||
SAVED_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS -mdynamic-no-pic"
|
|
||||||
AC_CACHE_CHECK([whether the compiler supports -mdynamic-no-pic],
|
|
||||||
ac_cv_gcc_mdynamic_no_pic, [
|
|
||||||
AC_TRY_COMPILE([],[],[ac_cv_gcc_mdynamic_no_pic=yes],[ac_cv_gcc_mdynamic_no_pic=no])
|
|
||||||
])
|
|
||||||
if [[ "x$ac_cv_gcc_mdynamic_no_pic" = "xyes" ]]; then
|
|
||||||
CXXFLAGS="$CXXFLAGS -mdynamic-no-pic"
|
|
||||||
else
|
|
||||||
CFLAGS="$SAVED_CFLAGS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Make sure we can enable JIT debug mode.
|
|
||||||
if [[ "x$WANT_JIT_DEBUG" = "xyes" ]]; then
|
|
||||||
if [[ ":$WANT_JIT:$WANT_MON:" != ":yes:yes:" ]]; then
|
|
||||||
AC_MSG_WARN([cxmon not found, ignoring --enable-jit-debug])
|
|
||||||
WANT_JIT_DEBUG=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Additionnal checks for the IEEE FPU emulation code.
|
|
||||||
AC_CHECK_HEADERS(ieee754.h ieeefp.h floatingpoint.h nan.h)
|
|
||||||
AC_CHECK_FUNCS(atanh)
|
|
||||||
AC_CHECK_FUNCS(isnan isinf finite isnormal signbit)
|
|
||||||
dnl Math functions not mandated by C99 standard
|
|
||||||
AC_CHECK_FUNCS(isnanl isinfl)
|
|
||||||
dnl Math functions required by C99 standard, but probably not
|
|
||||||
dnl implemented everywhere. In that case, we fall back to the
|
|
||||||
dnl regular variant for doubles.
|
|
||||||
AC_CHECK_FUNCS(logl log10l expl powl fabsl sqrtl)
|
|
||||||
AC_CHECK_FUNCS(sinl cosl tanl sinhl coshl tanhl)
|
|
||||||
AC_CHECK_FUNCS(asinl acosl atanl asinhl acoshl atanhl)
|
|
||||||
AC_CHECK_FUNCS(floorl ceill)
|
|
||||||
|
|
||||||
dnl Remove the "-g" option if set for GCC.
|
|
||||||
if [[ "x$HAVE_GCC27" = "xyes" ]]; then
|
|
||||||
CFLAGS=`echo $CFLAGS | sed -e 's/-g\b//g'`
|
|
||||||
CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-g\b//g'`
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Some Mac OS X specific stuff:
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl MacOS 10.2 (and later?) have a particular header for defining the OS version
|
|
||||||
if [[ "x$ac_cv_header_AvailabilityMacros_h" = "xyes" ]]; then
|
|
||||||
AC_DEFINE(AVAILABILITYMACROS, 1, [Header specific to 10.2 and later.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Which IDE do we use?
|
|
||||||
if test -d "/Developer/Applications/Xcode.app"; then
|
|
||||||
IDE=xcodebuild
|
|
||||||
PROJECT=BasiliskII.xcode
|
|
||||||
IDEARGS="-project BasiliskII.xcode"
|
|
||||||
else
|
|
||||||
IDE=pbxbuild
|
|
||||||
PROJECT=BasiliskII.pbproj
|
|
||||||
IDEARGS=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Universal binaries
|
|
||||||
if [[ -z "$WANT_UNIVERSAL" ]]; then
|
|
||||||
WANT_UNIVERSAL=`echo $target_cpu | sed -e 's/i.86/i386/' | sed -e 's/powerpc/ppc/'`
|
|
||||||
fi
|
|
||||||
AC_SUBST(TARGET_ARCHES, [$WANT_UNIVERSAL])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(for PowerPC SDK)
|
|
||||||
for version in $PPC_SDK_VERSION 10.2.8 10.3.9 10.4; do
|
|
||||||
sdk=`echo /Developer/SDKs/MacOSX$version*.sdk`
|
|
||||||
if [[ -d "$sdk" ]]; then
|
|
||||||
PPC_SDK_VERSION="$version"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
AC_MSG_RESULT($PPC_SDK_VERSION)
|
|
||||||
AC_SUBST(PPC_SDK_VERSION)
|
|
||||||
|
|
||||||
AC_DEFINE(DATADIR, "~", [unix_ether needs this!])
|
|
||||||
|
|
||||||
dnl Generate Makefile.
|
|
||||||
AC_SUBST(DEFINES)
|
|
||||||
AC_SUBST(MONSRCS)
|
|
||||||
AC_SUBST(CPUINCLUDES)
|
|
||||||
AC_SUBST(BLESS)
|
|
||||||
AC_SUBST(IDE)
|
|
||||||
AC_SUBST(PROJECT)
|
|
||||||
AC_SUBST(IDEARGS)
|
|
||||||
AC_SUBST(SLIRP_SRCS)
|
|
||||||
AC_SUBST(KEYCODES)
|
|
||||||
AC_SUBST(WANT_JIT)
|
|
||||||
AC_SUBST(WANT_JIT_DEBUG)
|
|
||||||
dnl autoconf on 10.1 doesn't understand these
|
|
||||||
dnl AC_CONFIG_FILES([Makefile])
|
|
||||||
dnl AC_OUTPUT
|
|
||||||
AC_OUTPUT(Makefile)
|
|
||||||
|
|
||||||
dnl Print summary.
|
|
||||||
echo
|
|
||||||
echo Basilisk II configuration summary:
|
|
||||||
echo
|
|
||||||
echo Build binaries for ..................... : $WANT_UNIVERSAL
|
|
||||||
echo Multiple emulator windows .............. : $ENABLE_MULTIPLE
|
|
||||||
echo Enable video on SEGV signals ........... : $WANT_VOSF
|
|
||||||
echo mon debugger support ................... : $WANT_MON
|
|
||||||
echo Build JIT compiler ..................... : $WANT_JIT
|
|
||||||
echo Build JIT with debug code .............. : $WANT_JIT_DEBUG
|
|
||||||
echo Addressing mode ........................ : $ADDRESSING_MODE
|
|
||||||
echo Mac OS X development environment ....... : $IDE
|
|
||||||
echo
|
|
||||||
echo "Configuration done. Now type \"make\" (or \"make ide\")."
|
|
@ -1,345 +0,0 @@
|
|||||||
/*
|
|
||||||
* sysdeps.h - System dependent definitions for Mac OS X.
|
|
||||||
* Based on Unix version
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Basilisk II (C) 1997-2008 Christian Bauer
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SYSDEPS_H
|
|
||||||
#define SYSDEPS_H
|
|
||||||
|
|
||||||
#ifndef __STDC__
|
|
||||||
#error "Your compiler is not ANSI. Get a real one."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "user_strings_unix.h"
|
|
||||||
|
|
||||||
#ifndef STDC_HEADERS
|
|
||||||
#error "You don't have ANSI C header files."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_PTHREADS
|
|
||||||
# include <pthread.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_FCNTL_H
|
|
||||||
# include <fcntl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef TIME_WITH_SYS_TIME
|
|
||||||
# include <sys/time.h>
|
|
||||||
# include <time.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
# else
|
|
||||||
# include <time.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__MACH__)
|
|
||||||
#include <mach/clock.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Symbol to distinguish Nigel's Aqua port from a normal Darwin X11 build */
|
|
||||||
/* (this sysdeps.h file is currently specific to the Mac OS X Aqua port) */
|
|
||||||
#define AQUA 1
|
|
||||||
|
|
||||||
/* Header which defines OS X version for selecting APIs */
|
|
||||||
#ifdef AVAILABILITYMACROS
|
|
||||||
# include <AvailabilityMacros.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ENABLE_NATIVE_M68K
|
|
||||||
|
|
||||||
/* Mac and host address space are the same */
|
|
||||||
#define REAL_ADDRESSING 1
|
|
||||||
|
|
||||||
/* Using 68k natively */
|
|
||||||
#define EMULATED_68K 0
|
|
||||||
|
|
||||||
/* Mac ROM is not write protected */
|
|
||||||
#define ROM_IS_WRITE_PROTECTED 0
|
|
||||||
#define USE_SCRATCHMEM_SUBTERFUGE 1
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Mac and host address space are distinct */
|
|
||||||
#ifndef REAL_ADDRESSING
|
|
||||||
#define REAL_ADDRESSING 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Using 68k emulator */
|
|
||||||
#define EMULATED_68K 1
|
|
||||||
|
|
||||||
/* The m68k emulator uses a prefetch buffer ? */
|
|
||||||
#define USE_PREFETCH_BUFFER 0
|
|
||||||
|
|
||||||
/* Mac ROM is write protected when banked memory is used */
|
|
||||||
#if REAL_ADDRESSING || DIRECT_ADDRESSING
|
|
||||||
# define ROM_IS_WRITE_PROTECTED 0
|
|
||||||
# define USE_SCRATCHMEM_SUBTERFUGE 1
|
|
||||||
#else
|
|
||||||
# define ROM_IS_WRITE_PROTECTED 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Direct Addressing requires Video on SEGV signals */
|
|
||||||
#if DIRECT_ADDRESSING && !ENABLE_VOSF
|
|
||||||
# undef ENABLE_VOSF
|
|
||||||
# define ENABLE_VOSF 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ExtFS is supported */
|
|
||||||
#define SUPPORTS_EXTFS 1
|
|
||||||
|
|
||||||
/* BSD socket API supported */
|
|
||||||
#define SUPPORTS_UDP_TUNNEL 1
|
|
||||||
|
|
||||||
|
|
||||||
/* Data types */
|
|
||||||
typedef unsigned char uint8;
|
|
||||||
typedef signed char int8;
|
|
||||||
#if SIZEOF_SHORT == 2
|
|
||||||
typedef unsigned short uint16;
|
|
||||||
typedef short int16;
|
|
||||||
#elif SIZEOF_INT == 2
|
|
||||||
typedef unsigned int uint16;
|
|
||||||
typedef int int16;
|
|
||||||
#else
|
|
||||||
#error "No 2 byte type, you lose."
|
|
||||||
#endif
|
|
||||||
#if SIZEOF_INT == 4
|
|
||||||
typedef unsigned int uint32;
|
|
||||||
typedef int int32;
|
|
||||||
#elif SIZEOF_LONG == 4
|
|
||||||
typedef unsigned long uint32;
|
|
||||||
typedef long int32;
|
|
||||||
#else
|
|
||||||
#error "No 4 byte type, you lose."
|
|
||||||
#endif
|
|
||||||
#if SIZEOF_LONG == 8
|
|
||||||
typedef unsigned long uint64;
|
|
||||||
typedef long int64;
|
|
||||||
#define VAL64(a) (a ## l)
|
|
||||||
#define UVAL64(a) (a ## ul)
|
|
||||||
#elif SIZEOF_LONG_LONG == 8
|
|
||||||
typedef unsigned long long uint64;
|
|
||||||
typedef long long int64;
|
|
||||||
#define VAL64(a) (a ## LL)
|
|
||||||
#define UVAL64(a) (a ## uLL)
|
|
||||||
#else
|
|
||||||
#error "No 8 byte type, you lose."
|
|
||||||
#endif
|
|
||||||
#if SIZEOF_VOID_P == 4
|
|
||||||
typedef uint32 uintptr;
|
|
||||||
typedef int32 intptr;
|
|
||||||
#elif SIZEOF_VOID_P == 8
|
|
||||||
typedef uint64 uintptr;
|
|
||||||
typedef int64 intptr;
|
|
||||||
#else
|
|
||||||
#error "Unsupported size of pointer"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_LOFF_T
|
|
||||||
typedef off_t loff_t;
|
|
||||||
#endif
|
|
||||||
#ifndef HAVE_CADDR_T
|
|
||||||
typedef char * caddr_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Time data type for Time Manager emulation */
|
|
||||||
#ifdef HAVE_CLOCK_GETTIME
|
|
||||||
typedef struct timespec tm_time_t;
|
|
||||||
#elif defined(__MACH__)
|
|
||||||
typedef mach_timespec_t tm_time_t;
|
|
||||||
#else
|
|
||||||
typedef struct timeval tm_time_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define codes for all the float formats that we know of.
|
|
||||||
* Though we only handle IEEE format. */
|
|
||||||
#define UNKNOWN_FLOAT_FORMAT 0
|
|
||||||
#define IEEE_FLOAT_FORMAT 1
|
|
||||||
#define VAX_FLOAT_FORMAT 2
|
|
||||||
#define IBM_FLOAT_FORMAT 3
|
|
||||||
#define C4X_FLOAT_FORMAT 4
|
|
||||||
|
|
||||||
/* UAE CPU data types */
|
|
||||||
#define uae_s8 int8
|
|
||||||
#define uae_u8 uint8
|
|
||||||
#define uae_s16 int16
|
|
||||||
#define uae_u16 uint16
|
|
||||||
#define uae_s32 int32
|
|
||||||
#define uae_u32 uint32
|
|
||||||
#define uae_s64 int64
|
|
||||||
#define uae_u64 uint64
|
|
||||||
typedef uae_u32 uaecptr;
|
|
||||||
|
|
||||||
/* Alignment restrictions */
|
|
||||||
#if defined(__i386__) || defined(__powerpc__) || defined(__m68k__) || defined(__x86_64__)
|
|
||||||
# define CPU_CAN_ACCESS_UNALIGNED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Timing functions */
|
|
||||||
extern uint64 GetTicks_usec(void);
|
|
||||||
extern void Delay_usec(uint32 usec);
|
|
||||||
|
|
||||||
#ifdef HAVE_PTHREADS
|
|
||||||
/* Centralized pthread attribute setup */
|
|
||||||
void Set_pthread_attr(pthread_attr_t *attr, int priority);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* UAE CPU defines */
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
|
|
||||||
#ifdef CPU_CAN_ACCESS_UNALIGNED
|
|
||||||
|
|
||||||
/* Big-endian CPUs which can do unaligned accesses */
|
|
||||||
static inline uae_u32 do_get_mem_long(uae_u32 *a) {return *a;}
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {return *a;}
|
|
||||||
static inline void do_put_mem_long(uae_u32 *a, uae_u32 v) {*a = v;}
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {*a = v;}
|
|
||||||
|
|
||||||
#else /* CPU_CAN_ACCESS_UNALIGNED */
|
|
||||||
|
|
||||||
#ifdef sgi
|
|
||||||
/* The SGI MIPSPro compilers can do unaligned accesses given enough hints.
|
|
||||||
* They will automatically inline these routines. */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" { /* only the C compiler does unaligned accesses */
|
|
||||||
#endif
|
|
||||||
extern uae_u32 do_get_mem_long(uae_u32 *a);
|
|
||||||
extern uae_u32 do_get_mem_word(uae_u16 *a);
|
|
||||||
extern void do_put_mem_long(uae_u32 *a, uae_u32 v);
|
|
||||||
extern void do_put_mem_word(uae_u16 *a, uae_u32 v);
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* sgi */
|
|
||||||
|
|
||||||
/* Big-endian CPUs which can not do unaligned accesses (this is not the most efficient way to do this...) */
|
|
||||||
static inline uae_u32 do_get_mem_long(uae_u32 *a) {uint8 *b = (uint8 *)a; return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3];}
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {uint8 *b = (uint8 *)a; return (b[0] << 8) | b[1];}
|
|
||||||
static inline void do_put_mem_long(uae_u32 *a, uae_u32 v) {uint8 *b = (uint8 *)a; b[0] = v >> 24; b[1] = v >> 16; b[2] = v >> 8; b[3] = v;}
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {uint8 *b = (uint8 *)a; b[0] = v >> 8; b[1] = v;}
|
|
||||||
#endif /* sgi */
|
|
||||||
|
|
||||||
#endif /* CPU_CAN_ACCESS_UNALIGNED */
|
|
||||||
|
|
||||||
#else /* WORDS_BIGENDIAN */
|
|
||||||
|
|
||||||
#if defined(__i386__) || defined(__x86_64__)
|
|
||||||
|
|
||||||
/* Intel x86 */
|
|
||||||
#define X86_PPRO_OPT
|
|
||||||
static inline uae_u32 do_get_mem_long(uae_u32 *a) {uint32 retval; __asm__ ("bswap %0" : "=r" (retval) : "0" (*a) : "cc"); return retval;}
|
|
||||||
#ifdef X86_PPRO_OPT
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {uint32 retval; __asm__ ("movzwl %w1,%k0\n\tshll $16,%k0\n\tbswapl %k0\n" : "=&r" (retval) : "m" (*a) : "cc"); return retval;}
|
|
||||||
#else
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {uint32 retval; __asm__ ("xorl %k0,%k0\n\tmovw %w1,%w0\n\trolw $8,%w0" : "=&r" (retval) : "m" (*a) : "cc"); return retval;}
|
|
||||||
#endif
|
|
||||||
#define HAVE_GET_WORD_UNSWAPPED
|
|
||||||
#define do_get_mem_word_unswapped(a) ((uae_u32)*((uae_u16 *)(a)))
|
|
||||||
static inline void do_put_mem_long(uae_u32 *a, uae_u32 v) {__asm__ ("bswap %0" : "=r" (v) : "0" (v) : "cc"); *a = v;}
|
|
||||||
#ifdef X86_PPRO_OPT
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {__asm__ ("bswapl %0" : "=&r" (v) : "0" (v << 16) : "cc"); *a = v;}
|
|
||||||
#else
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {__asm__ ("rolw $8,%0" : "=r" (v) : "0" (v) : "cc"); *a = v;}
|
|
||||||
#endif
|
|
||||||
#define HAVE_OPTIMIZED_BYTESWAP_32
|
|
||||||
/* bswap doesn't affect condition codes */
|
|
||||||
static inline uae_u32 do_byteswap_32(uae_u32 v) {__asm__ ("bswap %0" : "=r" (v) : "0" (v)); return v;}
|
|
||||||
#define HAVE_OPTIMIZED_BYTESWAP_16
|
|
||||||
#ifdef X86_PPRO_OPT
|
|
||||||
static inline uae_u32 do_byteswap_16(uae_u32 v) {__asm__ ("bswapl %0" : "=&r" (v) : "0" (v << 16) : "cc"); return v;}
|
|
||||||
#else
|
|
||||||
static inline uae_u32 do_byteswap_16(uae_u32 v) {__asm__ ("rolw $8,%0" : "=r" (v) : "0" (v) : "cc"); return v;}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#elif defined(CPU_CAN_ACCESS_UNALIGNED)
|
|
||||||
|
|
||||||
/* Other little-endian CPUs which can do unaligned accesses */
|
|
||||||
static inline uae_u32 do_get_mem_long(uae_u32 *a) {uint32 x = *a; return (x >> 24) | (x >> 8) & 0xff00 | (x << 8) & 0xff0000 | (x << 24);}
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {uint16 x = *a; return (x >> 8) | (x << 8);}
|
|
||||||
static inline void do_put_mem_long(uae_u32 *a, uae_u32 v) {*a = (v >> 24) | (v >> 8) & 0xff00 | (v << 8) & 0xff0000 | (v << 24);}
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {*a = (v >> 8) | (v << 8);}
|
|
||||||
|
|
||||||
#else /* CPU_CAN_ACCESS_UNALIGNED */
|
|
||||||
|
|
||||||
/* Other little-endian CPUs which can not do unaligned accesses (this needs optimization) */
|
|
||||||
static inline uae_u32 do_get_mem_long(uae_u32 *a) {uint8 *b = (uint8 *)a; return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3];}
|
|
||||||
static inline uae_u32 do_get_mem_word(uae_u16 *a) {uint8 *b = (uint8 *)a; return (b[0] << 8) | b[1];}
|
|
||||||
static inline void do_put_mem_long(uae_u32 *a, uae_u32 v) {uint8 *b = (uint8 *)a; b[0] = v >> 24; b[1] = v >> 16; b[2] = v >> 8; b[3] = v;}
|
|
||||||
static inline void do_put_mem_word(uae_u16 *a, uae_u32 v) {uint8 *b = (uint8 *)a; b[0] = v >> 8; b[1] = v;}
|
|
||||||
|
|
||||||
#endif /* CPU_CAN_ACCESS_UNALIGNED */
|
|
||||||
|
|
||||||
#endif /* WORDS_BIGENDIAN */
|
|
||||||
|
|
||||||
#ifndef HAVE_OPTIMIZED_BYTESWAP_32
|
|
||||||
static inline uae_u32 do_byteswap_32(uae_u32 v)
|
|
||||||
{ return (((v >> 24) & 0xff) | ((v >> 8) & 0xff00) | ((v & 0xff) << 24) | ((v & 0xff00) << 8)); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HAVE_OPTIMIZED_BYTESWAP_16
|
|
||||||
static inline uae_u32 do_byteswap_16(uae_u32 v)
|
|
||||||
{ return (((v >> 8) & 0xff) | ((v & 0xff) << 8)); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define do_get_mem_byte(a) ((uae_u32)*((uae_u8 *)(a)))
|
|
||||||
#define do_put_mem_byte(a, v) (*(uae_u8 *)(a) = (v))
|
|
||||||
|
|
||||||
#define call_mem_get_func(func, addr) ((*func)(addr))
|
|
||||||
#define call_mem_put_func(func, addr, v) ((*func)(addr, v))
|
|
||||||
#define __inline__ inline
|
|
||||||
#define CPU_EMU_SIZE 0
|
|
||||||
#undef NO_INLINE_MEMORY_ACCESS
|
|
||||||
#undef MD_HAVE_MEM_1_FUNCS
|
|
||||||
#define ENUMDECL typedef enum
|
|
||||||
#define ENUMNAME(name) name
|
|
||||||
#define write_log printf
|
|
||||||
|
|
||||||
#if defined(X86_ASSEMBLY) || defined(X86_64_ASSEMBLY)
|
|
||||||
#define ASM_SYM_FOR_FUNC(a) __asm__(a)
|
|
||||||
#else
|
|
||||||
#define ASM_SYM_FOR_FUNC(a)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef REGPARAM
|
|
||||||
# define REGPARAM
|
|
||||||
#endif
|
|
||||||
#define REGPARAM2
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user