< prev index next >

make/devkit/Tools.gmk

Print this page

        

*** 1,7 **** # ! # Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this --- 1,7 ---- # ! # Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as # published by the Free Software Foundation. Oracle designates this
*** 42,69 **** $(info TARGET=$(TARGET)) $(info HOST=$(HOST)) $(info BUILD=$(BUILD)) ARCH := $(word 1,$(subst -, ,$(TARGET))) ########################################################################################## # Define external dependencies # Latest that could be made to work. ! gcc_ver := gcc-4.9.2 ! binutils_ver := binutils-2.25 ! ccache_ver := ccache-3.2.1 ! mpfr_ver := mpfr-3.0.1 ! gmp_ver := gmp-4.3.2 ! mpc_ver := mpc-1.0.1 ! ! GCC := http://ftp.gnu.org/pub/gnu/gcc/$(gcc_ver)/$(gcc_ver).tar.bz2 ! BINUTILS := http://ftp.gnu.org/pub/gnu/binutils/$(binutils_ver).tar.bz2 ! CCACHE := http://samba.org/ftp/ccache/$(ccache_ver).tar.gz MPFR := http://www.mpfr.org/${mpfr_ver}/${mpfr_ver}.tar.bz2 GMP := http://ftp.gnu.org/pub/gnu/gmp/${gmp_ver}.tar.bz2 ! MPC := http://www.multiprecision.org/mpc/download/${mpc_ver}.tar.gz # RPMs in OEL6.4 LINUX_VERSION := OEL6.4 RPM_LIST := \ kernel-headers \ --- 42,87 ---- $(info TARGET=$(TARGET)) $(info HOST=$(HOST)) $(info BUILD=$(BUILD)) ARCH := $(word 1,$(subst -, ,$(TARGET))) + $(info ARCH=$(ARCH)) ########################################################################################## # Define external dependencies # Latest that could be made to work. ! GCC_VER := 7.3.0 ! ifeq ($(GCC_VER), 7.3.0) ! gcc_ver := gcc-7.3.0 ! binutils_ver := binutils-2.30 ! ccache_ver := ccache-3.3.6 ! mpfr_ver := mpfr-3.1.5 ! gmp_ver := gmp-6.1.2 ! mpc_ver := mpc-1.0.3 ! gdb_ver := gdb-8.1 ! else ifeq ($(GCC_VER), 4.9.2) ! gcc_ver := gcc-4.9.2 ! binutils_ver := binutils-2.25 ! ccache_ver := ccache-3.2.1 ! mpfr_ver := mpfr-3.0.1 ! gmp_ver := gmp-4.3.2 ! mpc_ver := mpc-1.0.1 ! gdb_ver := gdb-7.12.1 ! else ! $(error Unsupported GCC version) ! endif ! ! GCC := http://ftp.gnu.org/pub/gnu/gcc/$(gcc_ver)/$(gcc_ver).tar.xz ! BINUTILS := http://ftp.gnu.org/pub/gnu/binutils/$(binutils_ver).tar.xz ! CCACHE := https://samba.org/ftp/ccache/$(ccache_ver).tar.xz MPFR := http://www.mpfr.org/${mpfr_ver}/${mpfr_ver}.tar.bz2 GMP := http://ftp.gnu.org/pub/gnu/gmp/${gmp_ver}.tar.bz2 ! MPC := http://ftp.gnu.org/pub/gnu/mpc/${mpc_ver}.tar.gz ! GDB := http://ftp.gnu.org/gnu/gdb/${gdb_ver}.tar.xz ! ! OEL_URL := http://yum.oracle.com/repo/OracleLinux/OL6/4/base/$(ARCH)/ # RPMs in OEL6.4 LINUX_VERSION := OEL6.4 RPM_LIST := \ kernel-headers \
*** 85,117 **** libgcc \ zlib zlib-devel \ libffi libffi-devel \ fontconfig fontconfig-devel - ifeq ($(ARCH),x86_64) - RPM_DIR ?= $(RPM_DIR_x86_64) - RPM_ARCHS := x86_64 noarch - ifeq ($(BUILD),$(HOST)) - ifeq ($(TARGET),$(HOST)) - # When building the native compiler for x86_64, enable mixed mode. - RPM_ARCHS += i386 i686 - endif - endif - else - RPM_DIR ?= $(RPM_DIR_i686) - RPM_ARCHS := i386 i686 - endif - - # Sort to remove duplicates - RPM_FILE_LIST := $(sort $(foreach a,$(RPM_ARCHS),$(wildcard $(patsubst %,$(RPM_DIR)/%*$a.rpm,$(RPM_LIST))))) - - #$(info RPM_FILE_LIST $(RPM_FILE_LIST)) - - ifeq ($(RPM_FILE_LIST),) - $(error Found no RPMs, RPM_DIR must point to list of directories to search for RPMs) - endif - ########################################################################################## # Define common directories and files # Ensure we have 32-bit libs also for x64. We enable mixed-mode. ifeq (x86_64,$(ARCH)) --- 103,112 ----
*** 120,143 **** else LIBDIRS := lib endif # Define directories ! RESULT := $(OUTPUTDIR)/result ! BUILDDIR := $(OUTPUTDIR)/$(HOST)/$(TARGET) PREFIX := $(RESULT)/$(HOST) TARGETDIR := $(PREFIX)/$(TARGET) SYSROOT := $(TARGETDIR)/sysroot ! DOWNLOAD := $(OUTPUTDIR)/download ! SRCDIR := $(OUTPUTDIR)/src # Marker file for unpacking rpms rpms := $(SYSROOT)/rpms_unpacked # Need to patch libs that are linker scripts to use non-absolute paths libs := $(SYSROOT)/libs_patched ########################################################################################## # Unpack source packages # Generate downloading + unpacking of sources. define Download --- 115,149 ---- else LIBDIRS := lib endif # Define directories ! RESULT := $(OUTPUT_ROOT)/result ! BUILDDIR := $(OUTPUT_ROOT)/$(HOST)/$(TARGET) PREFIX := $(RESULT)/$(HOST) TARGETDIR := $(PREFIX)/$(TARGET) SYSROOT := $(TARGETDIR)/sysroot ! DOWNLOAD := $(OUTPUT_ROOT)/download ! DOWNLOAD_RPMS := $(DOWNLOAD)/rpms ! SRCDIR := $(OUTPUT_ROOT)/src # Marker file for unpacking rpms rpms := $(SYSROOT)/rpms_unpacked # Need to patch libs that are linker scripts to use non-absolute paths libs := $(SYSROOT)/libs_patched + ################################################################################ + # Download RPMs + download-rpms: + mkdir -p $(DOWNLOAD_RPMS) + # Only run this if rpm dir is empty. + ifeq ($(wildcard $(DOWNLOAD_RPMS)/*.rpm), ) + cd $(DOWNLOAD_RPMS) && \ + wget -r -np -nd $(patsubst %, -A "*%*.rpm", $(RPM_LIST)) $(OEL_URL) + endif + ########################################################################################## # Unpack source packages # Generate downloading + unpacking of sources. define Download
*** 145,155 **** $(1)_CFG = $$($(1)_DIR)/configure $(1)_FILE = $(DOWNLOAD)/$(notdir $($(1))) $$($(1)_CFG) : $$($(1)_FILE) mkdir -p $$(SRCDIR) ! tar -C $$(SRCDIR) -x$$(if $$(findstring .gz, $$<),z,j)f $$< $$(foreach p,$$(abspath $$(wildcard $$(notdir $$($(1)_DIR)).patch)), \ echo PATCHING $$(p) ; \ patch -d $$($(1)_DIR) -p1 -i $$(p) ; \ ) touch $$@ --- 151,161 ---- $(1)_CFG = $$($(1)_DIR)/configure $(1)_FILE = $(DOWNLOAD)/$(notdir $($(1))) $$($(1)_CFG) : $$($(1)_FILE) mkdir -p $$(SRCDIR) ! tar -C $$(SRCDIR) -xf $$< $$(foreach p,$$(abspath $$(wildcard $$(notdir $$($(1)_DIR)).patch)), \ echo PATCHING $$(p) ; \ patch -d $$($(1)_DIR) -p1 -i $$(p) ; \ ) touch $$@
*** 157,175 **** $$($(1)_FILE) : wget -P $(DOWNLOAD) $$($(1)) endef # Download and unpack all source packages ! $(foreach p,GCC BINUTILS CCACHE MPFR GMP MPC,$(eval $(call Download,$(p)))) ########################################################################################## # Unpack RPMS # Note. For building linux you should install rpm2cpio. define unrpm ! $(SYSROOT)/$(notdir $(1)).unpacked \ ! : $(1) $$(rpms) : $(SYSROOT)/$(notdir $(1)).unpacked endef %.unpacked : $(info Unpacking target rpms and libraries from $<) --- 163,198 ---- $$($(1)_FILE) : wget -P $(DOWNLOAD) $$($(1)) endef # Download and unpack all source packages ! $(foreach p,GCC BINUTILS CCACHE MPFR GMP MPC GDB,$(eval $(call Download,$(p)))) ########################################################################################## # Unpack RPMS + ifeq ($(ARCH),x86_64) + RPM_ARCHS := x86_64 noarch + ifeq ($(BUILD),$(HOST)) + ifeq ($(TARGET),$(HOST)) + # When building the native compiler for x86_64, enable mixed mode. + RPM_ARCHS += i386 i686 + endif + endif + else ifeq ($(ARCH),i686)) + RPM_ARCHS := i386 i686 + else + RPM_ARCHS := $(ARCH) + endif + + RPM_FILE_LIST := $(sort $(foreach a, $(RPM_ARCHS), \ + $(wildcard $(patsubst %,$(DOWNLOAD_RPMS)/%*$a.rpm,$(RPM_LIST))) \ + )) + # Note. For building linux you should install rpm2cpio. define unrpm ! $(SYSROOT)/$(notdir $(1)).unpacked : $(1) $$(rpms) : $(SYSROOT)/$(notdir $(1)).unpacked endef %.unpacked : $(info Unpacking target rpms and libraries from $<)
*** 208,230 **** @touch $@ ########################################################################################## # Create links for ffi header files so that they become visible by default when using the # devkit. ! $(SYSROOT)/usr/include/ffi.h: $(rpms) ! cd $(@D) && rm $(@F) && ln -s ../lib/libffi-*/include/$(@F) . ! ! $(SYSROOT)/usr/include/ffitarget.h: $(rpms) ! cd $(@D) && rm $(@F) && ln -s ../lib/libffi-*/include/$(@F) . ! SYSROOT_LINKS += $(SYSROOT)/usr/include/ffi.h $(SYSROOT)/usr/include/ffitarget.h ########################################################################################## # Define marker files for each source package to be compiled ! $(foreach t,binutils mpfr gmp mpc gcc ccache,$(eval $(t) = $(TARGETDIR)/$($(t)_ver).done)) ########################################################################################## # Default base config CONFIG = --target=$(TARGET) \ --- 231,254 ---- @touch $@ ########################################################################################## # Create links for ffi header files so that they become visible by default when using the # devkit. + ifeq ($(ARCH), x86_64) + $(SYSROOT)/usr/include/ffi.h: $(rpms) + cd $(@D) && rm -f $(@F) && ln -s ../lib/libffi-*/include/$(@F) . ! $(SYSROOT)/usr/include/ffitarget.h: $(rpms) ! cd $(@D) && rm -f $(@F) && ln -s ../lib/libffi-*/include/$(@F) . ! SYSROOT_LINKS += $(SYSROOT)/usr/include/ffi.h $(SYSROOT)/usr/include/ffitarget.h ! endif ########################################################################################## # Define marker files for each source package to be compiled ! $(foreach t,binutils mpfr gmp mpc gcc ccache gdb,$(eval $(t) = $(TARGETDIR)/$($(t)_ver).done)) ########################################################################################## # Default base config CONFIG = --target=$(TARGET) \
*** 232,242 **** --prefix=$(PREFIX) PATHEXT = $(RESULT)/$(BUILD)/bin: PATHPRE = PATH=$(PATHEXT)$(PATH) ! BUILDPAR = -j16 # Default commands to when making MAKECMD = INSTALLCMD = install --- 256,267 ---- --prefix=$(PREFIX) PATHEXT = $(RESULT)/$(BUILD)/bin: PATHPRE = PATH=$(PATHEXT)$(PATH) ! NUM_CORES := $(shell cat /proc/cpuinfo | grep -c processor) ! BUILDPAR = -j$(NUM_CORES) # Default commands to when making MAKECMD = INSTALLCMD = install
*** 315,324 **** --- 340,351 ---- $(CONFIG) \ --with-sysroot=$(SYSROOT) \ --disable-nls \ --program-prefix=$(TARGET)- \ --enable-multilib \ + --enable-gold \ + --enable-plugins \ ) > $(@D)/log.config 2>&1 @echo 'done' $(BUILDDIR)/$(mpfr_ver)/Makefile \ : $(MPFR_CFG)
*** 390,400 **** $(PATHPRE) $(ENVS) $(GCC_CFG) $(EXTRA_CFLAGS) \ $(CONFIG) \ --with-sysroot=$(SYSROOT) \ --enable-languages=c,c++ \ --enable-shared \ - --enable-multilib \ --disable-nls \ --with-gnu-as \ --with-gnu-ld \ --with-mpfr=$(PREFIX) \ --with-gmp=$(PREFIX) \ --- 417,426 ----
*** 408,417 **** --- 434,460 ---- # as of 4.3 or so need these for doing config $(BUILDDIR)/$(gcc_ver)/Makefile : $(gmp) $(mpfr) $(mpc) $(mpfr) : $(gmp) $(mpc) : $(gmp) $(mpfr) + ################################################################################ + # Build gdb but only where host and target match + ifeq ($(HOST), $(TARGET)) + $(BUILDDIR)/$(gdb_ver)/Makefile: $(GDB_CFG) + $(info Configuring $@. Log in $(@D)/log.config) + mkdir -p $(@D) + ( \ + cd $(@D) ; \ + $(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" $(GDB_CFG) \ + $(CONFIG) \ + --with-sysroot=$(SYSROOT) \ + ) > $(@D)/log.config 2>&1 + @echo 'done' + + $(gdb): $(gcc) + endif + ########################################################################################## # very straightforward. just build a ccache. it is only for host. $(BUILDDIR)/$(ccache_ver)/Makefile \ : $(CCACHE_CFG) $(info Configuring $@. Log in $(@D)/log.config)
*** 432,442 **** @echo -n 'Creating compiler symlinks...' @for f in cpp; do \ if [ ! -e $(PREFIX)/bin/$(TARGET)-$$f ]; \ then \ cd $(PREFIX)/bin && \ ! ln -s $$f $(TARGET)-$$f ; \ fi \ done @touch $@ @echo 'done' --- 475,485 ---- @echo -n 'Creating compiler symlinks...' @for f in cpp; do \ if [ ! -e $(PREFIX)/bin/$(TARGET)-$$f ]; \ then \ cd $(PREFIX)/bin && \ ! ln -fs $$f $(TARGET)-$$f ; \ fi \ done @touch $@ @echo 'done'
*** 449,459 **** @$(foreach l,$(LIBDIRS), \ for f in `cd $(PREFIX)/$(l) && ls`; do \ if [ ! -e $(TARGETDIR)/$(l)/$$f ]; then \ mkdir -p $(TARGETDIR)/$(l) && \ cd $(TARGETDIR)/$(l)/ && \ ! ln -s $(if $(findstring /,$(l)),../,)../../$(l)/$$f $$f; \ fi \ done;) @echo 'done' else $(gccpatch) : --- 492,502 ---- @$(foreach l,$(LIBDIRS), \ for f in `cd $(PREFIX)/$(l) && ls`; do \ if [ ! -e $(TARGETDIR)/$(l)/$$f ]; then \ mkdir -p $(TARGETDIR)/$(l) && \ cd $(TARGETDIR)/$(l)/ && \ ! ln -fs $(if $(findstring /,$(l)),../,)../../$(l)/$$f $$f; \ fi \ done;) @echo 'done' else $(gccpatch) :
*** 469,478 **** --- 512,522 ---- $(TARGETDIR)/%.done : $(BUILDDIR)/%/Makefile $(info Building $(basename $@). Log in $(<D)/log.build) $(PATHPRE) $(ENVS) $(MAKE) $(BUILDPAR) -f $< -C $(<D) $(MAKECMD) $(MAKECMD.$(notdir $@)) > $(<D)/log.build 2>&1 @echo -n 'installing...' $(PATHPRE) $(MAKE) $(INSTALLPAR) -f $< -C $(<D) $(INSTALLCMD) $(MAKECMD.$(notdir $@)) > $(<D)/log.install 2>&1 + @mkdir -p $(@D) @touch $@ @echo 'done' ##########################################################################################
*** 486,515 **** echo 'DEVKIT_NAME="$(gcc_ver) - $(LINUX_VERSION)"' >> $@ echo 'DEVKIT_TOOLCHAIN_PATH="$$DEVKIT_ROOT/bin"' >> $@ echo 'DEVKIT_SYSROOT="$$DEVKIT_ROOT/$$host/sysroot"' >> $@ ########################################################################################## ifeq ($(TARGET), $(HOST)) $(PREFIX)/bin/%: @echo 'Creating missing $* soft link' ln -s $(TARGET)-$* $@ missing-links := $(addprefix $(PREFIX)/bin/, \ addr2line ar as c++ c++filt elfedit g++ gcc gprof ld nm objcopy ranlib readelf \ ! size strings strip) endif ########################################################################################## bfdlib : $(bfdlib) binutils : $(binutils) rpms : $(rpms) libs : $(libs) sysroot : rpms libs gcc : sysroot $(gcc) $(gccpatch) ! all : binutils gcc bfdlib $(PREFIX)/devkit.info $(missing-links) $(SYSROOT_LINKS) # this is only built for host. so separate. ccache : $(ccache) # Force target --- 530,573 ---- echo 'DEVKIT_NAME="$(gcc_ver) - $(LINUX_VERSION)"' >> $@ echo 'DEVKIT_TOOLCHAIN_PATH="$$DEVKIT_ROOT/bin"' >> $@ echo 'DEVKIT_SYSROOT="$$DEVKIT_ROOT/$$host/sysroot"' >> $@ ########################################################################################## + # Copy these makefiles into the root of the kit + $(PREFIX)/Makefile: ./Makefile + rm -rf $@ + cp $< $@ + + $(PREFIX)/Tools.gmk: ./Tools.gmk + rm -rf $@ + cp $< $@ + + THESE_MAKEFILES := $(PREFIX)/Makefile $(PREFIX)/Tools.gmk + + ########################################################################################## ifeq ($(TARGET), $(HOST)) $(PREFIX)/bin/%: @echo 'Creating missing $* soft link' ln -s $(TARGET)-$* $@ missing-links := $(addprefix $(PREFIX)/bin/, \ addr2line ar as c++ c++filt elfedit g++ gcc gprof ld nm objcopy ranlib readelf \ ! size strings strip ld.bfd ld.gold) endif ########################################################################################## bfdlib : $(bfdlib) binutils : $(binutils) rpms : $(rpms) libs : $(libs) sysroot : rpms libs gcc : sysroot $(gcc) $(gccpatch) ! gdb : $(gdb) ! all : binutils gcc bfdlib $(PREFIX)/devkit.info $(missing-links) $(SYSROOT_LINKS) \ ! $(THESE_MAKEFILES) gdb # this is only built for host. so separate. ccache : $(ccache) # Force target
< prev index next >