blob: ceb53d366b1f484dafc237ecffd78f2fed5c12cb [file] [log] [blame] [raw]
#
# TinyEMU
#
# Copyright (c) 2016-2018 Fabrice Bellard
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# if set, network filesystem is enabled. libcurl and libcrypto
# (openssl) must be installed.
#CONFIG_FS_NET=y
# SDL support (optional)
CONFIG_SDL=y
# if set, compile the 128 bit emulator. Note: the 128 bit target does
# not compile if gcc does not support the int128 type (32 bit hosts).
#CONFIG_INT128=y
# build x86 emulator
CONFIG_X86EMU=y
# win32 build (not usable yet)
#CONFIG_WIN32=y
# user space network redirector
CONFIG_SLIRP=y
ifdef CONFIG_WIN32
CROSS_PREFIX?=i686-w64-mingw32-
EXE=.exe
else
CROSS_PREFIX=
EXE=
endif
#ifeq ($(CC),cc)
#CC=$(CROSS_PREFIX)gcc
#endif
#STRIP=$(CROSS_PREFIX)strip
#CC := gcc-4.3.2
CFLAGS+=-Os -Wall -g -D _FILE_OFFSET_BITS=64 -D _LARGEFILE_SOURCE=1 -MMD
CFLAGS+=-D _GNU_SOURCE=1 -D CONFIG_VERSION=\"$(shell cat VERSION)\"
#LDFLAGS=
PREFIX ?= /usr/local
bindir=$(PREFIX)/bin
INSTALL=install
PROGS+= temu$(EXE)
ifndef CONFIG_WIN32
ifdef CONFIG_FS_NET
PROGS+=build_filelist splitimg
endif
endif
all: $(PROGS)
EMU_OBJS:=virtio.o pci.o fs.o cutils.o iomem.o simplefb.o \
json.o machine.o temu.o
ifdef CONFIG_SLIRP
CFLAGS+=-DCONFIG_SLIRP
EMU_OBJS+=$(addprefix slirp/, bootp.o ip_icmp.o mbuf.o slirp.o tcp_output.o cksum.o ip_input.o misc.o socket.o tcp_subr.o udp.o if.o ip_output.o sbuf.o tcp_input.o tcp_timer.o)
endif
ifndef CONFIG_WIN32
EMU_OBJS+=fs_disk.o
EMU_LIBS=-lrt
endif
ifdef CONFIG_SYSV
EMU_LIBS+=-lsocket -lnsl
endif
ifdef CONFIG_FS_NET
CFLAGS+=-DCONFIG_FS_NET
EMU_OBJS+=fs_net.o fs_wget.o fs_utils.o block_net.o
EMU_LIBS+=-lcurl -lcrypto
ifdef CONFIG_WIN32
EMU_LIBS+=-lwsock32
endif # CONFIG_WIN32
endif # CONFIG_FS_NET
ifdef CONFIG_SDL
EMU_LIBS+=-lSDL
EMU_OBJS+=sdl.o
CFLAGS+=-DCONFIG_SDL
ifdef CONFIG_WIN32
#LDFLAGS+=-mwindows
LDFLAGS+=-Wl,--subsystem,windows
endif
endif
EMU_OBJS+=riscv_machine.o softfp.o riscv_cpu32.o riscv_cpu64.o
ifdef CONFIG_INT128
CFLAGS+=-DCONFIG_RISCV_MAX_XLEN=128
EMU_OBJS+=riscv_cpu128.o
else
CFLAGS+=-DCONFIG_RISCV_MAX_XLEN=64
endif
ifdef CONFIG_X86EMU
CFLAGS+=-DCONFIG_X86EMU
EMU_OBJS+=x86_cpu.o x86_machine.o ide.o ps2.o vmmouse.o pckbd.o vga.o
endif
temu$(EXE): $(EMU_OBJS)
$(CC) $(LDFLAGS) -o $@ $^ $(EMU_LIBS) $(LIBS)
riscv_cpu32.o: riscv_cpu.c
$(CC) $(CFLAGS) -DMAX_XLEN=32 -c -o $@ $<
riscv_cpu64.o: riscv_cpu.c
$(CC) $(CFLAGS) -DMAX_XLEN=64 -c -o $@ $<
riscv_cpu128.o: riscv_cpu.c
$(CC) $(CFLAGS) -DMAX_XLEN=128 -c -o $@ $<
build_filelist: build_filelist.o fs_utils.o cutils.o
$(CC) $(LDFLAGS) -o $@ $^ -lm
splitimg: splitimg.o
$(CC) $(LDFLAGS) -o $@ $^
install: $(PROGS)
$(STRIP) $(PROGS)
$(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f *.o *.d *~ $(PROGS) slirp/*.o slirp/*.d slirp/*~
-include $(wildcard *.d)
-include $(wildcard slirp/*.d)