source: rtems/make/compilers/gcc-portsw.cfg @ e81ef51

4.104.114.84.95
Last change on this file since e81ef51 was e81ef51, checked in by Joel Sherrill <joel.sherrill@…>, on 02/17/98 at 14:12:01

Patch from Ralf Corsepius <corsepiu@…>:

Yep, I have a bunch of bug-fixes and additions pending (Yet another monster
patch, ... I can hear you scream :-).

1) configure.in : one AC_CONFIG_HEADER(...) line too much.

2) configure.in: gcc28 support is enabled by default, i.e. if no
--enable-gcc28 option is passed on the command line. I am not sure if this
is intentional.

IMO, AC_ARG_ENABLE for --enable-gcc28 should look like:

AC_ARG_ENABLE(gcc28, \
[ --enable-gcc28 enable use of gcc 2.8.x features], \
[case "${enableval}" in

yes) RTEMS_USE_GCC272=no ;;
no) RTEMS_USE_GCC272=yes ;;
*) AC_MSG_ERROR(bad value ${enableval} for gcc-28 option) ;;

esac],[RTEMS_USE_GCC272=yes])

3) At the end of c/src/exec/score/cpu/m68k/m68k.h

#ifdef cplusplus
}
#endif

#endif /* !ASM */

in my opinion these two statements should be swapped:

#endif /* !ASM */

#ifdef cplusplus
}
#endif

I didn't try to compile for m68k, but does't this give an error? Is it
compensated somewhere else - or didn't I look carefully enough?

5) configure.in: --enable-cpp should probably be renamed to --enable-cxx, as
gnu-programs use "cxx" to specify C++ specific configure options, while cpp
is used for the preprocessor (e.g egcs uses --with-cxx-includedir, autoconf
internally uses $CXX),

6) The macro files from aclocal/*.m4 contain the buggy sed-rules formerly
contained in aclocal..m4, i.e. the sed/sort-bug fix to aclocal.m4 didn't
make it to aclocal/*.m4. I think I should feel guilty for that - Obviously I
submitted the contents of an old aclocal-directory last time. - Sorry.

7) For sh-rtems, we currently need to add additional managers to
MANAGERS_REQUIRED (from inside of custom/*.cfg). Currently MANAGERS_REQUIRED
is defined in make/compilers/*.cfg. This seems to prevent overriding
MANAGERS_REQUIRED from custom/*.cfg files - Obviously the files are included
in such a way that the settings from compilers/*cfg always override settings
from custom/*.cfg files.

Furthermore, I think, defining MANAGERS_* inside gcc-<target>.cfg files is
not correct - MANAGERS are not gcc-variant-dependent, but depend
on targets/bsps and therefore should be defined in a bsp/target dependent
file, e.g. in custom/*.cfg or target.cfg.in.

I think defining default settings for MANAGERS* in custom/default.cfg could
be an appropriate location. But this requires all custom/*.cfg files to
include default.cfg, which *-posix.cfg files don't seem to do.

Therefore I would like propose to move MANAGERS* to target.cfg.in - they are
included by all custom/*.cfg files. Perhaps we/you should use this
opportunity to merge parts from custom/default.cfg into target.cfg.in. This
ensures to have the setting included once per target makefile and will open
the opportunity to have autoconf doing additional work on
bsp-configurations.

Peanuts sofar, ... but here it comes ... (:-)

8) I am preparing a major enhancement to autoconf support for
gnutools/compilers. It is not yet finished, but usable and I'll therefore
attach a preliminary version to this mail.

Motivation:

  • Fix problems with --enable-gcc28, if target-cc is not gcc28 compatible
  • Fix -pipe problems
  • Fix problems with hard-coded paths in configuration files (esp. posix)
  • Fix consistency problems with explictly given gnutools and gcc's gnutools

Currently included:

  • detection and checking of host and target compiler (gcc/g++)
  • checking if target gnutools are in path
  • checking if <target>-gcc -specs works (autodisabling gcc28 if not)
  • checking if <target>-gcc -pipe works

Todo :

  • *posix.cfg files are not yet adapted => The hard-coded paths for these systems are still in use.
  • Check if the host compiler $CC is properly propagated to the Makefiles (I doubt it, but this should not matter)
  • Check if rtems' generic tools still work properly (It looks like, but who knows)
  • Integrate CXX support into default.cfg or gcc-target-default.cfg (It looks like C++ support is only used by posix BSPs)
  • Automatically handle RANLIB/MKLIB for targets
  • Plenty ... (:-)

Open problems:

  • Untested for non-gcc compatible host and target compilers. This should be no problem if the tools are named follow gnutool's naming convention and are included in $PATH while running configure.
  • Intentionally using different tools than that gcc has been configured for, e.g. use a different assembler ? This should be still possible if XX_FOR_TARGET is hard-coded into custom/*.cfg. I don't see why anybody should want to do this, but who knows?

I have tested this version on linux and solaris hosts, with gcc's
directories mounted at weird non-standard mount points, using egcs
(linux/sh-rtemscoff), gcc-2.7.2.2 using native tools (solaris), gcc-2.7.2.3
w/ gnutools (solaris/linux). I don't expect it to break anything, but of
cause I can't promise it. It will break most/all *-posix.cfg configuration
almost for certain, but not more as rtems' current *posix.cfg configurations
already do (hard-coded configurations).

I am not sure if this is ready to be included into the next snapshot or not.
Perhaps you might try this on your systems and if it you don't notice
serious bugs you might put it into the snapshot for public testing (I don't
like this, but I don't see another possiblity to test generality).

I enclose a patch for configure.in and some configuration files which
comprizes fixes for all items mentioned except of #3 . Don't forget to run
"aclocal -I aclocal; autoconf;" after applying the patch (:-).

  • Property mode set to 100644
File size: 8.0 KB
Line 
1#
2#  gcc-no_bsp.cfg,v 1.13 1995/12/19 19:59:57 joel Exp
3#
4# This is for the amd29k portsw board.
5#
6# THIS IS NOT A GNU TOOLS BASED PORT!!!
7#
8
9# Prefix on the installed GNU tools
10#  Just use the native tools
11GNU_TOOLS_PREFIX=
12
13# Additional target names (other than debug, profile)
14TARGET_VARIANTS +=
15
16#
17# Pre-processor defines.
18# Local tailoring (on the command line) can be done by setting XCPPFLAGS
19# which is never set in the Makefile's
20#
21# Possible defines include:
22#       -DRTEMS_LIBC            using libc bundled with RTEMS
23#       -DRTEMS_NEWLIB          using CYGNUS libc
24#       -DMALLOC_PROVIDED       must be used for newlib reent struct
25
26DEFINES:= $(LIBC_DEFINES)
27
28GCC_INCLUDE=.
29
30#  Note: normally we do not want the standard include files
31#        Also we usually include a "libc_include" directory
32CPPFLAGS=$(XCPPFLAGS) $(DEFINES) \
33  -I$(RTEMS_LIBC_DIR)/include \
34  -I$(PROJECT_INCLUDE) \
35  -I/opt/29k/src/inc
36
37#
38# Local tailoring (on the command line) can be done by setting XCFLAGS
39# which is never set in the Makefile's
40#
41
42#
43# CFLAGS_OPTIMIZE_V, CFLAGS_DEBUG_V, CFLAGS_PROFILE_V are the values we
44# would want the corresponding macros to be set to.
45#
46# CFLAGS_OPTIMIZE, CFLAGS_DEBUG, CFLAGS_PROFILE are set in the leaf
47# Makefiles by the 'debug:' and 'profile:' targets to their _V values.
48#
49
50# default flags
51
52CFLAGS_DEFAULT = -NB -bwc -nocrt0 -Ml -m -g -Hansi -Hon=Pointers_compatible -Hon=Pointers_compatible_with_ints -Dinline= -D___AM29K__ -Hnocopyr
53
54# optimize flag: typically -0, could use -O4 or -fast
55# -O4 is ok for RTEMS
56# -Os to optimize for size
57CFLAGS_OPTIMIZE_V=-Os
58
59# debug flag; typically -g
60CFLAGS_DEBUG_V=-g -O0 -DRTEMS_DEBUG -DSTACK_CHECKER_ON -DSTACK_CHECKER_REPORT_USAGE
61
62# when debugging, optimize flag: typically empty
63# some compilers do allow optimization with their "-g"
64CFLAGS_DEBUG_OPTIMIZE_V=
65
66# profile flag; use gprof(1)
67CFLAGS_PROFILE_V=
68
69# default is to optimize
70CFLAGS_OPTIMIZE=$(CFLAGS_OPTIMIZE_V)
71
72# dynamic libraries
73CFLAGS_DYNAMIC_V=-fpic
74ASFLAGS_DYNAMIC_V=
75
76CFLAGS=$(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG) $(CFLAGS_PROFILE) \
77       $(CFLAGS_DEFAULT)
78
79# List of library paths without -L
80LD_PATHS= $(PROJECT_RELEASE)/lib
81
82# libraries you want EVERYONE to link with
83LD_LIBS=
84
85# ld flag to ensure pure-text
86LDFLAGS_MUST_BE_PURE_V =
87
88# ld flag for [un]shared objects
89LDFLAGS_STATIC_LIBRARIES_V =
90LDFLAGS_SHARED_LIBRARIES_V =
91
92# ld flag for incomplete link
93LDFLAGS_INCOMPLETE = -i
94
95# Special linker options when building lib.so
96LDFLAGS_DYNAMIC_V = ??
97
98# Some dynamic linking systems want the preferred name recorded in the binary
99# ref: src/libxil/Makefile
100LDFLAGS_DYNAMIC_LIBNAME_V = -h $(DYNAMIC_VERSION_LIBNAME)
101
102# ld flags for profiling, debugging
103LDFLAGS_PROFILE_V =
104LDFLAGS_DEBUG_V =
105
106LDFLAGS=$(LDFLAGS_PROFILE) $(LDFLAGS_DEBUG) $(LD_PATHS:%=-L %)
107
108#
109# Stuff to clean and clobber for the compiler and its tools
110#
111
112CLEAN_CC = a.out *.o *.BAK
113CLOBBER_CC =
114
115#
116# Client compiler and support tools
117#
118
119CC=/opt/29k/bin/hc29
120CXX=$(CC)
121CCC=$(CXX)
122
123# CPP command to write file to standard output
124CPP=$(CC) -E
125
126# flags set by cc when running cpp
127CPP_CC_FLAGS=-D__STDC__
128
129AS=/opt/29k/bin/as29
130ASPP=ERROR_NO_ASPP
131
132ASFLAGS=-l -fcgimosx
133ASM4FLAGS := -I $(PROJECT_INCLUDE)
134
135
136# NOTE: should never use full path .. but there is no guarantee ld, etc
137#       will be in the same directory as gcc.. so hope they are in the path
138#       Don't do this on a real target!!!
139LD=/opt/29k/bin/ld29
140NM=/opt/29k/bin/nm29
141AR=echo making library
142# egrep regexp to ignore symbol table entries in ar archives.
143# Only used to make sure we skip them when coalescing libraries.
144# skip __.SYMDEF and empty names (maybe bug in ranlib??).
145AR_SYMBOL_TABLE="HIGHLY-UNLIKELY-TO-CONFLICT"
146ARFLAGS=ruv
147
148# NOTE: see comment on ld, nm, ar
149SIZE=size
150
151#
152# Command to convert a normal archive to one searchable by $(LD)
153# Not needed on SVR4
154#
155
156MKLIB=/opt/29k/bin/lib29
157
158#
159# How to compile stuff into ${ARCH} subdirectory
160#
161# NOTE: we override COMPILE.c
162#
163
164COMPILE.c=$(CC) -c $(CFLAGS) $(CPPFLAGS) $(XCFLAGS)
165
166${ARCH}/%.o: %.c
167        ${COMPILE.c} -o $@ $<
168        $(CHMOD) -f g+w $@
169
170${ARCH}/%.o: %.cc
171        ${COMPILE.c} -o $@ $<
172        $(CHMOD) -f g+w $@
173
174${ARCH}/%.o: %.s
175        ${COMPILE.c} -DASM -o $@ $<
176        $(CHMOD) -f g+w $@
177
178${ARCH}/%.o: %.S
179        $(CP) $*.s $(ARCH)/$*.c
180        $(CPP) $(CPPFLAGS) $(ARCH)/$*.c  > $(ARCH)/$*.s
181        ${COMPILE.c} -o $@ $(ARCH)/$*.s
182        $(CHMOD) -f g+w $@
183        $(RM) $(ARCH)/$*.c
184
185# Specify our own default rule for this to prevent having CFLAGS and
186#  CPPFLAGS being passed to linker
187${ARCH}/%: ${ARCH}/%.o
188        ${CC} ${LDFLAGS} -o $@ $@.o ${LD_LIBS}
189        $(CHMOD) -f g+w $@
190
191# Make foo.rel from foo.o
192${ARCH}/%.rel: ${ARCH}/%.o
193        ${LD} $(LDFLAGS_INCOMPLETE) -o $@ $^
194        $(CHMOD) -f g+w $@
195
196# create $(ARCH)/pgm from pgm.sh
197${ARCH}/%: %.sh
198        $(RM) $@
199        $(CP) $< $@
200        $(CHMOD) +x $@
201        $(CHMOD) -f g+w $@
202
203# Dependency files for use by gmake
204# NOTE: we don't put in $(TARGET_ARCH)
205#       so that 'make clean' doesn't blow it away
206
207DEPEND=Depends-$(TARGET_ARCH:o-%=%)
208
209CLEAN_DEPEND=$(DEPEND).tmp
210CLOBBER_DEPEND=$(DEPEND)
211
212# We deliberately don't have anything depend on the
213# $(DEPEND) file; otherwise it will get rebuilt even
214# on 'make clean'
215#
216
217depend: $(C_FILES) $(CC_FILES) $(S_FILES)
218ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0)
219#       Use gcc -M to generate dependencies
220#       Replace foo.o with $(ARCH)/foo.o
221#       Replace $(ARCH) value with string $(ARCH)
222#           so that it will for debug and profile cases
223        $(COMPILE.c) -Hmake $^ | \
224            $(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \
225                   -e 's?$(ARCH)/?$$(ARCH)/?'   >$(DEPEND).tmp
226
227        $(MV) $(DEPEND).tmp $(DEPEND)
228        $(CHMOD) -f g+w $(DEPEND)
229endif
230
231
232# spell out all the LINK_FILE's, rather than using -lbsp, so
233#  that $(LINK_FILES) can be a dependency
234
235# Start file must be one of
236#    $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
237#    $(PROJECT_RELEASE)/lib/asmiface$(LIB_VARIANT).o
238# It defaults to start.o, but an app can override it.
239
240# Note:  Normally RTEMS provides a start file...
241START_FILE= $(PROJECT_RELEASE)/lib/crt0$(LIB_VARIANT).o $(PROJECT_RELEASE)/lib/register$(LIB_VARIANT).o
242
243LIBC_LOW=   $(PROJECT_RELEASE)/lib/libcsupport$(LIBSUFFIX_VA)
244
245LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
246
247LIBOSBOOT=/home/src/amd29k/sps2000/netrom.o
248
249LINK_FILES= \
250    $(START_FILE) \
251    $(OBJS) \
252    $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \
253    $(PROJECT_RELEASE)/lib/libbsp$(LIBSUFFIX_VA)  \
254    $(LD_LIBS) \
255    $(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA) \
256    $(PROJECT_RELEASE)/lib/librtems$(LIBSUFFIX_VA) \
257    $(LIBC_LOW) \
258    $(PROJECT_RELEASE)/lib/libmisc$(LIBSUFFIX_VA) \
259    $(LIBC_LIBC) \
260    $(LIBC_EXTRALIBS) \
261    $(LIBC_LIBM)
262#    /home/craigl/osbdbg.o
263
264# Here is the rule to actually build a $(ARCH)/foo.exe
265# It also builds $(ARCH)/foo.sr and $(ARCH)/foo.nm
266# Usage ref: src/tests/sptest/sp1/Makefile
267
268define make-exe
269        if [ $(NO_ROM) ]; then echo "\n\nskipping ROM compile\n"; else  \
270          $(CC) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/romlink -u _times -u _gettimeofday \
271          -u _sleep -o $(basename $@).out $(LIBOSBOOT) $(LINK_FILES); \
272          romcoff -r -t -l -b $(basename $@).out raminit.o; \
273          rm $(basename $@).out; \
274          $(CC) -m -u _times -u _gettimeofday -u _sleep -o $(basename $@).romcof $(LIBOSBOOT) \
275          $(LINK_FILES) raminit.o -nocrt0 -cmd$(PROJECT_RELEASE)/lib/romlink > $(basename $@).rommap ; \
276          rm raminit.o ; \
277          $(CHMOD) -f g+w $(basename $@).romcof; \
278          /opt/green/coff2sr -noS5 $(basename $@).romcof -o $(basename $@).srec; \
279          $(CHMOD) -f g+w $(basename $@).srec; \
280        fi
281        if [ $(CREATE_MAP) ]; then \
282          $(CC) -m -u _times -u _gettimeofday -u _sleep -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/ramlink > $(basename $@).rammap; \
283        else \
284          rm $(basename $@).rommap > /dev/null 2> /dev/null ; \
285          $(CC) -u _times -u _gettimeofday -u _sleep -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd$(PROJECT_RELEASE)/lib/ramlink; \
286        fi
287        $(CHMOD) -f g+w $(basename $@).exe
288#       $(CC) -o $(basename $@).exe $(LINK_FILES) -nocrt0 -cmd/opt/29k/lib/link030.cmd
289        $(NM) -g $(basename $@).exe > $(basename $@).num
290        $(CHMOD) -f g+w $(basename $@).num
291#       $(SIZE) $(basename $@).exe
292endef
293
294define make-rel
295        $(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS)
296        $(CHMOD) -f g+w $@
297endef
Note: See TracBrowser for help on using the repository browser.