1# Top level -*- Makefile -*- for GHDL. 2# Copyright (C) 2002 - 2014 Tristan Gingold 3# 4# This program is free software: you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation, either version 2 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <gnu.org/licenses>. 16CC=@CC@ 17CXX=@CXX@ 18build=@build@ 19srcdir=@srcdir@ 20abs_srcdir=@abs_srcdir@ 21GNATMAKE=@GNATMAKE@ 22MAKE=@MAKE@ 23prefix=@prefix@ 24backend=@backend@ 25libdirsuffix=@libdirsuffix@ 26libdirreverse=@libdirreverse@ 27EXEEXT=@EXEEXT@ 28SOEXT=@SOEXT@ 29PIC_FLAGS=@PIC_FLAGS@ 30gcc_src_dir=@gcc_src_dir@ 31LLVM_CONFIG=@llvm_config@ 32LDFLAGS=@LDFLAGS@ 33LIBBACKTRACE=@backtrace_lib@ 34llvm_be=@llvm_be@ 35build_mode=@build_mode@ 36ghdl_version=@ghdl_version@ 37libghdl_version=@libghdl_version@ 38enable_werror=@enable_werror@ 39enable_checks=@enable_checks@ 40enable_gplcompat=@enable_gplcompat@ 41enable_libghdl=@enable_libghdl@ 42default_pic=@default_pic@ 43 44INSTALL_PROGRAM=install -m 755 45INSTALL_DATA=install -m 644 46PWD?=$(shell pwd) 47DESTDIR= 48bindir=$(prefix)/bin 49libdir=$(prefix)/lib 50incdir=$(prefix)/include 51MKDIR=mkdir 52LN=ln -s 53CP=cp 54MV=mv 55SED=sed 56GRT_RANLIB=ranlib 57GHDL_DESC?=tarball 58 59VHDL_LIB_DIR=$(prefix)/$(libdirsuffix) 60 61ifeq "$(enable_checks)" "true" 62 # Debug + checks 63 OPT_FLAGS+=-g 64 ADA_FLAGS+=-gnata 65 LIB_CFLAGS+= 66else 67 # Optimize + no checks 68 ADA_FLAGS+=-gnatpn 69 OPT_FLAGS+=-O 70 LIB_CFLAGS=-O 71endif 72 73# Profiling. 74#ADA_FLAGS+=-gnatn 75#OPT_FLAGS+=-pg -O 76 77# Coverage 78ifeq "$(build_mode)" "coverage" 79OPT_FLAGS+=-fprofile-arcs -ftest-coverage 80endif 81 82GNATFLAGS=-gnat12 -gnaty3befhkmr -gnatwa -gnatwC -gnatf $(OPT_FLAGS) $(ADA_FLAGS) 83GRT_FLAGS=$(OPT_FLAGS) 84 85ifeq "$(default_pic)" "true" 86GRT_FLAGS+=$(PIC_FLAGS) 87endif 88 89WARN_CFLAGS=-Wall 90 91GNAT_BARGS=-bargs -E 92 93# Warnings as errors. Comment this line if a warning looks not valid. 94ifeq "$(enable_werror)" "true" 95GNATFLAGS+=-gnatwe 96endif 97 98target=$(build) 99#target=i686-pc-linux-gnu 100#target=x86_64-pc-linux-gnu 101#target=i686-apple-darwin 102#target=x86_64-apple-darwin 103#target=i386-pc-mingw32 104 105ifeq ($(SOEXT),.so) 106SHLIB_FLAGS=-Wl,-soname,$@ 107else ifeq ($(SOEXT),.dll) 108SHLIB_FLAGS= 109else ifeq ($(SOEXT),.dylib) 110# Allow the use of -rpath in executable 111SHLIB_FLAGS=-Wl,-install_name,@rpath/$@ 112endif 113 114# Flags for libraries 115LIBSRC_DIR:=$(srcdir)/libraries 116LIBDST_DIR:=$(libdirsuffix) 117 118LIBVHDL_FLAGS_TO_PASS=\ 119 LIBSRC_DIR="$(LIBSRC_DIR)" \ 120 LIBDST_DIR="$(LIBDST_DIR)" \ 121 enable_gplcompat="$(enable_gplcompat)" \ 122 LN="$(LN)" CP="$(CP)" MKDIR="$(MKDIR)" 123 124# Object files from grt for the synthesis. 125GRT_SYNTH_OBJS=grt-cstdio.o 126 127all: Makefile all.$(backend) all.libghdl 128 129install: install.$(backend) 130# Generate std.standard package VHDL source 131 $(DESTDIR)$(bindir)/ghdl$(EXEEXT) --disp-standard --std=87 > $(DESTDIR)$(VHDL_LIB_DIR)/src/std/v87/standard.vhdl 132 $(DESTDIR)$(bindir)/ghdl$(EXEEXT) --disp-standard --std=93 > $(DESTDIR)$(VHDL_LIB_DIR)/src/std/v93/standard.vhdl 133 $(DESTDIR)$(bindir)/ghdl$(EXEEXT) --disp-standard --std=08 > $(DESTDIR)$(VHDL_LIB_DIR)/src/std/v08/standard.vhdl 134 135uninstall: uninstall.$(backend) 136 137test: test.$(backend) 138 139copy-sources: copy-sources.$(backend) 140 141libs: libs.vhdl.$(backend) 142 143./config.status: $(srcdir)/configure 144 @if [ -e $@ ]; then \ 145 echo "./config.status --reconfigure"; \ 146 ./config.status --reconfigure; \ 147 else \ 148 echo "config.status is lost, please configure manually" ; \ 149 exit 1; \ 150 fi 151 152Makefile: $(srcdir)/Makefile.in ./config.status 153 ./config.status 154 155setup.py: $(srcdir)/setup.py.in ./config.status 156 ./config.status 157 158GHDL_COMMON_INCFLAGS=-aI$(srcdir)/src -aI$(srcdir)/src/vhdl -aI$(srcdir)/src/synth -aI$(srcdir)/src/grt -aI$(srcdir)/src/psl -aI$(srcdir)/src/vhdl/translate 159 160GRTSRCDIR=$(abs_srcdir)/src/grt 161include $(srcdir)/src/grt/Makefile.inc 162 163version.tmp: $(srcdir)/src/version.in force 164# Create version.tmp from version.in, using git date/hash, or envvars. 165 GHDL_VER_DESC=$${GHDL_VER_DESC:-tarball}; \ 166 GHDL_VER_REF=$${GHDL_VER_REF:-unknown}; \ 167 GHDL_VER_HASH=$${GHDL_VER_HASH:-unknown}; \ 168 if test -d $(srcdir)/.git && desc=`cd $(srcdir); git describe --dirty --long`; then \ 169 GHDL_VER_DESC=`echo $$desc | sed -e 's/\([^-]*-g\)/r\1/' -e 's/-/./g' -e 's/^v//g'`; \ 170 GHDL_VER_REF=`cd $(srcdir); git rev-parse --abbrev-ref HEAD`; \ 171 GHDL_VER_HASH=`cd $(srcdir); git rev-parse HEAD`; \ 172 fi; \ 173 sed \ 174 -e "s#@VER@#$(ghdl_version)#" \ 175 -e "s#@DESC@#$${GHDL_VER_DESC}#" \ 176 -e "s#@REF@#$${GHDL_VER_REF}#" \ 177 -e "s#@HASH@#$${GHDL_VER_HASH}#" \ 178 < $< > $@; 179 180version.ads: version.tmp 181# Change version.ads only if version.tmp has been modified to avoid 182# useless rebuild. 183 if [ ! -r $@ ] || ! cmp $< $@ > /dev/null; then $(CP) $< $@; fi 184 185#################### For mcode backend ############################## 186 187all.mcode: ghdl_mcode$(EXEEXT) libs.vhdl.mcode all.vpi 188 189GHDL_MCODE_INCFLAGS=$(GHDL_COMMON_INCFLAGS) -aI$(srcdir)/src/ghdldrv -aI$(srcdir)/src/ortho -aI$(srcdir)/src/ortho/mcode -aI$(srcdir)/src/synth 190 191ghdl_mcode$(EXEEXT): GRT_FLAGS+=-DWITH_GNAT_RUN_TIME 192ghdl_mcode$(EXEEXT): $(GRT_ADD_OBJS) $(GRT_SRC_DEPS) $(ORTHO_DEPS) \ 193 memsegs_c.o chkstk.o version.ads force 194 $(GNATMAKE) -o $@ -gnat12 $(GHDL_MCODE_INCFLAGS) $(GNATFLAGS) -gnatw.A ghdl_jit.adb $(GNAT_BARGS) -largs memsegs_c.o chkstk.o $(GRT_ADD_OBJS) $(LDFLAGS) $(GNAT_LARGS) $(subst @,$(GRTSRCDIR),$(GRT_EXTRA_LIB) $(GRT_EXEC_OPTS)) 195 196memsegs_c.o: $(srcdir)/src/ortho/mcode/memsegs_c.c 197 $(CC) -c $(OPT_FLAGS) -o $@ $< 198 199libs.vhdl.mcode: ghdl_mcode$(EXEEXT) 200 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_mcode$(EXEEXT) GHDL_FLAGS="" VHDL_COPY_OBJS=no vhdl.libs.all 201 202install.mcode.program: install.dirs ghdl_mcode$(EXEEXT) 203 $(INSTALL_PROGRAM) ghdl_mcode$(EXEEXT) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 204 205uninstall.mcode.program: 206 $(RM) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 207 208install.mcode: install.mcode.program install.vhdllib install.vpi install.libghdl 209 210uninstall.mcode: uninstall.mcode.program uninstall.vhdllib uninstall.vpi uninstall.libghdl 211 212test.mcode: ghdl_mcode$(EXEEXT) 213 cd $(srcdir)/testsuite; GHDL=$(CURDIR)/ghdl_mcode$(EXEEXT) ./testsuite.sh 214 215oread-mcode$(EXEEXT): force 216 $(MAKE) -f $(srcdir)/src/ortho/mcode/Makefile \ 217 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 218 GNATFLAGS="-aI$(srcdir)/src/ortho/oread $(GNATFLAGS)" all 219 220#################### For gcc backend ############################## 221 222gcc_vhdl_dir=$(gcc_src_dir)/gcc/vhdl 223 224all.gcc: 225 @echo "For installing sources in gcc, do:" 226 @echo "1) $(MAKE) copy-sources" 227 @echo "2) configure, build and install gcc" 228 @echo "3) $(MAKE) ghdllib" 229 @echo "4) $(MAKE) install" 230 231copy-sources.gcc: version.ads 232 $(RM) -rf $(gcc_vhdl_dir) 233 $(MKDIR) $(gcc_vhdl_dir) 234 $(CP) -p version.ads ghdlsynth_maybe.ads $(gcc_vhdl_dir) 235 $(CP) -p $(srcdir)/src/*.ad? $(gcc_vhdl_dir) 236 $(CP) -p $(srcdir)/src/vhdl/*.ad? $(gcc_vhdl_dir) 237 $(CP) -p $(srcdir)/src/vhdl/translate/*.ad? $(gcc_vhdl_dir) 238 $(CP) -p $(srcdir)/src/synth/*.ad? $(gcc_vhdl_dir) 239 $(CP) -p $(srcdir)/src/psl/*.ad? $(gcc_vhdl_dir) 240 $(CP) -p $(srcdir)/src/grt/grt.ad? $(gcc_vhdl_dir) 241 $(CP) -p $(srcdir)/src/grt/grt-types.ads $(gcc_vhdl_dir) 242 $(CP) -p $(srcdir)/src/grt/grt-c.ad? $(gcc_vhdl_dir) 243 $(CP) -p $(srcdir)/src/grt/grt-fcvt.ad? $(gcc_vhdl_dir) 244 $(CP) -p $(srcdir)/src/grt/grt-algos.ad? $(gcc_vhdl_dir) 245 $(CP) -p $(srcdir)/src/grt/grt-vstrings.ad? $(gcc_vhdl_dir) 246 $(CP) -p $(srcdir)/src/grt/grt-cstdio.c $(gcc_vhdl_dir) 247 $(CP) -p $(srcdir)/src/grt/grt-stdio.ad? $(gcc_vhdl_dir) 248 $(CP) -p $(srcdir)/src/grt/grt-table.ad? $(gcc_vhdl_dir) 249 $(CP) -p $(srcdir)/src/grt/grt-files_operations.ad? $(gcc_vhdl_dir) 250 $(CP) -p $(srcdir)/src/grt/grt-to_strings.ad? $(gcc_vhdl_dir) 251 $(CP) -p $(srcdir)/src/grt/grt-severity.ads $(gcc_vhdl_dir) 252 $(CP) -p $(srcdir)/src/ortho/*.ad? $(gcc_vhdl_dir) 253 $(CP) -p $(srcdir)/src/ortho/gcc/*.ad? $(gcc_vhdl_dir) 254 $(CP) -p $(srcdir)/src/ortho/gcc/*.c $(gcc_vhdl_dir) 255 $(CP) -p $(srcdir)/src/ortho/gcc/*.opt $(gcc_vhdl_dir) 256 base_ver=`cat $(gcc_src_dir)/gcc/BASE-VER`; \ 257 case $$base_ver in \ 258 4.9*) gcc_ortho_lang=ortho-lang-49.c ;; \ 259 5.*) gcc_ortho_lang=ortho-lang-5.c ;; \ 260 6 | 6.*) gcc_ortho_lang=ortho-lang-6.c ;; \ 261 7.*) gcc_ortho_lang=ortho-lang-7.c ;; \ 262 8.*) gcc_ortho_lang=ortho-lang-8.c ;; \ 263 9.*) gcc_ortho_lang=ortho-lang-9.c ;; \ 264 10.*) gcc_ortho_lang=ortho-lang-9.c ;; \ 265 *) echo "Mismatch gcc version from $(gcc_src_dir)"; \ 266 echo "Need gcc version 4.9.x, 5.x, 6.x, 7.x, 8.x, 9.x or 10.x"; \ 267 exit 1 ;; \ 268 esac; \ 269 $(CP) -p $(srcdir)/src/ortho/gcc/$$gcc_ortho_lang \ 270 $(gcc_vhdl_dir)/ortho-lang.c 271 $(CP) -p $(srcdir)/doc/ghdl.texi $(srcdir)/doc/ghdl.1 $(gcc_vhdl_dir) 272 $(MKDIR) $(gcc_vhdl_dir)/ghdldrv 273 $(CP) -pR $(srcdir)/src/ghdldrv/*.ad? $(gcc_vhdl_dir)/ghdldrv 274 $(CP) -p $(srcdir)/scripts/gcc/Make-lang.in $(gcc_vhdl_dir) 275 $(CP) -p $(srcdir)/scripts/gcc/config-lang.in $(gcc_vhdl_dir) 276 $(CP) -p $(srcdir)/scripts/gcc/lang-options.h $(gcc_vhdl_dir) 277 $(CP) -p $(srcdir)/scripts/gcc/lang-specs.h $(gcc_vhdl_dir) 278 279# To build vhdl libs using a non-installed ghdl, define GHDL_GCC_BIN to the 280# path of ghdl and GHDL1_GCC_BIN to path of ghdl1 281GHDL_GCC_BIN=$(DESTDIR)$(bindir)/ghdl$(EXEEXT) 282GHDL1_GCC_BIN= # --GHDL1=/path/to/ghdl1 283 284libs.vhdl.gcc: 285 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL="$(GHDL_GCC_BIN)" GHDL_FLAGS="$(GHDL1_GCC_BIN) $(LIB_CFLAGS)" vhdl.libs.all libs.vhdl.standard 286 287ghdllib: libs.vhdl.gcc $(libdirsuffix)/libgrt.a all.libghdl 288 289install.gcc: install.vhdllib install.grt install.vpi install.libghdl 290 291uninstall.gcc: uninstall.vhdllib uninstall.grt uninstall.vpi uninstall.libghdl 292 293test.gcc: 294 cd $(srcdir)/testsuite; GHDL=$(GHDL_GCC_BIN) ./testsuite.sh 295 296#################### For gcc backend - development only (local build) #### 297 298GHDL_GCC_INCFLAGS=$(GHDL_COMMON_INCFLAGS) 299 300ghdl1-gcc$(EXEEXT): version.ads force 301 $(MAKE) -f $(srcdir)/src/ortho/gcc/Makefile \ 302 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 303 GNATFLAGS="$(GHDL_GCC_INCFLAGS) $(GNATFLAGS)" all 304 305ghdl_gcc$(EXEEXT): version.ads $(GRT_SYNTH_OBJS) force 306 $(GNATMAKE) $(GHDL_GCC_INCFLAGS) -aI$(srcdir)/src/ghdldrv \ 307 $(GNATFLAGS) ghdl_gcc $(GNAT_BARGS) \ 308 -largs $(GRT_SYNTH_OBJS) $(GNAT_LARGS) 309 310libs.vhdl.local_gcc: ghdl_gcc$(EXEEXT) ghdl1-gcc$(EXEEXT) 311 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_gcc$(EXEEXT) GHDL_FLAGS="--GHDL1=$(PWD)/ghdl1-gcc$(EXEEXT) $(LIB_CFLAGS)" vhdl.libs.all libs.vhdl.standard 312 313ghdl1-debug$(EXEEXT): version.ads force 314 $(MAKE) -f $(srcdir)/src/ortho/debug/Makefile \ 315 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 316 GNATFLAGS="$(GHDL_GCC_INCFLAGS) $(GNATFLAGS)" \ 317 GNATMAKE="$(GNATMAKE)" all 318 319oread-gcc$(EXEEXT): force 320 $(MAKE) -f $(srcdir)/src/ortho/gcc/Makefile \ 321 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 322 GNATFLAGS="-aI$(srcdir)/src/ortho/oread $(GNATFLAGS)" all 323 324#################### For llvm backend ############################## 325 326GHDL_LLVM_INCFLAGS=$(GHDL_COMMON_INCFLAGS) -aI$(srcdir)/src/ghdldrv -aI$(srcdir)/src/ortho -aI$(srcdir)/src/ortho/$(llvm_be) -aI$(srcdir)/src/synth 327 328all.llvm: ghdl1-llvm$(EXEEXT) ghdl_llvm$(EXEEXT) grt-all libs.vhdl.llvm all.vpi 329 330all.llvm_jit: ghdl_llvm_jit$(EXEEXT) 331 332ghdl_llvm_jit$(EXEEXT): GRT_FLAGS+=-DWITH_GNAT_RUN_TIME 333ghdl_llvm_jit$(EXEEXT): $(GRT_ADD_OBJS) $(GRT_SRC_DEPS) $(ORTHO_DEPS) \ 334 llvm-cbindings.o version.ads force 335 $(GNATMAKE) -o $@ $(GHDL_LLVM_INCFLAGS) $(GNATFLAGS) ghdl_jit.adb \ 336 $(GNAT_BARGS) -largs llvm-cbindings.o $(GNAT_LARGS) $(GRT_ADD_OBJS) \ 337 $(subst @,$(GRTSRCDIR),$(GRT_EXTRA_LIB)) --LINK=$(CXX) \ 338 `$(LLVM_CONFIG) --ldflags --libs --system-libs` $(LDFLAGS) 339 340llvm-cbindings.o: $(srcdir)/src/ortho/$(llvm_be)/llvm-cbindings.cpp 341 $(CXX) -c `$(LLVM_CONFIG) --includedir --cxxflags` \ 342 $(OPT_FLAGS) -o $@ $< 343 344libs.vhdl.llvmjit: ghdl_llvm_jit$(EXEEXT) 345 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_llvm$(EXEEXT) GHDL_FLAGS="" VHDLLIBS_COPY_OBJS=no vhdl.libs.all 346 347libs.vhdl.llvm: ghdl_llvm$(EXEEXT) ghdl1-llvm$(EXEEXT) 348 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_llvm$(EXEEXT) GHDL_FLAGS="--GHDL1=$(PWD)/ghdl1-llvm$(EXEEXT) $(LIB_CFLAGS)" vhdl.libs.all libs.vhdl.standard 349 350libs.vhdl.debug-llvm: ghdl_llvm$(EXEEXT) ghdl1-debug$(EXEEXT) 351 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_llvm$(EXEEXT) GHDL_FLAGS="--GHDL1=$(PWD)/ghdl1-debug$(EXEEXT) $(LIB_CFLAGS)" vhdl.libs.all libs.vhdl.standard 352 353ghdl_llvm$(EXEEXT): version.ads $(GRT_SYNTH_OBJS) force 354 $(GNATMAKE) $(GHDL_LLVM_INCFLAGS) \ 355 -aI$(srcdir)/src/ghdldrv $(GNATFLAGS) \ 356 ghdl_llvm $(GNAT_BARGS) \ 357 -largs $(LDFLAGS) $(GRT_SYNTH_OBJS) $(GNAT_LARGS) 358 359ghdl1-llvm$(EXEEXT): version.ads force 360 $(MAKE) -f $(srcdir)/src/ortho/$(llvm_be)/Makefile \ 361 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 362 GNATFLAGS="$(GHDL_LLVM_INCFLAGS) $(GNATFLAGS)" LDFLAGS="$(LDFLAGS)" \ 363 LLVM_CONFIG="$(LLVM_CONFIG)" CXX="$(CXX)" \ 364 CFLAGS="$(WARN_FLAGS) $(OPT_FLAGS)" \ 365 GNATMAKE="$(GNATMAKE)" all 366 367oread-llvm$(EXEEXT): force 368 $(MAKE) -f $(srcdir)/src/ortho/$(llvm_be)/Makefile \ 369 ortho_srcdir=$(srcdir)/src/ortho ortho_exec=$@ \ 370 GNATMAKE="$(GNATMAKE)" \ 371 GNATFLAGS="-aI$(srcdir)/src/ortho/oread $(GNATFLAGS)" \ 372 LLVM_CONFIG="$(LLVM_CONFIG)" CXX="$(CXX)" 373 374install.llvm.program: install.dirs ghdl1-llvm$(EXEEXT) ghdl_llvm$(EXEEXT) 375 $(INSTALL_PROGRAM) ghdl_llvm$(EXEEXT) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 376 $(INSTALL_PROGRAM) ghdl1-llvm$(EXEEXT) $(DESTDIR)$(bindir)/ghdl1-llvm$(EXEEXT) 377 378test.llvm: ghdl_llvm$(EXEEXT) 379 cd $(srcdir)/testsuite; GHDL=$(CURDIR)/ghdl_llvm$(EXEEXT) ./testsuite.sh 380 381uninstall.llvm.program: 382 $(RM) $(DESTDIR)$(bindir)/ghdl1-llvm$(EXEEXT) 383 $(RM) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 384 385install.llvm: install.llvm.program install.vhdllib install.grt install.vpi install.libghdl 386 387uninstall.llvm: uninstall.llvm.program uninstall.vhdllib uninstall.grt uninstall.vpi uninstall.libghdl 388 389################ For simul (no code generation, interpretation) ########## 390 391GHDL_SIMUL_INCFLAGS=$(GHDL_COMMON_INCFLAGS) -aI$(srcdir)/src/ghdldrv -aI$(srcdir)/src/vhdl/simulate -aI$(srcdir)/src/synth 392 393ghdl_simul$(EXEEXT): $(GRT_ADD_OBJS) $(GRT_SRC_DEPS) version.ads force 394 $(GNATMAKE) $(GHDL_SIMUL_INCFLAGS) $(GNATFLAGS) -gnat12 ghdl_simul $(GNAT_BARGS) -largs $(GNAT_LARGS) $(GRT_ADD_OBJS) $(subst @,$(GRTSRCDIR),$(GRT_EXTRA_LIB)) 395 396libs.vhdl.simul: ghdl_simul$(EXEEXT) 397 $(MAKE) -f $(srcdir)/libraries/Makefile.inc $(LIBVHDL_FLAGS_TO_PASS) GHDL=$(PWD)/ghdl_simul$(EXEEXT) GHDL_FLAGS="" VHDLLIBS_COPY_OBJS=no vhdl.libs.all 398 399install.simul.program: install.dirs ghdl_simul$(EXEEXT) 400 $(INSTALL_PROGRAM) ghdl_simul$(EXEEXT) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 401 402uninstall.simul.program: 403 $(RM) $(DESTDIR)$(bindir)/ghdl$(EXEEXT) 404 405install.simul: install.simul.program install.vhdllib 406 407uninstall.simul: uninstall.simul.program uninstall.vhdllib 408 409 410################ libghdl (library for the vhdl part) #################### 411 412LIBGHDL_INCFLAGS=$(GHDL_COMMON_INCFLAGS) -aI$(srcdir)/src/synth -aI$(srcdir)/src/vhdl/libghdl -aI$(srcdir)/src/ghdldrv 413 414libghdl_name=libghdl-$(libghdl_version)$(SOEXT) 415 416LIBGHDL_GRT_OBJS= pic/grt-cstdio.o 417 418$(libghdl_name): $(GRT_SRC_DEPS) $(LIBGHDL_GRT_OBJS) version.ads force 419# Use -g for gnatlink so that the binder file is not removed. We need 420# it for libghdl.a 421 $(GNATMAKE) -I- -aI. -D pic -z libghdl -o $@ -gnat12 $(GNATFLAGS) $(PIC_FLAGS) $(LIBGHDL_INCFLAGS) -bargs -shared -Llibghdl_ -largs -g -shared $(SHLIB_FLAGS) $(LIBGHDL_GRT_OBJS) 422# On windows, gnatmake (via Osint.Executable_Name) always appends .exe 423# Adjust. (Other solution: use gnatmake for compilation and binding, 424# then use gnatlink directly for linking). 425ifeq ($(SOEXT),.dll) 426 -mv $(libghdl_name).exe $(libghdl_name) 427endif 428 429libghdl.a: $(libghdl_name) 430# Also create a static library 431 sed -e '1,/-- BEGIN/d' -e '/-- END/,$$d' -e 's/^ -- //' < b~libghdl.adb > libghdl.bind 432 $(RM) -f $@ 433 ar rc $@ b~libghdl.o $(LIBGHDL_GRT_OBJS) `sed -e /^-/d < libghdl.bind` 434 grep adalib libghdl.bind | sed -e 's/^-L//' -e 's@adalib/@adalib/libgnat.a@' > libghdl.link 435 436$(srcdir)/src/synth/ghdlsynth_gates.h: $(srcdir)/src/synth/netlists.ads $(srcdir)/src/synth/netlists-gates.ads 437 echo "/* DO NOT MODIFY" > $@ 438 echo " This file is automatically generated by Makefile. */" >> $@ 439 echo "enum Module_Id {" >> $@ 440 grep -h "constant Module_Id :=" $^ | sed -e '/constant Module_Id :=/s/:.*://' -e 's/;/,/' -e 's/ *--.*//' >> $@ 441 echo "};" >> $@ 442 echo "" >> $@ 443 echo "enum Param_Type {" >> $@ 444 grep ' Param_' $(srcdir)/src/synth/netlists.ads >> $@ 445 echo "};" >> $@ 446 447all.libghdl.true: $(libghdl_name) libghdl.a 448all.libghdl.false: 449all.libghdl: all.libghdl.$(enable_libghdl) 450 451install.libghdl.include: install.dirs $(srcdir)/src/synth/ghdlsynth_gates.h 452 $(INSTALL_DATA) -p $(srcdir)/src/synth/ghdlsynth.h $(DESTDIR)$(incdir)/ 453 $(INSTALL_DATA) -p $(srcdir)/src/synth/ghdlsynth_gates.h $(DESTDIR)$(incdir)/ 454 455install.libghdl.lib: 456 $(INSTALL_PROGRAM) -p $(libghdl_name) $(DESTDIR)$(libdir)/ 457 $(INSTALL_PROGRAM) -p libghdl.a $(DESTDIR)$(libdir)/ 458 $(INSTALL_DATA) -p libghdl.link $(DESTDIR)$(libdir)/ 459 460install.libghdl.true: install.libghdl.lib install.libghdl.include 461 462install.libghdl.false: 463install.libghdl: install.libghdl.$(enable_libghdl) 464 465uninstall.libghdl: 466 $(RM) $(DESTDIR)$(libdir)/$(libghdl_name) 467 468libghdl-py.tgz: 469 [ -d pythonb ] || $(MKDIR) pythonb 470 $(CP) -r $(srcdir)/pyGHDL/libghdl $(srcdir)/setup.py pythonb 471 tar -zcvf $@ -C pythonb . 472 473################ ghwdump ################################################# 474 475GHWDUMP_OBJS=ghwdump.o ghwlib.o 476 477ghwdump: $(GHWDUMP_OBJS) 478 $(CC) -o $@ $(GHWDUMP_OBJS) 479 480ghwdump.o: $(srcdir)/src/grt/ghwdump.c $(srcdir)/src/grt/ghwlib.h 481 $(CC) -c -o $@ $< $(OPT_FLAGS) $(WARN_CFLAGS) 482 483ghwlib.o: $(srcdir)/src/grt/ghwlib.c $(srcdir)/src/grt/ghwlib.h 484 $(CC) -c -o $@ $< $(OPT_FLAGS) $(WARN_CFLAGS) 485 486############### grt ##################################################### 487 488install.grt: \ 489 $(libdirsuffix)/libgrt.a \ 490 $(libdirsuffix)/grt.lst \ 491 $(libdirsuffix)/grt-exec.lst \ 492 $(libdirsuffix)/grt-shared.lst \ 493 install.dirs 494 $(INSTALL_DATA) $(libdirsuffix)/libgrt.a $(DESTDIR)$(VHDL_LIB_DIR)/libgrt.a 495 $(INSTALL_DATA) $(libdirsuffix)/grt.lst $(DESTDIR)$(VHDL_LIB_DIR)/grt.lst 496 $(INSTALL_DATA) $(libdirsuffix)/grt-exec.lst $(DESTDIR)$(VHDL_LIB_DIR)/grt-exec.lst 497 $(INSTALL_DATA) $(libdirsuffix)/grt-shared.lst $(DESTDIR)$(VHDL_LIB_DIR)/grt-shared.lst 498 $(INSTALL_DATA) $(GRTSRCDIR)/grt.ver $(DESTDIR)$(VHDL_LIB_DIR)/grt.ver 499 test "x$(LIBBACKTRACE)" = x || test "x$(backend)" = xgcc || \ 500 $(INSTALL_DATA) $(LIBBACKTRACE) $(DESTDIR)$(VHDL_LIB_DIR)/libbacktrace.a 501 502uninstall.grt: 503 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/libgrt.a 504 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/grt.lst 505 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/grt-exec.lst 506 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/grt-shared.lst 507 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/grt.ver 508 $(RM) $(DESTDIR)$(VHDL_LIB_DIR)/libbacktrace.a 509 510################ VPI ##################################################### 511 512vpi_thunk.o: $(GRTSRCDIR)/vpi_thunk.c $(GRTSRCDIR)/vpi_thunk.h 513# Do not use OPT_FLAGS (do not enable coverage) 514 $(CC) -c -o $@ $< $(PIC_FLAGS) -O $(WARN_CFLAGS) 515 516libghdlvpi$(SOEXT): vpi_thunk.o 517 $(CC) -o $@ $< -shared $(SHLIB_FLAGS) 518 519all.vpi: libghdlvpi$(SOEXT) 520 521install.vpi: all.vpi install.dirs 522 $(INSTALL_PROGRAM) -p libghdlvpi$(SOEXT) $(DESTDIR)$(libdir)/ 523 $(INSTALL_DATA) -p $(GRTSRCDIR)/vpi_user.h $(DESTDIR)$(incdir)/ 524 525uninstall.vpi: 526 $(RM) -f $(DESTDIR)$(libdir)/libghdlvpi$(SOEXT) 527 $(RM) -f $(DESTDIR)$(incdir)/vpi_user.h 528 529install.vpi.local: all.vpi 530 $(MKDIR) -p include lib 531 $(INSTALL_DATA) -p $(GRTSRCDIR)/vpi_user.h include/ 532 $(INSTALL_PROGRAM) -p libghdlvpi$(SOEXT) lib/ 533 534################ Libraries ############################################### 535 536VHDLLIB_SUBDIRS= \ 537 ieee/v87 \ 538 ieee/v93 \ 539 ieee/v08 \ 540 std/v87 \ 541 std/v93 \ 542 std/v08 \ 543 src/ieee \ 544 src/ieee/v87 \ 545 src/ieee/v93 \ 546 src/ieee2008 \ 547 src/std \ 548 src/std/v87 \ 549 src/std/v93 \ 550 src/std/v08 \ 551 src/synopsys \ 552 src/synopsys/v08 \ 553 src/upf 554 555ifeq ($(enable_gplcompat),false) 556VHDLLIB_SUBDIRS+=src/vital95 src/vital2000 557endif 558 559install.dirs: 560# Use -p to create parents and to avoid error if existing. 561 $(MKDIR) -p $(DESTDIR)$(prefix) 562 $(MKDIR) -p $(DESTDIR)$(bindir) 563 $(MKDIR) -p $(DESTDIR)$(libdir) 564 $(MKDIR) -p $(DESTDIR)$(prefix)/$(libdirsuffix) 565 $(MKDIR) -p $(DESTDIR)$(incdir) 566 567install.vhdllib: install.dirs 568# Libraries (only if not empty) 569 for d in $(VHDLLIB_SUBDIRS); do \ 570 $(MKDIR) -p $(DESTDIR)$(VHDL_LIB_DIR)/$$d; \ 571 $(INSTALL_DATA) -p \ 572 $(LIBDST_DIR)/$$d/* $(DESTDIR)$(VHDL_LIB_DIR)/$$d; \ 573 done 574# ANSI color 575 $(INSTALL_DATA) -p \ 576 $(srcdir)/scripts/ansi_color.sh $(DESTDIR)$(VHDL_LIB_DIR)/; 577# Vendors scripts 578 $(MKDIR) -p $(DESTDIR)$(VHDL_LIB_DIR)/vendors 579 $(INSTALL_DATA) -p \ 580 $(srcdir)/scripts/vendors/* $(DESTDIR)$(VHDL_LIB_DIR)/vendors/ 581 $(INSTALL_PROGRAM) -p \ 582 $(srcdir)/scripts/vendors/*.sh $(DESTDIR)$(VHDL_LIB_DIR)/vendors/ 583 584uninstall.vhdllib: 585 $(RM) -rf $(DESTDIR)$(VHDL_LIB_DIR) 586 587####################### clean ############################################ 588 589clean: force 590 $(RM) -f *.o *.ali b~*.ad? *~ *.d b__*.ad? *.a *.so *.deps *.bexch version.* *.dll *.dylib 591 $(RM) -f ghdl_gcc$(EXEEXT) ghdl_mcode$(EXEEXT) ghdl$(EXEEXT) ghdl_llvm$(EXEEXT) ghdl_llvm_jit$(EXEEXT) ghdl_simul$(EXEEXT) 592 $(RM) -f ghdl1-gcc$(EXEEXT) ghdl1-llvm$(EXEEXT) ghdl1-debug$(EXEEXT) 593 $(RM) -f grt/run-bind.ad? grt.lst grt/grt-files grt/grt-files.in 594 $(RM) -f grt/*.o grt/*.ali 595 $(RM) -rf lib 596 $(MAKE) create-dirs 597 598distclean: clean 599 $(RM) -f default_paths.ads ortho_code-x86-flags.ads 600 $(RM) -f grt/grt-backtrace-impl.ads 601 $(RM) -f Makefile config.status ghdl.gpr 602 603clean-c: force 604 $(RM) -f memsegs_c.o chkstk.o jumps.o times.o 605 $(RM) -f grt-cstdio.o grt-cgnatrts.o grt-modules.o 606 $(RM) -f grt-cvpi.o grt-cdynload.o 607 $(RM) -f fstapi.o fastlz.o lz4.o 608 $(RM) -f pic/times.o pic/grt-cvpi.o pic/jumps.o 609 $(RM) -f pic/grt-cstdio.o pic/grt-cgnatrts.o pic/grt-modules.o 610 $(RM) -f pic/grt-cdynload.o 611 612create-dirs: force 613 for d in $(VHDLLIB_SUBDIRS); do \ 614 $(MKDIR) -p $(LIBDST_DIR)/$$d; \ 615 done 616 617# Remove non GPL compatible source files 618clean-pure-gpl: 619# Vital libraries aren't GPL compatible 620 $(RM) -rf libraries/vital95 libraries/vital2000 621# The GNA testsuite contains open-source reproducer that may not be GPL. 622 $(RM) -rf testsuite/gna 623 624force: 625 626.PHONY: force clean distclean clean-c clean-pure-gpl 627 628# Most of the compilation is done through gnatmake, so using make -jX it not 629# very effective. 630# Hint: for parallel build use: make GNATMAKE="gnatmake -j8" 631# Parallel builds may fail with the llvm backend as it can start two gnatmake 632# in parallel: one for ghdl_llvm and the other for ghdl1-llvm. But they 633# share the same objects. 634# Any better fix is welcome! 635.NOTPARALLEL: 636