# 猫科研究所パック a004 (gcc-4.4.1-tdm) にてビルドすることを前提としたmakefile
#                        gcc-3.4.5-20060117-3であってもビルドが可能
# 猫科研究所パックについては http://up-cat.net を参照。
#
# 手順
# 1. make download
# 2. unzip-～-bin.zipに含まれるunzip.exeとunzip32.dllをパスの通ったディレクトリ
#    に展開しておく(Xilinx ISEにはunzipが含まれているので、ISEがインストール
#    済みならば不要)
# 3. make expand
# 4. make
# 5. make install
#
# もし、すでにunzip.exeが使える状態になっているならば、
#    make download expand all install
# として終わるまでほうっておくのが一番楽ができる。

ICARUS_SRC=verilog-20090923
ICARUS_SRC_Z=$(ICARUS_SRC).tar.gz
INSTALL_PREFIX=/usr/local
DEPENDED=$(PWD)/depended

#CPU_TYPEは
# http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/i386-and-x86_002d64-Options.html
# を見て自分のPCに適合するものを使うと、性能がよくなるかも
CPU_TYPE=i686
#CPU_TYPE=core2

all : $(ICARUS_SRC)/ivl.exe

install : all
	cd $(ICARUS_SRC) && $(MAKE) install 2>&1 | tee install.log
	/bin/install -c -m 644 $(DEPENDED)/bin/history5.dll $(INSTALL_PREFIX)/bin
	/bin/install -c -m 644 $(DEPENDED)/bin/readline5.dll $(INSTALL_PREFIX)/bin

clean :
	-rm -rf $(ICARUS_SRC) $(DEPENDED)

echo :
	echo $(DEPENDED)

$(ICARUS_SRC)/ivl.exe : $(ICARUS_SRC)/Makefile
	cd $(ICARUS_SRC) && PATH="$(DEPENDED)/bin:$(PATH)" $(MAKE) 2>&1 | tee make.log

$(ICARUS_SRC)/Makefile : $(ICARUS_SRC)/mark
	cd $(ICARUS_SRC) && PATH="$(DEPENDED)/bin:$(PATH)" ./configure --prefix=$(INSTALL_PREFIX) CPPFLAGS="-march=$(CPU_TYPE) -I$(DEPENDED)/include" LDFLAGS="-L$(DEPENDED)/lib"

# markは、ディレクトリが展開済みであることを示す
$(ICARUS_SRC)/mark : $(ICARUS_SRC_Z)
	tar xf $<
	cd $(@D) && patch -p1 -i ../ivl20090923.patch
	touch $@

$(ICARUS_SRC_Z) :
	wget ftp://ftp.icarus.com/pub/eda/verilog/snapshots/$@


# 以下は、ビルド環境を構築するためのもの --------------------------------------
# regexのdllはflexの実行時に必要になる

MIRROR=http://jaist.dl.sourceforge.net/project
#MIRROR=http://ncu.dl.sourceforge.net/project

UNZIP_BIN_Z=unzip-5.51-1-bin.zip
READLINE_BIN_Z=readline-5.0-1-bin.zip
LIBBZ2_DEV_Z=libbz2-1.0.5-1-msys-1.0.11-dev.tar.gz
GPERF_BIN_Z=gperf-3.0.1-bin.zip
LIBREGEX_DLL_Z=libregex-1.20090805-1-msys-1.0.11-dll-1.tar.lzma

$(UNZIP_BIN_Z) :
	wget $(MIRROR)/gnuwin32/unzip/5.51-1/$@

$(READLINE_BIN_Z) :
	wget $(MIRROR)/gnuwin32/readline/5.0-1/$@

$(GPERF_BIN_Z) :
	wget $(MIRROR)/gnuwin32/gperf/3.0.1/$@

$(LIBBZ2_DEV_Z) :
	wget $(MIRROR)/mingw/MSYS%20bzip2/bzip2-1.0.5-1/$@

$(LIBREGEX_DLL_Z) :
	wget $(MIRROR)/mingw/MSYS%20regex/regex-1.20090805-1/$@

download : $(ICARUS_SRC_Z) \
	$(UNZIP_BIN_Z) \
	$(READLINE_BIN_Z) \
	$(GPERF_BIN_Z) \
	$(LIBBZ2_DEV_Z) \
	$(LIBREGEX_DLL_Z)

# UNZIP_BIN_Zはunzipが無いと展開できないので、それはexpandの対象から外してある
# (手作業で展開する必要がある)。
expand :
	mkdir -p $(DEPENDED)
	cd $(DEPENDED) && unzip $(PWD)/$(READLINE_BIN_Z)
	cd $(DEPENDED) && unzip $(PWD)/$(GPERF_BIN_Z)
	tar -x --directory=$(DEPENDED) -f $(LIBBZ2_DEV_Z)
	tar -x --directory=$(DEPENDED) -f $(LIBREGEX_DLL_Z)

superclean : clean
	rm -f $(ICARUS_SRC_Z) \
	$(UNZIP_BIN_Z) \
	$(READLINE_BIN_Z) \
	$(GPERF_BIN_Z) \
	$(LIBBZ2_DEV_Z) \
	$(LIBREGEX_DLL_Z)
