1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the "License"). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets "[]" replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 # Copyright 2010 Sun Microsystems, Inc. All rights reserved. 22 # Use is subject to license terms. 23 # Copyright (c) 2013, Joyent, Inc. All rights reserved. 24 # 25 26 VER = gcc-4.4.4 27 MPFR_VER = mpfr-3.1.2 28 GMP_VER = gmp-5.1.1 29 30 include ../Makefile.defs 31 32 SEPARATE_BUILD = yes 33 34 GCC = /opt/local/bin/gcc 35 GXX = /bin/false 36 CFLAGS = -nostdinc -isystem /usr/include -g -O2 37 38 AUTOCONF_OPTS += \ 39 --with-ld=/usr/bin/ld \ 40 --without-gnu-ld \ 41 --with-gnu-as \ 42 --with-as=$(DESTDIR)/usr/gnu/bin/gas \ 43 --enable-languages="c,c++" \ 44 --enable-shared \ 45 --disable-nls 46 47 AUTOCONF_ENV += \ 48 DESTDIR=$(DESTDIR) \ 49 MAKE=$(MAKE) 50 51 OVERRIDES += \ 52 $(AUTOCONF_CFLAGS) \ 53 STAGE1_CFLAGS="$(CFLAGS)" \ 54 CFLAGS_FOR_TARGET="$(CFLAGS)" 55 56 # 57 # The runtime libraries that we build into proto.strap should be made to search 58 # for their dependencies there as well, so that programs built to run on the 59 # build machine (from proto.strap) find the correct copies of these libraries. 60 # 61 ifeq ($(STRAP),strap) 62 STRAPFIX_LINKS= \ 63 $(DESTDIR)/lib/64 \ 64 $(DESTDIR)/usr/lib/64 65 STRAPFIX_FILES_32 = \ 66 $(DESTDIR)/usr/lib/libgcc_s.so.1 \ 67 $(DESTDIR)/usr/lib/libstdc++.so.6 68 STRAPFIX_FILES_64 = \ 69 $(DESTDIR)/usr/lib/64/libgcc_s.so.1 \ 70 $(DESTDIR)/usr/lib/64/libstdc++.so.6 71 STRAPFIX_FILES = $(STRAPFIX_FILES_32) $(STRAPFIX_FILES_64) 72 endif 73 74 # 75 # Unlike everything else, gcc is built to be a cross-compiler, really. It 76 # never runs on the target system, only the build system. So it should not 77 # be using the proto area's headers or libraries. Its own libraries will be 78 # built by the new compiler, and generally aren't using system headers anyway. 79 # This is not really completely true; for example, libstdc++, and this will 80 # need more work to be really right. We only deliver the libraries. 81 # 82 AUTOCONF_CPPFLAGS = 83 AUTOCONF_LIBS = 84 GENLDFLAGS = 85 86 PATCHES = Patches/* 87 ALL_TGT = bootstrap 88 89 include ../Makefile.targ 90 include ../Makefile.targ.autoconf 91 92 # 93 # We could use the mpfr and gmp from the build system (since the compiler will 94 # be run here), but there's no good way to make gcc build itself correctly if 95 # we do. There are two main problems: 96 # 97 # 1. Stage2 and later cc1 and company don't honour any combination of LDFLAGS, 98 # LDFLAGS_FOR_TARGET, BOOT_LDFLAGS, STAGE2_LDFLAGS, etc. So the only ways to 99 # get these things built with -R/opt/local/lib are to use LD_OPTIONS which will 100 # yield the wrong results for libraries or to hack configure. 101 # 102 # 2. Even if we could get -R/opt/local/lib into these programs without building 103 # the libraries incorrectly, it would still be wrong. The pkgsrc lib directory 104 # on many systems contains libgcc_s.so.1; however, cc1 was built by the stage2 105 # compiler and should find the libgcc that matches that compiler. That happens 106 # to be the one we just built, not the pkgsrc one. 107 # 108 # So Instead we have mpfr and gmp built as part of the gcc build itself. 109 # 110 $(AUTOCONF_OUT.32): | $(VER.32)/mpfr $(VER.32)/gmp 111 112 $(VER.32)/mpfr: $(MPFR_VER).tar.gz | $(VER.32) 113 -rm -rf $@ 114 mkdir -p .unpack32 115 gtar x -C .unpack32 -z --no-same-owner -f $(MPFR_VER).tar.gz 116 mv -f .unpack32/$(MPFR_VER) ./$@ 117 -rmdir .unpack32 118 chmod 755 $@/configure 119 touch $@/configure 120 121 $(VER.32)/gmp: $(GMP_VER).tar.bz2 | $(VER.32) 122 -rm -rf $@ 123 mkdir -p .unpack32 124 gtar x -C .unpack32 -j --no-same-owner -f $(GMP_VER).tar.bz2 125 mv -f .unpack32/$(GMP_VER) ./$@ 126 -rmdir .unpack32 127 chmod 755 $@/configure 128 touch $@/configure 129 130 .PHONY: strapfix 131 strapfix: $(STRAPFIX_LINKS) $(STRAPFIX_FILES) | install 132 for f in $(STRAPFIX_FILES_32); do \ 133 /usr/bin/elfedit -e \ 134 'dyn:runpath $(DESTDIR)/lib:$(DESTDIR)/usr/lib' \ 135 $$f; \ 136 done 137 for f in $(STRAPFIX_FILES_64); do \ 138 /usr/bin/elfedit -e \ 139 'dyn:runpath $(DESTDIR)/lib/64:$(DESTDIR)/usr/lib/64' \ 140 $$f; \ 141 done 142 143 $(STRAPFIX_LINKS): 144 ln -s amd64 $@