# This file is part of "Ported tools for HDL".
# This software is distributed under the terms of the zlib License.
# Copyright (c) 2010 molelord
# All rights reserved.

# 猫科研究所パック a007 (gcc-4.5.0 tdm-1) でのビルドを前提としたmakefile
# 猫科研究所パックについては 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 package
#
# もし、すでにunzip.exeが使える状態になっているならば、
#    make download expand all package
# として終わるまでほうっておくのが一番楽ができる。
#
# 最終的にiverilog～mingw.tar.bz2ができるので、
#    tar -x --directory=/opt -f iverilog*mingw.tar.bz2
# とすれば、/opt/iverilog/binにパスを通すだけでiverilogが使用可能な状態になる。

DEPENDED=$(PWD)/depended

ICARUS_SRC=verilog-0.9.2
ICARUS_SRC_Z=$(ICARUS_SRC).tar.gz
INSTALL_PREFIX=/opt/iverilog
PKG_NAME=i$(ICARUS_SRC)-rX-i686-pc-mingw.tar.bz2
PKG_DIR=pkg

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

all : $(ICARUS_SRC)/ivl.exe

package : all
	rm -rf $(PKG_DIR)
	mkdir -p $(PKG_DIR)
	cd $(ICARUS_SRC) && $(MAKE) DESTDIR=$(PWD)/$(PKG_DIR) install 2>&1 | tee ../install.log
	/bin/install -c -m 644 $(DEPENDED)/bin/history5.dll $(PKG_DIR)/$(INSTALL_PREFIX)/bin
	/bin/install -c -m 644 $(DEPENDED)/bin/readline5.dll $(PKG_DIR)/$(INSTALL_PREFIX)/bin
	cd $(PKG_DIR)/$(INSTALL_PREFIX) && find . -name '*.exe' -exec strip \{\} \;
	cd $(PKG_DIR)/$(INSTALL_PREFIX) && find . -name '*.dll' -exec strip \{\} \;
	cp -p ../license/gpl-2.0.txt $(PKG_DIR)/$(INSTALL_PREFIX)/COPYING
	cp -p $(ICARUS_SRC)/README.txt  $(PKG_DIR)/$(INSTALL_PREFIX)
	cd $(PKG_DIR)/opt && tar jcf ../../$(PKG_NAME) iverilog

clean :
	-rm -rf $(ICARUS_SRC) $(PKG_DIR) $(DEPENDED) *.log

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="-pipe $(CPPFLAGS_ADD) -I$(DEPENDED)/include" LDFLAGS="-L$(DEPENDED)/lib"

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

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

# 以下は、ビルド環境を構築するためのもの --------------------------------------
# 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-2-msys-1.0.13-dev.tar.lzma
GPERF_BIN_Z=gperf-3.0.1-bin.zip
LIBREGEX_DLL_Z=libregex-1.20090805-2-msys-1.0.13-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/BaseSystem/bzip2/bzip2-1.0.5-2/$@

$(LIBREGEX_DLL_Z) :
	wget $(MIRROR)/mingw/MSYS/BaseSystem/regex/regex-1.20090805-2/$@

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) \
	$(PKG_NAME)
