source: rtems/make/compilers/gcc-target-default.cfg @ 9646d5be

4.104.114.84.95
Last change on this file since 9646d5be 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: 6.5 KB
Line 
1#
2#
3
4CPPFLAGS=$(CFLAGS) $(XCPPFLAGS)
5
6CPLUS_CPPFLAGS=$(CFLAGS) $(XCPPFLAGS)
7
8##
9# CFLAGS_OPTIMIZE_V, CFLAGS_DEBUG_V, CFLAGS_PROFILE_V are the values we
10# would want the corresponding macros to be set to.
11#
12# CFLAGS_OPTIMIZE, CFLAGS_DEBUG, CFLAGS_PROFILE are set in the leaf
13# Makefiles by the 'debug:' and 'profile:' targets to their _V values.
14#
15
16# default flags
17
18# We only include the header files for KA9Q if it is enabled.
19INCLUDE_KA9Q_yes_V = -I$(PROJECT_INCLUDE)/ka9q
20INCLUDE_KA9Q = $(INCLUDE_KA9Q_$(HAS_KA9Q)_V)
21
22ifeq ($(RTEMS_USE_GCC272),yes)
23# Ask gcc where it finds its own include files
24GCC_INCLUDE=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=include)
25
26CFLAGS_DEFAULT = $(CPU_DEFINES) $(CPU_CFLAGS) -Wall -ansi -fasm -g \
27  -nostdinc -I$(PROJECT_INCLUDE) \
28  $(INCLUDE_KA9Q) \
29  -I$(RTEMS_LIBC_DIR)/include -I$(GCC_INCLUDE) $(DEFINES)
30
31ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g \
32  -nostdinc -I$(PROJECT_INCLUDE) \
33  -I$(RTEMS_LIBC_DIR)/include -I$(GCC_INCLUDE) $(DEFINES)
34
35# default location of Standard C Library
36ifndef LIBC_LIBC
37LIBC_LIBC=$(RTEMS_LIBC_DIR)/lib/libc.a
38endif
39
40ifndef LIBC_LIBM
41LIBC_LIBM=$(RTEMS_LIBC_DIR)/lib/libm.a
42endif
43
44else
45CFLAGS_DEFAULT = $(CPU_DEFINES) $(CPU_CFLAGS) -Wall -ansi -fasm -g \
46        -B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems \
47        $(INCLUDE_KA9Q) $(DEFINES)
48
49ASMFLAGS=$(CPU_DEFINES) $(CPU_CFLAGS) -g -I$(srcdir) \
50        -B$(PROJECT_RELEASE)/lib/ -specs bsp_specs -qrtems $(DEFINES)
51
52# default location of Standard C Library
53ifndef LIBC_LIBC
54LIBC_LIBC=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libc.a)
55endif
56
57ifndef LIBC_LIBM
58LIBC_LIBM=$(shell $(CC) $(CPU_CFLAGS) -print-file-name=libm.a)
59endif
60endif
61
62# Define this to yes if C++ is included in the development environment.
63# This requires that at least the GNU C++ compiler and libg++ be installed.
64ifeq ($(RTEMS_HAS_CPLUSPLUS),yes)
65HAS_CPLUSPLUS=yes
66CPLUS_LD_LIBS += $(PROJECT_RELEASE)/lib/librtems++$(LIBSUFFIX_VA)
67else
68HAS_CPLUSPLUS=no
69endif
70
71# debug flag; typically -g
72CFLAGS_DEBUG_V+=-g -Wno-unused
73
74ifeq ($(RTEMS_USE_GCC272),no)
75CFLAGS_DEBUG_V+=-qrtems_debug
76endif
77
78# when debugging, optimize flag: typically empty
79# some compilers do allow optimization with their "-g"
80#CFLAGS_DEBUG_OPTIMIZE_V=
81
82# profile flag; use gprof(1)
83CFLAGS_PROFILE_V=-pg
84
85# default is to optimize
86CFLAGS_OPTIMIZE=$(CFLAGS_OPTIMIZE_V)
87
88# dynamic libraries
89CFLAGS_DYNAMIC_V=-fpic
90#ASFLAGS_DYNAMIC_V=
91
92CFLAGS=$(CFLAGS_DEFAULT) $(CFLAGS_OPTIMIZE) $(CFLAGS_DEBUG) $(CFLAGS_PROFILE)
93
94# List of library paths without -L
95LD_PATHS= $(PROJECT_RELEASE)/lib
96
97# libraries you want EVERYONE to link with
98#LD_LIBS=
99
100# ld flag to ensure pure-text
101#LDFLAGS_MUST_BE_PURE_V =
102
103# ld flag for [un]shared objects
104#LDFLAGS_STATIC_LIBRARIES_V =
105#LDFLAGS_SHARED_LIBRARIES_V =
106
107# ld flag for incomplete link
108LDFLAGS_INCOMPLETE = -r
109
110# Special linker options when building lib.so
111LDFLAGS_DYNAMIC_V = ??
112
113# Some dynamic linking systems want the preferred name recorded in the binary
114# ref: src/libxil/Makefile
115LDFLAGS_DYNAMIC_LIBNAME_V = -h $(DYNAMIC_VERSION_LIBNAME)
116
117# ld flags for profiling, debugging
118LDFLAGS_PROFILE_V =
119LDFLAGS_DEBUG_V =
120
121LDFLAGS=$(LDFLAGS_PROFILE) $(LDFLAGS_DEBUG) $(LD_PATHS:%=-L %)
122
123#
124# Stuff to clean and clobber for the compiler and its tools
125#
126
127CLEAN_CC = a.out *.o *.BAK
128CLOBBER_CC =
129
130#
131# Client compiler and support tools
132#
133
134# CPP command to write file to standard output
135CPP=$(CC) -E
136
137# flags set by cc when running cpp
138CPP_CC_FLAGS=-D__STDC__
139
140ASFLAGS=
141ASM4FLAGS := -I $(PROJECT_INCLUDE)
142
143# egrep regexp to ignore symbol table entries in ar archives.
144# Only used to make sure we skip them when coalescing libraries.
145# skip __.SYMDEF and empty names (maybe bug in ranlib??).
146AR_SYMBOL_TABLE="HIGHLY-UNLIKELY-TO-CONFLICT"
147ARFLAGS=ruv
148
149#
150# Command to convert a normal archive to one searchable by $(LD)
151# Not needed on SVR4
152#
153
154MKLIB=echo library is complete:
155
156#
157# How to compile stuff into ${ARCH} subdirectory
158#
159# NOTE: we override COMPILE.c
160#
161
162COMPILE.c=$(CC) $(CFLAGS) $(XCFLAGS) -c
163
164${ARCH}/%.o: %.c
165        ${COMPILE.c} -o $@ $<
166
167${ARCH}/%.o: %.cc
168        ${COMPILE.c} -o $@ $<
169
170${ARCH}/%.o: %.S
171        ${COMPILE.c} -DASM -o $@ $<
172
173# strip out C++ style comments.
174${ARCH}/%.o: %.s
175        sed -e 's/\/\/.*$$//' < $< | \
176            $(CPP) $(ASMFLAGS) -I. -I$(srcdir) -DASM - >$(ARCH)/$*.i
177        $(AS) $(ASFLAGS) -o $@ $(ARCH)/$*.i
178
179#       $(CPP) $(CPPFLAGS) -DASM - < $<  >$(ARCH)/$*.i
180#       $(AS) $(ASFLAGS) -o $@ $(ARCH)/$*.i
181#       $(RM) $(ARCH)/$*.i
182
183# Specify our own default rule for this to prevent having CFLAGS and
184#  CPPFLAGS being passed to linker
185${ARCH}/%: ${ARCH}/%.o
186        ${CC} ${LDFLAGS} -o $@ $@.o ${LD_LIBS}
187
188# Make foo.rel from foo.o
189${ARCH}/%.rel: ${ARCH}/%.o
190        ${LD} $(LDFLAGS_INCOMPLETE) -o $@ $^
191
192# create $(ARCH)/pgm from pgm.sh
193${ARCH}/%: %.sh
194        $(RM) $@
195        $(CP) $< $@
196        $(CHMOD) +x $@
197
198# Dependency files for use by gmake
199# NOTE: we don't put in $(TARGET_ARCH)
200#       so that 'make clean' doesn't blow it away
201
202DEPEND=Depends-$(TARGET_ARCH:o-%=%)
203
204CLEAN_DEPEND=$(DEPEND).tmp
205CLOBBER_DEPEND=$(DEPEND)
206
207# We deliberately don't have anything depend on the
208# $(DEPEND) file; otherwise it will get rebuilt even
209# on 'make clean'
210#
211
212depend: $(C_FILES) $(CC_FILES) $(S_FILES)
213ifneq ($(words $(C_FILES) $(CC_FILES) $(S_FILES)), 0)
214#       Use gcc -M to generate dependencies
215#       Replace foo.o with $(ARCH)/foo.o
216#       Replace $(ARCH) value with string $(ARCH)
217#           so that it will for debug and profile cases
218        $(COMPILE.c) -M   $^    |  \
219        $(SED) -e 's?^\(.*\)\.o[ ]*:?$$(ARCH)/\1.o:?' \
220            -e 's?$(ARCH)/?$$(ARCH)/?'   >$(DEPEND).tmp
221        $(MV) $(DEPEND).tmp $(DEPEND)
222endif
223
224# spell out all the LINK_FILE's, rather than using -lbsp, so
225#  that $(LINK_FILES) can be a dependency
226
227# Start file must be one of
228#    $(PROJECT_RELEASE)/lib/start$(LIB_VARIANT).o
229#    $(PROJECT_RELEASE)/lib/asmiface$(LIB_VARIANT).o
230# It defaults to start.o, but an app can override it.
231
232ifeq ($(START_BASE),)
233  START_FILE=
234else
235  START_FILE=$(PROJECT_RELEASE)/lib/$(START_BASE)$(LIB_VARIANT).o
236endif
237
238CONSTRUCTOR=
239
240LIBC_LOW=
241
242LIBGCC = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
243
244LINK_OBJS=\
245    $(CONSTRUCTOR) \
246    $(OBJS) \
247    $(MANAGERS_NOT_WANTED:%=$(PROJECT_RELEASE)/lib/no-%$(LIB_VARIANT).rel) \
248    $(LD_LIBS) \
249    $(PROJECT_RELEASE)/lib/libtest$(LIBSUFFIX_VA)
250
251LINK_LIBS=\
252    $(LD_LIBS) \
253    $(LIBC_EXTRA_LIBS)  \
254    $(PROJECT_RELEASE)/lib/librtemsall$(LIBSUFFIX_VA) \
255    $(LIBC_LIBM) $(LIBC_LIBC) $(LIBGCC)
256
257LINK_FILES=\
258    $(START_FILE) \
259    $(LINK_OBJS) \
260    $(LINK_LIBS)
261
262#
263# Allow user to override link commands (to build a prom image, perhaps)
264#
265ifndef LINKCMDS
266LINKCMDS=$(PROJECT_RELEASE)/lib/linkcmds
267endif
268
269
270define make-rel
271        $(LD) $(LDFLAGS_INCOMPLETE) $(XLDFLAGS) -o $@ $(OBJS)
272endef
Note: See TracBrowser for help on using the repository browser.