Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Top level -*- makefile -*- fragment for Cobol
# Copyright (C) 2016 Free Software Foundation, Inc.
# This file is part of GCC.
# GCC 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 3, or (at your option)
# any later version.
# GCC 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 GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
# foo.install-html, foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
#
# It should also provide rules for:
#
# - making any compiler driver (eg: g++)
# - the compiler proper (eg: cc1plus)
# - define the names for selecting the language in LANGUAGES.
ifeq ("$(USER)","bob")
MAX_ERRORS := -fmax-errors=1
endif
gcobol_INSTALL_NAME := $(shell echo gcobol|sed '$(program_transform_name)')
gcobol_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcobol|sed '$(program_transform_name)')
cobol: cobol1$(exeext)
.PHONY: cobol
BINCLUDE ?= ./gcc
LIB_INCLUDE ?= $(srcdir)/../libgcobol

rdubner
committed
LIB_SOURCE ?= $(srcdir)/../libgcobol
#
# At this point, as of 2022-10-21, CPPFLAGS is an empty string and can be
# altered. CFLAGS and CXXFLAGS are being established upstream, and thus
# cannot, at this point, be changed.
#
CPPFLAGS = \
-std=c++17 \
$(MAX_ERRORS) \
-Iinclude \
-I$(BINCLUDE) \
-Wno-cpp \
-Wno-missing-field-initializers \
-DEXEC_LIB=\"$(DESTDIR)$(libdir)\"
$(END)
YACC = bison
YFLAGS = -Werror -Wmidrule-values -Wno-yacc \
LEX = flex
LFLAGS = -d -Ca
#
# These are the object files for creating the cobol1.exe compiler:
#
cobol_one_OBJS = \
cobol/cdf.o \
cobol/cdf-copy.o \
cobol/cobol1.o \
cobol/convert.o \
cobol/except.o \
cobol/genutil.o \
cobol/genapi.o \
cobol/genmath.o \
cobol/gengen.o \
cobol/lexio.o \
cobol/parse.o \
cobol/scan.o \
cobol/structs.o \
cobol/symbols.o \
cobol/symfind.o \
cobol/util.o \

rdubner
committed
cobol/charmaps-dupe.o \
cobol/valconv-dupe.o \
$(END)
#
# There is source code in libgcobol/charmaps.cc and libgcobol/valconv.cc
# that needs to be compiled into both libgcobol and cobol1. The following
# recipes make copies of those two source code files from libgcobol to here in
# the gcc/cobol build tree. This avoids the nightmare of one file appearing in
# more than one place.

rdubner
committed
$(srcdir)/cobol/charmaps-dupe.cc: $(LIB_SOURCE)/charmaps.cc
echo "// DO NOT EDIT THIS FILE. It was copied from the libgcobol directory." > $@

rdubner
committed
$(srcdir)/cobol/valconv-dupe.cc: $(LIB_SOURCE)/valconv.cc
echo "// DO NOT EDIT THIS FILE. It was copied from the libgcobol directory." > $@
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#
# These are the object files for creating the gcobol.exe "driver"
#
GCOBOL_D_OBJS = $(GCC_OBJS) cobol/gcobolspec.o
#
# These get combined to provide a dependency relationship that ensures all
# of the "generated-files" are generated before we need them. See the root
# Makefile.in code that looks like this:
# ALL_HOST_FRONTEND_OBJS = $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
#
cobol_OBJS = \
$(cobol_one_OBJS) \
cobol/gcobolspec.o \
$(END)
#
# Frankly, I can't figure out what this does:
#
CFLAGS-cobol/gcobolspec.o += $(DRIVER_DEFINES)
#
# This controls the build of the gcobol.exe "driver"
#
gcobol$(exeext): \
$(GCOBOL_D_OBJS) \
$(EXTRA_GCC_OBJS) \
libcommon-target.a \
$(LIBDEPS)
+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
$(GCOBOL_D_OBJS) $(EXTRA_GCC_OBJS) libcommon-target.a \
$(EXTRA_GCC_LIBS) $(LIBS)
#
# These control the build of the cobol1.exe source-to-GENERIC converter
#
# First, files needed for parsing:
# To establish prerequisites for parse.o, cdf.o, and scan.o,
# 1. capture the "make -n" output
# 2. eliminate compiler options, leaving only preprocessor options (-D and -I)
# 3. add -E -MM
#
# The below lists of include files for the the generated files is
# postprocessed: the files are one per line, used "realpath
# --relative-to=$PWD" to rationalize them, and sorted. We include
# parse.c in the list for scan.o because that's the one make(1) knows about.
cobol/parse.c: cobol/parse.y
$(YACC) -o $@ $(YFLAGS) \
--defines=cobol/parse.h \
--report-file=cobol/parser.out $<
$(YACC) -o $@ $(YFLAGS) \
--defines=cobol/cdf.h --report-file=cobol/cdf.out $<
# See "Trailing context is getting confused with trailing optional patterns"
# in Flex manual. We suppress those messages, as a convenience.
FLEX_WARNING = warning, dangerous trailing context
$(LEX) -o$@ $(LFLAGS) $< >$@~ 2>&1
awk '! /$(FLEX_WARNING)/ {print > "/dev/stderr"; nerr++} \
END {print "$(LEX):", NR, "messages" > "/dev/stderr"; \
cobol/cdf.o: cobol/cdf.c \
$(srcdir)/cobol/cbldiag.h \
$(srcdir)/cobol/cdfval.h \
$(srcdir)/cobol/copybook.h \
$(srcdir)/cobol/symbols.h \
$(srcdir)/cobol/util.h \
$(srcdir)/../libgcobol/common-defs.h \
$(srcdir)/../libgcobol/ec.h \
$(srcdir)/../libgcobol/exceptl.h
cobol/parse.o: cobol/parse.c \
$(srcdir)/cobol/cbldiag.h \
$(srcdir)/cobol/cdfval.h \
$(srcdir)/cobol/cobol-system.h \
$(srcdir)/cobol/exceptg.h \
$(srcdir)/cobol/genapi.h \
$(srcdir)/cobol/inspect.h \
$(srcdir)/cobol/parse_ante.h \
$(srcdir)/cobol/parse_util.h \
$(srcdir)/cobol/symbols.h \
$(srcdir)/cobol/util.h \
$(srcdir)/hwint.h \
$(srcdir)/system.h \
$(srcdir)/../include/ansidecl.h \
$(srcdir)/../include/filenames.h \
$(srcdir)/../include/hashtab.h \
$(srcdir)/../include/libiberty.h \
$(srcdir)/../include/safe-ctype.h \
$(srcdir)/../libgcobol/common-defs.h \
$(srcdir)/../libgcobol/ec.h \
$(srcdir)/../libgcobol/exceptl.h \
$(srcdir)/../libgcobol/io.h \
cobol/scan.o: cobol/scan.c \
$(srcdir)/cobol/cbldiag.h \
$(srcdir)/cobol/cdfval.h \
$(srcdir)/cobol/cobol-system.h \
$(srcdir)/cobol/copybook.h \
$(srcdir)/cobol/dts.h \
$(srcdir)/cobol/inspect.h \
$(srcdir)/cobol/lexio.h \
$(srcdir)/cobol/scan_ante.h \
$(srcdir)/cobol/scan_post.h \
$(srcdir)/cobol/symbols.h \
$(srcdir)/cobol/util.h \
$(srcdir)/hwint.h \
$(srcdir)/system.h \
$(srcdir)/../include/ansidecl.h \
$(srcdir)/../include/filenames.h \
$(srcdir)/../include/hashtab.h \
$(srcdir)/../include/libiberty.h \
$(srcdir)/../include/safe-ctype.h \
$(srcdir)/../libgcobol/common-defs.h \
$(srcdir)/../libgcobol/ec.h \
$(srcdir)/../libgcobol/exceptl.h \
$(srcdir)/../libgcobol/io.h \
config.h \
cobol/cdf.c \
cobol/parse.c
# And the cobol1.exe front end

rdubner
committed
cobol1$(exeext): $(cobol_one_OBJS) $(BACKEND) $(LIBDEPS) attribs.o
+$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) attribs.o -o $@ \
$(cobol_one_OBJS) $(BACKEND) $(LIBS) $(BACKENDLIBS)
# FIXME
cobol.all.cross:
cobol.start.encap: gcobol$(exeext)
cobol.rest.encap:
cobol.install-common: installdirs
$(INSTALL_PROGRAM) gcobol$(exeext) $(DESTDIR)$(bindir)/$(gcobol_INSTALL_NAME)$(exeext)
$(INSTALL) -m 755 $(srcdir)/cobol/gcobc $(DESTDIR)$(bindir)/
mkdir -p $(DESTDIR)$(bindir)/udf/
$(INSTALL_DATA) $(srcdir)/cobol/udf/* $(DESTDIR)$(datadir)/cobol/udf
cobol.install-man: installdirs
$(INSTALL_DATA) $(srcdir)/cobol/gcobol.1 $(DESTDIR)$(man1dir)/
$(INSTALL_DATA) $(srcdir)/cobol/gcobol.3 $(DESTDIR)$(man3dir)/
cobol.install-info:
cobol.install-pdf:
cobol.install-plugin:
cobol.install-html:
cobol.info:
cobol.dvi:
cobol.pdf:
cobol.html:
cobol.uninstall:
-rm -f gcobol$(exeext) cobol1$(exeext)
-rm -f $(cobol_OBJS)
cobol.man:
cobol.mostlyclean:
cobol.clean:
rm -fr cobol1 cobol/* \
../*/libgcobol/* \

rdubner
committed
$(srcdir)/cobol/charmaps-dupe.cc \
$(srcdir)/cobol/valconv-dupe.cc \
cobol.distclean:
cobol.maintainer-clean:
# The main makefile has already created stage?/cobol.
cobol.stage1: stage1-start
-mv cobol/*$(objext) stage1/cobol
cobol.stage2: stage2-start
-mv cobol/*$(objext) stage2/cobol
cobol.stage3: stage3-start
-mv cobol/*$(objext) stage3/cobol
cobol.stage4: stage4-start
-mv cobol/*$(objext) stage4/cobol
cobol.stageprofile: stageprofile-start
-mv cobol/*$(objext) stageprofile/cobol
cobol.stagefeedback: stagefeedback-start
-mv cobol/*$(objext) stagefeedback/cobol
selftest-cobol: