diff options
author | Pasha <pasha@member.fsf.org> | 2024-02-20 18:49:50 +0000 |
---|---|---|
committer | Pasha <pasha@member.fsf.org> | 2024-02-20 18:49:50 +0000 |
commit | 5e0b8d508ed51004bd836384293be00950ee62c9 (patch) | |
tree | e3f16b1aa8b7177032ce3ec429fbad2b1d92a876 /Makefile.am | |
download | gnumach-riscv-5e0b8d508ed51004bd836384293be00950ee62c9.tar.gz gnumach-riscv-5e0b8d508ed51004bd836384293be00950ee62c9.tar.bz2 |
init gnumach copy
Diffstat (limited to 'Makefile.am')
-rw-r--r-- | Makefile.am | 265 |
1 files changed, 265 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..ad38249 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,265 @@ +# Makefile for GNU Mach. + +# Copyright (C) 2006, 2007, 2008, 2009, 2013 Free Software Foundation, Inc. + +# This program 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 2, or (at your option) any later +# version. +# +# This program 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 this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# +# Various definitions of the Automake environment. +# +# These will be augmented below. +# + +SUBDIRS = +DIST_SUBDIRS = +EXTRA_DIST = +DISTCHECK_CONFIGURE_FLAGS = +noinst_LIBRARIES = +noinst_PROGRAMS = +TESTS= +info_TEXINFOS = +MOSTLYCLEANFILES = +DISTCLEANFILES = +AM_CPPFLAGS = +AM_CCASFLAGS = +AM_CFLAGS = +AM_LDFLAGS = + +# +# Compilation flags +# + +GCC_INSTALL = $(shell LANG=C $(CC) -print-search-dirs | sed -n -e 's/install: \(.*\)/\1/p') +AM_CPPFLAGS += \ + -nostdinc -imacros config.h -I $(GCC_INSTALL)/include + +AM_CPPFLAGS += \ + -I$(systype) \ + -I. \ + -I$(top_srcdir)/$(systype) \ + -I$(top_srcdir)/$(systype)/include/mach/sa \ + -I$(top_srcdir)/include + +AM_CFLAGS += \ + -fno-builtin-log + +AM_CCASFLAGS += \ + -D__ASSEMBLY__ + +# Yes, this makes the eyes hurt. But perhaps someone will finally take care of +# all that scruffy Mach code... Also see <http://savannah.gnu.org/task/?5726>. +AM_CFLAGS += \ + -Wall -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes + +# We need the GNU-style inline +AM_CFLAGS += \ + -fgnu89-inline + +# Much of the Mach code predates C99 and makes invalid assumptions about +# type punning. +AM_CFLAGS += \ + -fno-strict-aliasing + +# The smashing stack protector might be enabled by default, but might emit +# unsuitable code. +if disable_smashing_stack_protector +AM_CFLAGS += \ + -fno-stack-protector +endif + +# We do not support or need position-independent +AM_CFLAGS += \ + -no-pie -fno-PIE -fno-pie -fno-pic + +# This must be the same size as port names, see e.g. ipc/ipc_entry.c +AM_CFLAGS += -DRDXTREE_KEY_32 + +# +# Silent build support. +# + +AWK_V = $(AWK_V_$(V)) +AWK_V_ = $(AWK_V_$(AM_DEFAULT_VERBOSITY)) +AWK_V_0 = @echo " AWK $@"; + +GZIP_V = $(GZIP_V_$(V)) +GZIP_V_ = $(GZIP_V_$(AM_DEFAULT_VERBOSITY)) +GZIP_V_0 = @echo " GZIP $@"; + +NM_V = $(NM_V_$(V)) +NM_V_ = $(NM_V_$(AM_DEFAULT_VERBOSITY)) +NM_V_0 = @echo " NM $@"; + +MIGCOM_V = $(MIGCOM_V_$(V)) +MIGCOM_V_ = $(MIGCOM_V_$(AM_DEFAULT_VERBOSITY)) +MIGCOM_V_0 = @echo " MIG $@"; + +# +# MIG Setup. +# + +# MIGCOM. +MIGCOM = $(MIG) -n -cc cat - /dev/null + +# We need this because we use $(CPP) to preprocess MIG .defs files. +CPP = @CPP@ -x c + +# +# Other Tools' Configuration. +# + +# Don't needlessly overwrite files whose contents haven't changed. +# This helps avoiding unnecessary recompilation cycles when keeping +# cross-compilation toolchains up-to-date. Thus, unconditionally use the +# `install-sh' that is supplied by GNU Automake 1.10.1, as the GNU Coreutils +# one doesn't provide this functionality yet (TODO: change that). TODO: +# `build-aux' is hardcoded. +install_sh = $(SHELL) $(abs_srcdir)/build-aux/install-sh -C +INSTALL = $(install_sh) + +# +# The main kernel functionality. +# + +noinst_LIBRARIES += \ + libkernel.a +libkernel_a_SOURCES = +nodist_libkernel_a_SOURCES = +MOSTLYCLEANFILES += \ + $(nodist_libkernel_a_SOURCES) + +gnumach_o_LDADD = \ + libkernel.a + +gnumach_SOURCES = +gnumach_LINKFLAGS = + +# Makerules: how to do some things. +include Makerules.am + +# Main Makefile fragment. +include Makefrag.am + +# Test suite. +include tests/Makefrag.am + +# Documentation. +include doc/Makefrag.am + +# +# Kernel Image +# + +# We need the following junk because of the include-files-from-libc.a magic. +# TODO. Is the following kosher from a Automake point of view? (I.e. a +# program `gnumach.o' that is then later used again as an object file.) +gnumach_o_SOURCES = +# TODO. ``-u _start''. System dependent? +gnumach_o_LINK = $(LD) $(LDFLAGS) -u _start -r -o $@ +noinst_PROGRAMS += \ + gnumach.o + +# This is the list of routines we use from libgcc. +libgcc_routines := udivdi3 __udivdi3 __udivmoddi4 __umoddi3 __divdi3 __divmoddi4 __moddi3 __ffsdi2 +# References generated by ld. +ld_magic_routines := __rel_iplt_start __rel_iplt_end __rela_iplt_start __rela_iplt_end _START etext _edata _end +gnumach-undef: gnumach.$(OBJEXT) + $(NM_V) $(NM) -u $< | sed 's/ *U *//' | sort -u > $@ +MOSTLYCLEANFILES += gnumach-undef +gnumach-undef-bad: gnumach-undef Makefile + $(AM_V_GEN) sed '$(foreach r,$(libgcc_routines) $(ld_magic_routines),/^$r$$/d;)' $< > $@ +MOSTLYCLEANFILES += gnumach-undef-bad +libgcc-routines.o: gnumach-undef gnumach-undef-bad + $(AM_V_at) if test -s gnumach-undef-bad; \ + then cat gnumach-undef-bad; exit 2; else true; fi + $(AM_V_CCLD) $(CCLD) $(LDFLAGS) -r -static \ + -o $@ `sed 's/^/-Wl,-u,/' < $<` -x c /dev/null -lgcc + @if nm $@ | grep __init_cpu_features; \ + then echo "Please install a 32bit libc without multiarch support (on Debian systems, the libc6-dev:i386 package containing /usr/lib/i386-linux-gnu/libc.a)". ; \ + false ; fi + +gnumach_LINK = $(LD) $(LDFLAGS) $(LINKFLAGS) $(gnumach_LINKFLAGS) -o $@ +gnumach_LDADD = gnumach.o libgcc-routines.o + +# +# Installation. +# + +exec_bootdir = \ + $(exec_prefix)/boot +exec_boot_PROGRAMS = \ + gnumach + +# +# Building a distribution. +# + +EXTRA_DIST += \ + config.status.dep.patch \ + Makefile.in.dep.patch + +EXTRA_DIST += \ + DEVELOPMENT + +dist-hook: dist-rm-CVS gen-ChangeLog + +.PHONY: dist-rm-CVS +dist-rm-CVS: +# Try to be very safe with respect to spuriously removing various directories +# in case of an error. + find $(distdir)/ -type d -name CVS | while read d; do \ + rm -f "$$d"/{Entries,Repository,Root,Tag} && \ + rmdir "$$d"; \ + done + +gen_start_commit = e227045b06d62ee7d2fbab9d5ade9030ff43170b +ChangeLog_files = ChangeLog ChangeLog.0 ChangeLog.00 +.PHONY: gen-ChangeLog +gen-ChangeLog: + $(AM_V_GEN)if test -d $(top_srcdir)/.git; then \ + (cd $(top_srcdir)/ && \ + ./gitlog-to-changelog --strip-tab \ + $(gen_start_commit).. && \ + echo) >> $(distdir)/cl-t && \ + for f in $(ChangeLog_files); do \ + (cd $(top_srcdir)/ && \ + git show $(gen_start_commit):$$f) >> $(distdir)/cl-t && \ + rm -f $(distdir)/$$f && \ + mv $(distdir)/cl-t $(distdir)/$$f \ + || exit $$?; \ + done; \ + fi + +DISTCLEANFILES += \ + Makefile.orig \ + config.status.orig + +# +# Legacy support. +# + +install-headers: install-data + @echo '*****************************************************' + @echo '* As you can see above, I was so kind to rewrite your' + @echo '* `make $@'\' + @echo '* into' + @echo '* `make $^'\' + @echo '* which is how it is to be spelled these days.' + @echo '*' + @echo '* Please get your instructions fixed.' + @echo '*****************************************************' + @echo + @echo 'Penalty:' + sleep 20 |