undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com Patches, unit tests, benchmarks, whitepaper, and outreach briefs. Public domain — no copyright claimed. Use freely.
This commit is contained in:
commit
0a580b313d
70422 changed files with 17213626 additions and 0 deletions
127
make/devkit/Makefile
Normal file
127
make/devkit/Makefile
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
#
|
||||
# Copyright (c) 2013, 2025, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# This Makefile, together with Tools.gmk, can be used to compile a set of
|
||||
# gcc based cross compilation, portable, self contained packages, capable
|
||||
# of building OpenJDK.
|
||||
#
|
||||
# By default this Makefile will build a native toolchain for the current
|
||||
# platform if called with something like this:
|
||||
#
|
||||
# make tars BASE_OS=OL
|
||||
#
|
||||
# To build the full set of crosstools for additional platforms, use a command
|
||||
# line looking like this:
|
||||
#
|
||||
# make TARGETS="aarch64-linux-gnu" BASE_OS=Fedora
|
||||
# or
|
||||
# make TARGETS="arm-linux-gnueabihf ppc64le-linux-gnu" BASE_OS=Fedora BASE_OS_VERSION=17
|
||||
#
|
||||
# to build several devkits for a specific OS version at once.
|
||||
# You can find the final results under ../../build/devkit/result/<host>-to-<target>
|
||||
#
|
||||
# You may want the native toolchain to be used when compiling the cross
|
||||
# compilation toolchains. To achieve this, first build the native toolchain,
|
||||
# then add the bin directory from this build to the path when invoking this
|
||||
# makefile again for cross compilation. Ex:
|
||||
#
|
||||
# PATH=$PWD/../../build/devkit/result/x86_64-linux-gnu-to-x86_64-linux-gnu/bin:$PATH \
|
||||
# make TARGETS="arm-linux-gnueabihf ppc64le-linux-gnu" BASE_OS=Fedora
|
||||
#
|
||||
# This is the makefile which iterates over all host and target platforms.
|
||||
#
|
||||
|
||||
COMMA := ,
|
||||
|
||||
OS := $(shell uname -o)
|
||||
CPU := $(shell uname -m)
|
||||
|
||||
# Figure out what platform this is building on.
|
||||
ME := $(CPU)-$(if $(findstring Linux,$(OS)),linux-gnu)
|
||||
|
||||
$(info Building on platform $(ME))
|
||||
|
||||
#
|
||||
# By default just build for the current platform, which is assumed to be Linux
|
||||
#
|
||||
ifeq ($(TARGETS), )
|
||||
PLATFORMS := $(ME)
|
||||
HOST_PLATFORMS := $(PLATFORMS)
|
||||
else
|
||||
PLATFORMS := $(subst $(COMMA), , $(TARGETS))
|
||||
HOST_PLATFORMS := $(ME)
|
||||
endif
|
||||
TARGET_PLATFORMS := $(PLATFORMS)
|
||||
$(info HOST_PLATFORMS $(HOST_PLATFORMS))
|
||||
$(info TARGET_PLATFORMS $(TARGET_PLATFORMS))
|
||||
|
||||
all compile : $(PLATFORMS)
|
||||
|
||||
ifeq ($(SKIP_ME), )
|
||||
$(foreach p,$(filter-out $(ME),$(PLATFORMS)),$(eval $(p) : $$(ME)))
|
||||
endif
|
||||
|
||||
OUTPUT_ROOT = $(abspath ../../build/devkit)
|
||||
RESULT = $(OUTPUT_ROOT)/result
|
||||
|
||||
SUBMAKEVARS = HOST=$@ BUILD=$(ME) RESULT=$(RESULT) OUTPUT_ROOT=$(OUTPUT_ROOT)
|
||||
|
||||
$(HOST_PLATFORMS) :
|
||||
@echo 'Building compilers for $@'
|
||||
@echo 'Targets: $(TARGET_PLATFORMS)'
|
||||
for p in $(filter $@, $(TARGET_PLATFORMS)) $(filter-out $@, $(TARGET_PLATFORMS)); do \
|
||||
$(MAKE) -f Tools.gmk download-rpms $(SUBMAKEVARS) \
|
||||
TARGET=$$p PREFIX=$(RESULT)/$@-to-$$p && \
|
||||
$(MAKE) -f Tools.gmk all $(SUBMAKEVARS) \
|
||||
TARGET=$$p PREFIX=$(RESULT)/$@-to-$$p && \
|
||||
$(MAKE) -f Tools.gmk ccache $(SUBMAKEVARS) \
|
||||
TARGET=$@ PREFIX=$(RESULT)/$@-to-$$p || exit 1 ; \
|
||||
done
|
||||
@echo 'All done"'
|
||||
|
||||
TODAY := $(shell date +%Y%m%d)
|
||||
|
||||
define Mktar
|
||||
$(1)-to-$(2)_tar = $$(RESULT)/sdk-$(1)-to-$(2)-$$(TODAY).tar.gz
|
||||
$$($(1)-to-$(2)_tar) : PLATFORM = $(1)-to-$(2)
|
||||
TARFILES += $$($(1)-to-$(2)_tar)
|
||||
endef
|
||||
|
||||
$(foreach p,$(HOST_PLATFORMS),$(foreach t,$(TARGET_PLATFORMS),$(eval $(call Mktar,$(p),$(t)))))
|
||||
|
||||
tars : all $(TARFILES)
|
||||
onlytars : $(TARFILES)
|
||||
%.tar.gz :
|
||||
$(MAKE) -r -f Tars.gmk SRC_DIR=$(RESULT)/$(PLATFORM) TAR_FILE=$@
|
||||
|
||||
clean :
|
||||
rm -rf $(addprefix ../../build/devkit/, result $(HOST_PLATFORMS))
|
||||
dist-clean: clean
|
||||
rm -rf $(addprefix ../../build/devkit/, src download)
|
||||
|
||||
FORCE :
|
||||
.PHONY : all compile tars $(HOST_PLATFORMS) clean dist-clean
|
||||
49
make/devkit/Tars.gmk
Normal file
49
make/devkit/Tars.gmk
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
#
|
||||
# Copyright (c) 2013, 2019, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This makefile creates the tar files. It needs to be called with make -r
|
||||
# which is why it's separated out into its own file.
|
||||
|
||||
# Input parameters
|
||||
# SRC_DIR
|
||||
# TAR_FILE
|
||||
|
||||
ifeq ($(SRC_DIR), )
|
||||
$(error SRC_DIR not set)
|
||||
endif
|
||||
ifeq ($(TAR_FILE), )
|
||||
$(error TAR_FILE not set)
|
||||
endif
|
||||
|
||||
default: tars
|
||||
|
||||
tars : $(TAR_FILE)
|
||||
|
||||
$(TAR_FILE): $(shell find $(SRC_DIR) -type f)
|
||||
@echo 'Creating compiler package $@'
|
||||
cd $(dir $(SRC_DIR)) && tar -czf $@ $(notdir $(SRC_DIR))/*
|
||||
touch $@
|
||||
|
||||
.PHONY: default tars
|
||||
713
make/devkit/Tools.gmk
Normal file
713
make/devkit/Tools.gmk
Normal file
|
|
@ -0,0 +1,713 @@
|
|||
#
|
||||
# Copyright (c) 2013, 2025, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# Workhorse makefile for creating ONE cross compiler
|
||||
# Needs either to be from BUILD -> BUILD OR have
|
||||
# BUILD -> HOST prebuilt
|
||||
#
|
||||
# NOTE: There is a bug here. We don't limit the
|
||||
# PATH when building BUILD -> BUILD, which means that
|
||||
# if you configure after you've once build the BUILD->BUILD
|
||||
# compiler THAT one will be picked up as the compiler for itself.
|
||||
# This is not so great, especially if you did a partial delete
|
||||
# of the target tree.
|
||||
#
|
||||
# Fix this...
|
||||
#
|
||||
|
||||
lowercase = $(shell echo $1 | tr A-Z a-z)
|
||||
|
||||
$(info TARGET=$(TARGET))
|
||||
$(info HOST=$(HOST))
|
||||
$(info BUILD=$(BUILD))
|
||||
|
||||
ARCH := $(word 1,$(subst -, ,$(TARGET)))
|
||||
|
||||
ifeq ($(TARGET), arm-linux-gnueabihf)
|
||||
ARCH=armhfp
|
||||
endif
|
||||
|
||||
$(info ARCH=$(ARCH))
|
||||
|
||||
KERNEL_HEADERS_RPM := kernel-headers
|
||||
|
||||
ifeq ($(BASE_OS), OL)
|
||||
ifeq ($(ARCH), aarch64)
|
||||
BASE_URL := https://yum.oracle.com/repo/OracleLinux/OL7/6/base/$(ARCH)/
|
||||
LINUX_VERSION := OL7.6
|
||||
KERNEL_HEADERS_RPM := kernel-uek-headers
|
||||
else
|
||||
BASE_URL := https://yum.oracle.com/repo/OracleLinux/OL6/4/base/$(ARCH)/
|
||||
LINUX_VERSION := OL6.4
|
||||
endif
|
||||
else ifeq ($(BASE_OS), Fedora)
|
||||
DEFAULT_OS_VERSION := 41
|
||||
ifeq ($(BASE_OS_VERSION), )
|
||||
BASE_OS_VERSION := $(DEFAULT_OS_VERSION)
|
||||
endif
|
||||
ifeq ($(filter aarch64 armhfp ppc64le riscv64 s390x x86_64, $(ARCH)), )
|
||||
$(error Only "aarch64 armhfp ppc64le riscv64 s390x x86_64" architectures are supported for Fedora, but "$(ARCH)" was requested)
|
||||
endif
|
||||
ifeq ($(ARCH), riscv64)
|
||||
ifeq ($(filter 38 39 40 41, $(BASE_OS_VERSION)), )
|
||||
$(error Only Fedora 38-41 are supported for "$(ARCH)", but Fedora $(BASE_OS_VERSION) was requested)
|
||||
endif
|
||||
BASE_URL := http://fedora.riscv.rocks/repos-dist/f$(BASE_OS_VERSION)/latest/$(ARCH)/Packages/
|
||||
else
|
||||
LATEST_ARCHIVED_OS_VERSION := 41
|
||||
ifeq ($(filter aarch64 armhfp x86_64, $(ARCH)), )
|
||||
FEDORA_TYPE := fedora-secondary
|
||||
else
|
||||
FEDORA_TYPE := fedora/linux
|
||||
endif
|
||||
ifeq ($(ARCH), armhfp)
|
||||
ifneq ($(BASE_OS_VERSION), 36)
|
||||
$(error Fedora 36 is the last release supporting "armhfp", but $(BASE_OS) was requested)
|
||||
endif
|
||||
endif
|
||||
NOT_ARCHIVED := $(shell [ $(BASE_OS_VERSION) -gt $(LATEST_ARCHIVED_OS_VERSION) ] && echo true)
|
||||
ifeq ($(NOT_ARCHIVED),true)
|
||||
BASE_URL := https://dl.fedoraproject.org/pub/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
else
|
||||
BASE_URL := https://archives.fedoraproject.org/pub/archive/$(FEDORA_TYPE)/releases/$(BASE_OS_VERSION)/Everything/$(ARCH)/os/Packages/
|
||||
endif
|
||||
endif
|
||||
LINUX_VERSION := Fedora_$(BASE_OS_VERSION)
|
||||
else
|
||||
$(error Unknown base OS $(BASE_OS))
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Define external dependencies
|
||||
|
||||
GNU_BASE_URL := https://ftp.gnu.org/pub/gnu
|
||||
|
||||
BINUTILS_VER_ONLY := 2.43
|
||||
BINUTILS_BASE_URL := $(GNU_BASE_URL)/binutils
|
||||
BINUTILS_SHA512 := 93e063163e54d6a6ee2bd48dc754270bf757a3635b49a702ed6b310e929e94063958512d191e66beaf44275f7ea60865dbde138b624626739679fcc306b133bb
|
||||
|
||||
CCACHE_VER_ONLY := 4.10.2
|
||||
CCACHE_BASE_URL := https://github.com/ccache/ccache/releases/download
|
||||
CCACHE_CMAKE_BASED := 1
|
||||
CCACHE_SHA512 := 3815c71d7266c32839acb306763268018acc58b3bbbd9ec79fc101e4217c1720d2ad2f01645bf69168c1c61d27700b6f3bb755cfa82689cca69824f015653f3c
|
||||
|
||||
GCC_VER_ONLY := 14.2.0
|
||||
GCC_BASE_URL := $(GNU_BASE_URL)/gcc
|
||||
GCC_SHA512 := 932bdef0cda94bacedf452ab17f103c0cb511ff2cec55e9112fc0328cbf1d803b42595728ea7b200e0a057c03e85626f937012e49a7515bc5dd256b2bf4bc396
|
||||
|
||||
GDB_VER_ONLY := 15.2
|
||||
GDB_BASE_URL := $(GNU_BASE_URL)/gdb
|
||||
GDB_SHA512 := 624007deceb5b15ba89c0725883d1a699fa46714ef30887f3d0165e17c5d65d634671740a135aa69e437d916218abb08cfa2a38ed309ff19d48f51da56b2a8ba
|
||||
|
||||
GMP_VER_ONLY := 6.3.0
|
||||
GMP_BASE_URL := $(GNU_BASE_URL)/gmp
|
||||
GMP_SHA512 := e85a0dab5195889948a3462189f0e0598d331d3457612e2d3350799dba2e244316d256f8161df5219538eb003e4b5343f989aaa00f96321559063ed8c8f29fd2
|
||||
|
||||
MPC_VER_ONLY := 1.3.1
|
||||
MPC_BASE_URL := $(GNU_BASE_URL)/mpc
|
||||
MPC_SHA512 := 4bab4ef6076f8c5dfdc99d810b51108ced61ea2942ba0c1c932d624360a5473df20d32b300fc76f2ba4aa2a97e1f275c9fd494a1ba9f07c4cb2ad7ceaeb1ae97
|
||||
|
||||
MPFR_VER_ONLY := 4.2.1
|
||||
MPFR_BASE_URL := https://www.mpfr.org
|
||||
MPFR_SHA512 := bc68c0d755d5446403644833ecbb07e37360beca45f474297b5d5c40926df1efc3e2067eecffdf253f946288bcca39ca89b0613f545d46a9e767d1d4cf358475
|
||||
|
||||
DEPENDENCIES := BINUTILS CCACHE GCC GDB GMP MPC MPFR
|
||||
|
||||
$(foreach dep,$(DEPENDENCIES),$(eval $(dep)_VER := $(call lowercase,$(dep)-$($(dep)_VER_ONLY))))
|
||||
|
||||
BINUTILS_URL := $(BINUTILS_BASE_URL)/$(BINUTILS_VER).tar.xz
|
||||
CCACHE_URL := $(CCACHE_BASE_URL)/v$(CCACHE_VER_ONLY)/$(CCACHE_VER).tar.xz
|
||||
GCC_URL := $(GCC_BASE_URL)/$(GCC_VER)/$(GCC_VER).tar.xz
|
||||
GDB_URL := $(GDB_BASE_URL)/$(GDB_VER).tar.xz
|
||||
GMP_URL := $(GMP_BASE_URL)/$(GMP_VER).tar.xz
|
||||
MPC_URL := $(MPC_BASE_URL)/$(MPC_VER).tar.gz
|
||||
MPFR_URL := $(MPFR_BASE_URL)/$(MPFR_VER)/$(MPFR_VER).tar.xz
|
||||
|
||||
REQUIRED_MIN_MAKE_MAJOR_VERSION := 4
|
||||
ifneq ($(REQUIRED_MIN_MAKE_MAJOR_VERSION),)
|
||||
MAKE_MAJOR_VERSION := $(word 1,$(subst ., ,$(MAKE_VERSION)))
|
||||
SUPPORTED_MAKE_VERSION := $(shell [ $(MAKE_MAJOR_VERSION) -ge $(REQUIRED_MIN_MAKE_MAJOR_VERSION) ] && echo true)
|
||||
ifneq ($(SUPPORTED_MAKE_VERSION),true)
|
||||
$(error "Make v$(MAKE_VERSION) is too old, must use v$(REQUIRED_MIN_MAKE_MAJOR_VERSION) or above")
|
||||
endif
|
||||
endif
|
||||
|
||||
# RPMs used by all BASE_OS
|
||||
RPM_LIST := \
|
||||
$(KERNEL_HEADERS_RPM) \
|
||||
glibc glibc-headers glibc-devel \
|
||||
cups-libs cups-devel \
|
||||
libX11 libX11-devel \
|
||||
libxcb xorg-x11-proto-devel \
|
||||
alsa-lib alsa-lib-devel \
|
||||
libXext libXext-devel \
|
||||
libXtst libXtst-devel \
|
||||
libXrender libXrender-devel \
|
||||
libXrandr libXrandr-devel \
|
||||
freetype freetype-devel \
|
||||
libXt libXt-devel \
|
||||
libSM libSM-devel \
|
||||
libICE libICE-devel \
|
||||
libXi libXi-devel \
|
||||
libXdmcp libXdmcp-devel \
|
||||
libXau libXau-devel \
|
||||
libgcc libxcrypt \
|
||||
zlib zlib-devel \
|
||||
libffi libffi-devel \
|
||||
fontconfig fontconfig-devel \
|
||||
systemtap-sdt-devel \
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Define common directories and files
|
||||
|
||||
# Ensure we have 32-bit libs also for x64. We enable mixed-mode.
|
||||
ifeq (x86_64,$(ARCH))
|
||||
LIBDIRS := lib64 lib
|
||||
CFLAGS_lib := -m32
|
||||
else
|
||||
LIBDIRS := lib
|
||||
endif
|
||||
|
||||
# Define directories
|
||||
BUILDDIR := $(OUTPUT_ROOT)/$(HOST)/$(TARGET)
|
||||
TARGETDIR := $(PREFIX)/$(TARGET)
|
||||
SYSROOT := $(TARGETDIR)/sysroot
|
||||
DOWNLOAD := $(OUTPUT_ROOT)/download
|
||||
DOWNLOAD_RPMS := $(DOWNLOAD)/rpms/$(TARGET)-$(LINUX_VERSION)
|
||||
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)) $(BASE_URL)
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Unpack source packages
|
||||
|
||||
# Generate downloading + checksum verification of sources.
|
||||
define DownloadVerify
|
||||
# Allow override
|
||||
$(1)_DIRNAME ?= $(basename $(basename $(notdir $($(1)_URL))))
|
||||
$(1)_DIR = $(abspath $(SRCDIR)/$$($(1)_DIRNAME))
|
||||
ifeq ($$($(1)_CMAKE_BASED),)
|
||||
$(1)_CFG = $$($(1)_DIR)/configure
|
||||
$(1)_SRC_MARKER = $$($(1)_DIR)/configure
|
||||
$(1)_CONFIG = $(CONFIG)
|
||||
else
|
||||
$(1)_CFG = cmake
|
||||
$(1)_SRC_MARKER = $$($(1)_DIR)/CMakeLists.txt
|
||||
$(1)_CONFIG = $$(CMAKE_CONFIG) $$($(1)_DIR)
|
||||
endif
|
||||
$(1)_FILE = $(DOWNLOAD)/$(notdir $($(1)_URL))
|
||||
|
||||
$$($(1)_SRC_MARKER) : $$($(1)_FILE)
|
||||
mkdir -p $$(SRCDIR)
|
||||
tar -C $$(SRCDIR) -xf $$<
|
||||
$$(foreach p,$$(abspath $$(wildcard patches/$$(ARCH)-$$(notdir $$($(1)_DIR)).patch)), \
|
||||
echo PATCHING $$(p) ; \
|
||||
patch -d $$($(1)_DIR) -p1 -i $$(p) ; \
|
||||
)
|
||||
touch $$@
|
||||
|
||||
$$($(1)_FILE) :
|
||||
mkdir -p $$(@D)
|
||||
wget -O - $$($(1)_URL) > $$@.tmp
|
||||
sha512_actual="$$$$(sha512sum $$@.tmp | awk '{ print $$$$1; }')"; \
|
||||
if [ x"$$$${sha512_actual}" != x"$$($(1)_SHA512)" ]; then \
|
||||
echo "Checksum mismatch for $$@.tmp"; \
|
||||
echo " Expected: $$($(1)_SHA512)"; \
|
||||
echo " Actual: $$$${sha512_actual}"; \
|
||||
exit 1; \
|
||||
fi
|
||||
mv $$@.tmp $$@
|
||||
endef
|
||||
|
||||
# Download and unpack all source packages
|
||||
$(foreach dep,$(DEPENDENCIES),$(eval $(call DownloadVerify,$(dep))))
|
||||
|
||||
################################################################################
|
||||
# Unpack RPMS
|
||||
|
||||
RPM_ARCHS := $(ARCH) noarch
|
||||
ifeq ($(ARCH),x86_64)
|
||||
# Enable mixed mode.
|
||||
RPM_ARCHS += i386 i686
|
||||
else ifeq ($(ARCH),i686)
|
||||
RPM_ARCHS += i386
|
||||
else ifeq ($(ARCH), armhfp)
|
||||
RPM_ARCHS += armv7hl
|
||||
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 $<)
|
||||
@(mkdir -p $(@D); \
|
||||
cd $(@D); \
|
||||
rpm2cpio $< | \
|
||||
cpio --extract --make-directories \
|
||||
-f \
|
||||
"./usr/share/doc/*" \
|
||||
"./usr/share/man/*" \
|
||||
"./usr/X11R6/man/*" \
|
||||
"*/X11/locale/*" \
|
||||
|| die ; )
|
||||
touch $@
|
||||
|
||||
$(foreach p,$(RPM_FILE_LIST),$(eval $(call unrpm,$(p))))
|
||||
|
||||
################################################################################
|
||||
|
||||
# Note: MUST create a <sysroot>/usr/lib even if not really needed.
|
||||
# gcc will use a path relative to it to resolve lib64. (x86_64).
|
||||
# we're creating multi-lib compiler with 32bit libc as well, so we should
|
||||
# have it anyway, but just to make sure...
|
||||
# Patch libc.so and libpthread.so to force linking against libraries in sysroot
|
||||
# and not the ones installed on the build machine.
|
||||
$(LIBS) : $(RPMS)
|
||||
@echo Patching libc and pthreads
|
||||
@(for f in `find $(SYSROOT) -name libc.so -o -name libpthread.so`; do \
|
||||
(cat $$f | sed -e 's|/usr/lib64/||g' \
|
||||
-e 's|/usr/lib/||g' \
|
||||
-e 's|/lib64/||g' \
|
||||
-e 's|/lib/||g' ) > $$f.tmp ; \
|
||||
mv $$f.tmp $$f ; \
|
||||
done)
|
||||
@mkdir -p $(SYSROOT)/usr/lib
|
||||
@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 dep,$(DEPENDENCIES),$(eval $(dep) = $(TARGETDIR)/$($(dep)_VER).done))
|
||||
|
||||
################################################################################
|
||||
|
||||
# Default base config
|
||||
CONFIG = --target=$(TARGET) \
|
||||
--host=$(HOST) --build=$(BUILD) \
|
||||
--prefix=$(PREFIX)
|
||||
|
||||
CMAKE_CONFIG = -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$(PREFIX)
|
||||
|
||||
PATHEXT = $(PREFIX)/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
|
||||
|
||||
|
||||
declare_tools = CC$(1)=$(2)gcc LD$(1)=$(2)ld AR$(1)=$(2)ar AS$(1)=$(2)as RANLIB$(1)=$(2)ranlib CXX$(1)=$(2)g++ OBJDUMP$(1)=$(2)objdump
|
||||
|
||||
ifeq ($(HOST),$(BUILD))
|
||||
ifeq ($(HOST),$(TARGET))
|
||||
TOOLS = $(call declare_tools,_FOR_TARGET,)
|
||||
endif
|
||||
endif
|
||||
|
||||
TOOLS ?= $(call declare_tools,_FOR_TARGET,$(TARGET)-)
|
||||
|
||||
################################################################################
|
||||
|
||||
# Create a TARGET bfd + libiberty only.
|
||||
# Configure one or two times depending on mulitlib arch.
|
||||
# If multilib, the second should be 32-bit, and we resolve
|
||||
# CFLAG_<name> to most likely -m32.
|
||||
define mk_bfd
|
||||
$$(info Libs for $(1))
|
||||
$$(BUILDDIR)/$$(BINUTILS_VER)-$(subst /,-,$(1))/Makefile \
|
||||
: CFLAGS += $$(CFLAGS_$(1))
|
||||
$$(BUILDDIR)/$$(BINUTILS_VER)-$(subst /,-,$(1))/Makefile \
|
||||
: LIBDIRS = --libdir=$(TARGETDIR)/$(1)
|
||||
|
||||
BFDLIB += $$(TARGETDIR)/$$(BINUTILS_VER)-$(subst /,-,$(1)).done
|
||||
BFDMAKES += $$(BUILDDIR)/$$(BINUTILS_VER)-$(subst /,-,$(1))/Makefile
|
||||
endef
|
||||
|
||||
# Create one set of bfds etc for each multilib arch
|
||||
$(foreach l,$(LIBDIRS),$(eval $(call mk_bfd,$(l))))
|
||||
|
||||
# Only build these two libs.
|
||||
$(BFDLIB) : MAKECMD = all-libiberty all-bfd
|
||||
$(BFDLIB) : INSTALLCMD = install-libiberty install-bfd
|
||||
|
||||
# Building targets libbfd + libiberty. HOST==TARGET, i.e not
|
||||
# for a cross env.
|
||||
$(BFDMAKES) : CONFIG = --target=$(TARGET) \
|
||||
--host=$(TARGET) --build=$(BUILD) \
|
||||
--prefix=$(TARGETDIR) \
|
||||
--with-sysroot=$(SYSROOT) \
|
||||
$(LIBDIRS)
|
||||
|
||||
$(BFDMAKES) : TOOLS = $(call declare_tools,_FOR_TARGET,$(TARGET)-) $(call declare_tools,,$(TARGET)-)
|
||||
|
||||
################################################################################
|
||||
|
||||
$(GCC) \
|
||||
$(BINUTILS) \
|
||||
$(GMP) \
|
||||
$(MPFR) \
|
||||
$(MPC) \
|
||||
$(BFDMAKES) \
|
||||
$(CCACHE) : ENVS += $(TOOLS)
|
||||
|
||||
# libdir to work around hateful bfd stuff installing into wrong dirs...
|
||||
# ensure we have 64 bit bfd support in the HOST library. I.e our
|
||||
# compiler on i686 will know 64 bit symbols, BUT later
|
||||
# we build just the libs again for TARGET, then with whatever the arch
|
||||
# wants.
|
||||
$(BUILDDIR)/$(BINUTILS_VER)/Makefile : CONFIG += --enable-64-bit-bfd --libdir=$(PREFIX)/$(word 1,$(LIBDIRS))
|
||||
|
||||
ifeq ($(filter $(ARCH), s390x riscv64 ppc64le), )
|
||||
# gold compiles but cannot link properly on s390x @ gcc 13.2 and Fedore 41
|
||||
# gold is not available for riscv64 and ppc64le,
|
||||
# and subsequent linking will fail if we try to enable it.
|
||||
LINKER_CONFIG := --enable-gold=default
|
||||
endif
|
||||
|
||||
# Makefile creation. Simply run configure in build dir.
|
||||
# Setting CFLAGS to -O2 generates a much faster ld.
|
||||
$(BFDMAKES) \
|
||||
$(BUILDDIR)/$(BINUTILS_VER)/Makefile \
|
||||
: $(BINUTILS_CFG)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
@mkdir -p $(@D)
|
||||
( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) CFLAGS="-O2 $(CFLAGS)" \
|
||||
$(BINUTILS_CFG) \
|
||||
$(CONFIG) \
|
||||
$(LINKER_CONFIG) \
|
||||
--with-sysroot=$(SYSROOT) \
|
||||
--disable-nls \
|
||||
--program-prefix=$(TARGET)- \
|
||||
--enable-multilib \
|
||||
--enable-threads \
|
||||
--enable-plugins \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
$(BUILDDIR)/$(MPFR_VER)/Makefile \
|
||||
: $(MPFR_CFG)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
@mkdir -p $(@D)
|
||||
( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
|
||||
$(MPFR_CFG) \
|
||||
$(CONFIG) \
|
||||
--program-prefix=$(TARGET)- \
|
||||
--enable-shared=no \
|
||||
--with-gmp=$(PREFIX) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
$(BUILDDIR)/$(GMP_VER)/Makefile \
|
||||
: $(GMP_CFG)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
@mkdir -p $(@D)
|
||||
( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
|
||||
$(GMP_CFG) \
|
||||
--host=$(HOST) --build=$(BUILD) \
|
||||
--prefix=$(PREFIX) \
|
||||
--disable-nls \
|
||||
--program-prefix=$(TARGET)- \
|
||||
--enable-shared=no \
|
||||
--with-mpfr=$(PREFIX) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
$(BUILDDIR)/$(MPC_VER)/Makefile \
|
||||
: $(MPC_CFG)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
@mkdir -p $(@D)
|
||||
( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) CFLAGS="$(CFLAGS)" \
|
||||
$(MPC_CFG) \
|
||||
$(CONFIG) \
|
||||
--program-prefix=$(TARGET)- \
|
||||
--enable-shared=no \
|
||||
--with-mpfr=$(PREFIX) \
|
||||
--with-gmp=$(PREFIX) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
# Only valid if glibc target -> linux
|
||||
# proper destructor handling for c++
|
||||
ifneq (,$(findstring linux,$(TARGET)))
|
||||
$(BUILDDIR)/$(GCC_VER)/Makefile : CONFIG += --enable-__cxa_atexit
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), armhfp)
|
||||
$(BUILDDIR)/$(GCC_VER)/Makefile : CONFIG += --with-float=hard
|
||||
endif
|
||||
|
||||
ifneq ($(filter riscv64 ppc64le s390x, $(ARCH)), )
|
||||
# We only support 64-bit on these platforms anyway
|
||||
CONFIG += --disable-multilib
|
||||
endif
|
||||
|
||||
# Want:
|
||||
# c,c++
|
||||
# shared libs
|
||||
# multilib (-m32/-m64 on x64)
|
||||
# skip native language.
|
||||
# and link and assemble with the binutils we created
|
||||
# earlier, so --with-gnu*
|
||||
$(BUILDDIR)/$(GCC_VER)/Makefile \
|
||||
: $(GCC_CFG)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
mkdir -p $(@D)
|
||||
( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) $(GCC_CFG) $(EXTRA_CFLAGS) \
|
||||
$(CONFIG) \
|
||||
--with-sysroot=$(SYSROOT) \
|
||||
--with-debug-prefix-map=$(OUTPUT_ROOT)=devkit \
|
||||
--enable-languages=c,c++ \
|
||||
--enable-shared \
|
||||
--disable-nls \
|
||||
--with-gnu-as \
|
||||
--with-gnu-ld \
|
||||
--with-mpfr=$(PREFIX) \
|
||||
--with-gmp=$(PREFIX) \
|
||||
--with-mpc=$(PREFIX) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
# need binutils for gcc
|
||||
$(GCC) : $(BINUTILS)
|
||||
|
||||
# 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) \
|
||||
--with-mpfr=$(PREFIX) \
|
||||
--with-gmp=$(PREFIX) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
$(GDB): $(GCC)
|
||||
else
|
||||
$(BUILDDIR)/$(GDB_VER)/Makefile:
|
||||
$(info Faking $@, not used when cross-compiling)
|
||||
mkdir -p $(@D)
|
||||
echo "install:" > $@
|
||||
@echo 'done'
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# very straightforward. just build a ccache. it is only for host.
|
||||
$(BUILDDIR)/$(CCACHE_VER)/Makefile \
|
||||
: $(CCACHE_SRC_MARKER)
|
||||
$(info Configuring $@. Log in $(@D)/log.config)
|
||||
@mkdir -p $(@D)
|
||||
@( \
|
||||
cd $(@D) ; \
|
||||
$(PATHPRE) $(ENVS) $(CCACHE_CFG) \
|
||||
$(CCACHE_CONFIG) \
|
||||
) > $(@D)/log.config 2>&1
|
||||
@echo 'done'
|
||||
|
||||
GCC_PATCHED = $(TARGETDIR)/gcc-patched
|
||||
|
||||
################################################################################
|
||||
# For some reason cpp is not created as a target-compiler
|
||||
ifeq ($(HOST),$(TARGET))
|
||||
$(GCC_PATCHED) : $(GCC) link_libs
|
||||
@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'
|
||||
|
||||
##############################################################################
|
||||
# Ugly at best. Seems that when we compile host->host compiler, that are NOT
|
||||
# the BUILD compiler, the result will not try searching for libs in package root.
|
||||
# "Solve" this by create links from the target libdirs to where they are.
|
||||
link_libs:
|
||||
@echo -n 'Creating library symlinks...'
|
||||
@$(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
|
||||
$(GCC_PATCHED) :
|
||||
@echo 'done'
|
||||
endif
|
||||
|
||||
################################################################################
|
||||
# Build in two steps.
|
||||
# make <default>
|
||||
# make install.
|
||||
# Use path to our build hosts cross tools
|
||||
# Always need to build cross tools for build host self.
|
||||
$(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'
|
||||
|
||||
################################################################################
|
||||
|
||||
$(PREFIX)/devkit.info:
|
||||
@echo 'Creating devkit.info in the root of the kit'
|
||||
rm -f $@
|
||||
touch $@
|
||||
echo '# This file describes to configure how to interpret the contents of this' >> $@
|
||||
echo '# devkit' >> $@
|
||||
echo '' >> $@
|
||||
echo 'DEVKIT_NAME="$(GCC_VER) - $(LINUX_VERSION)"' >> $@
|
||||
echo 'DEVKIT_TOOLCHAIN_PATH="$$DEVKIT_ROOT/bin"' >> $@
|
||||
echo 'DEVKIT_SYSROOT="$$DEVKIT_ROOT/$(TARGET)/sysroot"' >> $@
|
||||
echo 'DEVKIT_EXTRA_PATH="$$DEVKIT_ROOT/bin"' >> $@
|
||||
|
||||
################################################################################
|
||||
# Copy these makefiles into the root of the kit
|
||||
$(PREFIX)/Makefile: ./Makefile
|
||||
rm -rf $@
|
||||
cp $< $@
|
||||
|
||||
$(PREFIX)/Tools.gmk: ./Tools.gmk
|
||||
rm -rf $@
|
||||
cp $< $@
|
||||
|
||||
$(PREFIX)/Tars.gmk: ./Tars.gmk
|
||||
rm -rf $@
|
||||
cp $< $@
|
||||
|
||||
THESE_MAKEFILES := $(PREFIX)/Makefile $(PREFIX)/Tools.gmk $(PREFIX)/Tars.gmk
|
||||
|
||||
################################################################################
|
||||
|
||||
ifeq ($(TARGET), $(HOST))
|
||||
# To build with dtrace support, the build needs access to the dtrace executable from the
|
||||
# sysroot. Generally we don't want to add binaries in the sysroot to the path, but
|
||||
# luckily this seems to execute well enough on a different host Linux distro, so symlink
|
||||
# it into the main bin dir.
|
||||
$(PREFIX)/bin/dtrace:
|
||||
@echo 'Creating dtrace soft link'
|
||||
ln -s ../$(HOST)/sysroot/usr/bin/dtrace $@
|
||||
|
||||
$(PREFIX)/bin/%:
|
||||
@echo 'Creating missing $* soft link'
|
||||
ln -s $(TARGET)-$* $@
|
||||
|
||||
MISSING_LINKS := $(addprefix $(PREFIX)/bin/, \
|
||||
addr2line ar as c++ c++filt dwp elfedit g++ gcc gcc-$(GCC_VER_ONLY) gprof ld ld.bfd \
|
||||
ld.gold nm objcopy objdump ranlib readelf size strings strip)
|
||||
endif
|
||||
|
||||
# Add link to work around "plugin needed to handle lto object" (JDK-8344272)
|
||||
$(PREFIX)/lib/bfd-plugins/liblto_plugin.so: $(PREFIX)/libexec/gcc/$(TARGET)/$(GCC_VER_ONLY)/liblto_plugin.so
|
||||
@echo 'Creating missing $(@F) soft link'
|
||||
@mkdir -p $(@D)
|
||||
ln -s $$(realpath -s --relative-to=$(@D) $<) $@
|
||||
|
||||
MISSING_LINKS += $(PREFIX)/lib/bfd-plugins/liblto_plugin.so
|
||||
|
||||
################################################################################
|
||||
|
||||
bfdlib : $(BFDLIB)
|
||||
binutils : $(BINUTILS)
|
||||
rpms : $(RPMS)
|
||||
libs : $(LIBS)
|
||||
sysroot : rpms libs
|
||||
gcc : sysroot $(GCC) $(GCC_PATCHED)
|
||||
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)
|
||||
|
||||
.PHONY : gcc all binutils bfdlib link_libs rpms libs sysroot
|
||||
154
make/devkit/createAutoconfBundle.sh
Normal file
154
make/devkit/createAutoconfBundle.sh
Normal file
|
|
@ -0,0 +1,154 @@
|
|||
#!/bin/bash -e
|
||||
#
|
||||
# Copyright (c) 2018, 2025, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Create a bundle in OpenJDK build folder, containing what's needed to run
|
||||
# the 'autoconf' program by the OpenJDK build. To override TARGET_PLATFORM
|
||||
# just set the variable before running this script.
|
||||
|
||||
# This script fetches sources from network so make sure your proxy is setup appropriately.
|
||||
|
||||
# colored print to highlight some of the logs
|
||||
function print_log()
|
||||
{
|
||||
Color_Cyan='\033[1;36m' # Cyan
|
||||
Color_Off='\033[0m' # Reset color
|
||||
printf "${Color_Cyan}> $1${Color_Off}\n"
|
||||
}
|
||||
|
||||
|
||||
# Autoconf depends on m4, so download and build that first.
|
||||
AUTOCONF_VERSION=2.69
|
||||
M4_VERSION=1.4.18
|
||||
|
||||
PACKAGE_VERSION=1.0.1
|
||||
case `uname -s` in
|
||||
Darwin)
|
||||
os=macosx
|
||||
;;
|
||||
Linux)
|
||||
os=linux
|
||||
;;
|
||||
CYGWIN*)
|
||||
os=cygwin
|
||||
;;
|
||||
esac
|
||||
case `uname -m` in
|
||||
arm64|aarch64)
|
||||
arch=aarch64
|
||||
;;
|
||||
amd64|x86_64|x64)
|
||||
arch=x64
|
||||
;;
|
||||
esac
|
||||
TARGET_PLATFORM=${TARGET_PLATFORM:="${os}_${arch}"}
|
||||
|
||||
MODULE_NAME=autoconf-$TARGET_PLATFORM-$AUTOCONF_VERSION+$PACKAGE_VERSION
|
||||
BUNDLE_NAME=$MODULE_NAME.tar.gz
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BASEDIR="$(cd "$SCRIPT_DIR/../.." > /dev/null && pwd)"
|
||||
OUTPUT_ROOT="$BASEDIR/build/autoconf"
|
||||
|
||||
IMAGE_DIR=$OUTPUT_ROOT/$MODULE_NAME
|
||||
mkdir -p $IMAGE_DIR/usr
|
||||
cd $OUTPUT_ROOT
|
||||
|
||||
# Download and build m4
|
||||
|
||||
if test "x$TARGET_PLATFORM" = xcygwin_x64; then
|
||||
# On cygwin 64-bit, just copy the cygwin .exe file
|
||||
mkdir -p $IMAGE_DIR/usr/bin
|
||||
cp /usr/bin/m4 $IMAGE_DIR/usr/bin
|
||||
elif test "x$TARGET_PLATFORM" = xcygwin_x86; then
|
||||
# On cygwin 32-bit, just copy the cygwin .exe file
|
||||
mkdir -p $IMAGE_DIR/usr/bin
|
||||
cp /usr/bin/m4 $IMAGE_DIR/usr/bin
|
||||
elif test "x$TARGET_PLATFORM" = xlinux_x64; then
|
||||
M4_VERSION=1.4.13-5
|
||||
wget https://yum.oracle.com/repo/OracleLinux/OL6/latest/x86_64/getPackage/m4-$M4_VERSION.el6.x86_64.rpm
|
||||
cd $IMAGE_DIR
|
||||
rpm2cpio $OUTPUT_ROOT/m4-$M4_VERSION.el6.x86_64.rpm | cpio -d -i
|
||||
elif test "x$TARGET_PLATFORM" = xlinux_x86; then
|
||||
M4_VERSION=1.4.13-5
|
||||
wget https://yum.oracle.com/repo/OracleLinux/OL6/latest/i386/getPackage/m4-$M4_VERSION.el6.i686.rpm
|
||||
cd $IMAGE_DIR
|
||||
rpm2cpio $OUTPUT_ROOT/m4-$M4_VERSION.el6.i686.rpm | cpio -d -i
|
||||
else
|
||||
print_log "m4: download"
|
||||
wget https://ftp.gnu.org/gnu/m4/m4-$M4_VERSION.tar.gz
|
||||
tar -xzf m4-$M4_VERSION.tar.gz
|
||||
cd m4-$M4_VERSION
|
||||
print_log "m4: configure"
|
||||
./configure --prefix=$IMAGE_DIR/usr CFLAGS="-w -Wno-everything"
|
||||
print_log "m4: make"
|
||||
make
|
||||
print_log "m4: make install"
|
||||
make install
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# Download and build autoconf
|
||||
|
||||
print_log "autoconf: download"
|
||||
wget https://ftp.gnu.org/gnu/autoconf/autoconf-$AUTOCONF_VERSION.tar.gz
|
||||
tar -xzf autoconf-$AUTOCONF_VERSION.tar.gz
|
||||
cd autoconf-$AUTOCONF_VERSION
|
||||
print_log "autoconf: configure"
|
||||
./configure --prefix=$IMAGE_DIR/usr M4=$IMAGE_DIR/usr/bin/m4
|
||||
print_log "autoconf: make"
|
||||
make
|
||||
print_log "autoconf: make install"
|
||||
make install
|
||||
cd ..
|
||||
|
||||
# The resulting scripts from installation folder use absolute paths to reference other files within installation folder
|
||||
print_log "replace absolue paths from installation files with a relative ."
|
||||
perl -pi -e "s!$IMAGE_DIR/!./!" $IMAGE_DIR/usr/bin/auto* $IMAGE_DIR/usr/share/autoconf/autom4te.cfg
|
||||
|
||||
print_log "creating $IMAGE_DIR/autoconf wrapper script"
|
||||
cat > $IMAGE_DIR/autoconf << EOF
|
||||
#!/bin/bash
|
||||
# Get an absolute path to this script
|
||||
this_script_dir=\`dirname \$0\`
|
||||
this_script_dir=\`cd \$this_script_dir > /dev/null && pwd\`
|
||||
|
||||
export M4="\$this_script_dir/usr/bin/m4"
|
||||
export AUTOM4TE="\$this_script_dir/usr/bin/autom4te"
|
||||
export AUTOCONF="\$this_script_dir/usr/bin/autoconf"
|
||||
export AUTOHEADER="\$this_script_dir/usr/bin/autoheader"
|
||||
export AC_MACRODIR="\$this_script_dir/usr/share/autoconf"
|
||||
export autom4te_perllibdir="\$this_script_dir/usr/share/autoconf"
|
||||
|
||||
PREPEND_INCLUDE="--prepend-include \$this_script_dir/usr/share/autoconf"
|
||||
|
||||
exec \$this_script_dir/usr/bin/autoconf \$PREPEND_INCLUDE "\$@"
|
||||
EOF
|
||||
|
||||
chmod +x $IMAGE_DIR/autoconf
|
||||
|
||||
print_log "archiving $IMAGE_DIR directory as $OUTPUT_ROOT/$BUNDLE_NAME"
|
||||
cd $IMAGE_DIR
|
||||
tar -cvzf $OUTPUT_ROOT/$BUNDLE_NAME *
|
||||
131
make/devkit/createGraphvizBundle.sh
Normal file
131
make/devkit/createGraphvizBundle.sh
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2017, 2024, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
# Create a bundle in the current directory, containing what's needed to run
|
||||
# the 'dot' program from the graphviz suite by the OpenJDK build.
|
||||
|
||||
set -eux
|
||||
|
||||
mydir="$(cd -- $(dirname ${BASH_SOURCE[0]}) && pwd)"
|
||||
me="${mydir}/$(basename ${BASH_SOURCE[0]})"
|
||||
|
||||
EXPAT_VERSION="2.6.0"
|
||||
EXPAT_URL="https://github.com/libexpat/libexpat/releases/download/R_${EXPAT_VERSION//./_}/expat-${EXPAT_VERSION}.tar.gz"
|
||||
EXPAT_SHA256="a13447b9aa67d7c860783fdf6820f33ebdea996900d6d8bbc50a628f55f099f7"
|
||||
|
||||
GRAPHVIZ_VERSION="9.0.0"
|
||||
GRAPHVIZ_URL="https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/${GRAPHVIZ_VERSION}/graphviz-${GRAPHVIZ_VERSION}.tar.xz"
|
||||
GRAPHVIZ_SHA256="6c9afda06a732af7658c2619ee713d2545818c3ff19b7b8fd48effcd06d57bf6"
|
||||
|
||||
uname_s="$(uname -s)"
|
||||
case ${uname_s} in
|
||||
Linux)
|
||||
bundle_os="linux"
|
||||
shacmd="sha256sum --strict --check -"
|
||||
lib_path_var="LD_LIBRARY_PATH"
|
||||
;;
|
||||
Darwin)
|
||||
bundle_os="macosx"
|
||||
shacmd="shasum -a 256 --strict --check -"
|
||||
lib_path_var="DYLD_LIBRARY_PATH"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown OS: ${uname_s}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
uname_m="$(uname -m)"
|
||||
case ${uname_m} in
|
||||
aarch64|arm64)
|
||||
bundle_cpu="aarch64"
|
||||
;;
|
||||
x86_64)
|
||||
bundle_cpu="x64"
|
||||
;;
|
||||
esac
|
||||
bundle_platform="${bundle_os}_${bundle_cpu}"
|
||||
|
||||
build_dir="${mydir}/../../build/graphviz"
|
||||
download_dir="${build_dir}/download"
|
||||
install_dir="${build_dir}/result/graphviz-${bundle_platform}-${GRAPHVIZ_VERSION}"
|
||||
bundle_file="${install_dir}.tar.gz"
|
||||
|
||||
expat_dir="${build_dir}/expat"
|
||||
expat_src_dir="${expat_dir}/src"
|
||||
|
||||
graphviz_dir="${build_dir}/graphviz"
|
||||
graphviz_src_dir="${graphviz_dir}/src"
|
||||
graphviz_doc_dir="${install_dir}/doc"
|
||||
|
||||
mkdir -p "${build_dir}"
|
||||
cd "${build_dir}"
|
||||
|
||||
download_and_unpack() {
|
||||
local url="$1"
|
||||
local sha256="$2"
|
||||
local file="$3"
|
||||
local dir="$4"
|
||||
|
||||
mkdir -p "$(dirname "${file}")"
|
||||
if [ ! -f "${file}" ]; then
|
||||
curl -L -o "${file}" "${url}"
|
||||
fi
|
||||
echo "${sha256} ${file}" | ${shacmd}
|
||||
if [ ! -d "${dir}" ]; then
|
||||
mkdir -p "${dir}"
|
||||
tar --extract --file "${file}" --directory "${dir}" --strip-components 1
|
||||
fi
|
||||
}
|
||||
|
||||
download_and_unpack "${EXPAT_URL}" "${EXPAT_SHA256}" "${download_dir}/expat.tar.gz" "${expat_src_dir}"
|
||||
download_and_unpack "${GRAPHVIZ_URL}" "${GRAPHVIZ_SHA256}" "${download_dir}/graphviz.tar.gz" "${graphviz_src_dir}"
|
||||
|
||||
(
|
||||
cd "${expat_src_dir}"
|
||||
./configure --prefix="${install_dir}"
|
||||
make -j install
|
||||
)
|
||||
|
||||
(
|
||||
cd "${graphviz_src_dir}"
|
||||
./configure --prefix="${install_dir}" EXPAT_CFLAGS="-I${install_dir}/include" EXPAT_LIBS="-L${install_dir}/lib -lexpat"
|
||||
make -j install
|
||||
)
|
||||
|
||||
cat > "${install_dir}/dot" << EOF
|
||||
#!/bin/bash
|
||||
# Get an absolute path to this script
|
||||
this_script_dir="\$(dirname \$0)"
|
||||
this_script_dir="\$(cd \${this_script_dir} > /dev/null && pwd)"
|
||||
export ${lib_path_var}="\${this_script_dir}/lib:\${this_script_dir}/lib/graphviz"
|
||||
exec "\${this_script_dir}/bin/dot" "\$@"
|
||||
EOF
|
||||
chmod +x "${install_dir}/dot"
|
||||
# create config file
|
||||
"${install_dir}/dot" -c
|
||||
|
||||
cp "${me}" "${install_dir}"
|
||||
|
||||
tar --create --gzip --file "${bundle_file}" -C "${install_dir}" .
|
||||
63
make/devkit/createJMHBundle.sh
Normal file
63
make/devkit/createJMHBundle.sh
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
#!/bin/bash -e
|
||||
#
|
||||
# Copyright (c) 2018, 2024, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
# Create a bundle in the build directory, containing what's needed to
|
||||
# build and run JMH microbenchmarks from the OpenJDK build.
|
||||
|
||||
JMH_VERSION=1.37
|
||||
COMMONS_MATH3_VERSION=3.6.1
|
||||
JOPT_SIMPLE_VERSION=5.0.4
|
||||
MAVEN_MIRROR=${MAVEN_MIRROR:-https://repo.maven.apache.org/maven2}
|
||||
|
||||
BUNDLE_NAME=jmh-$JMH_VERSION.tar.gz
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BUILD_DIR="${SCRIPT_DIR}/../../build/jmh"
|
||||
JAR_DIR="$BUILD_DIR/jars"
|
||||
|
||||
mkdir -p $BUILD_DIR $JAR_DIR
|
||||
cd $JAR_DIR
|
||||
rm -f *
|
||||
|
||||
fetchJar() {
|
||||
url="${MAVEN_MIRROR}/$1/$2/$3/$2-$3.jar"
|
||||
if command -v curl > /dev/null; then
|
||||
curl -OL --fail $url
|
||||
elif command -v wget > /dev/null; then
|
||||
wget $url
|
||||
else
|
||||
echo "Could not find either curl or wget"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
fetchJar org/apache/commons commons-math3 $COMMONS_MATH3_VERSION
|
||||
fetchJar net/sf/jopt-simple jopt-simple $JOPT_SIMPLE_VERSION
|
||||
fetchJar org/openjdk/jmh jmh-core $JMH_VERSION
|
||||
fetchJar org/openjdk/jmh jmh-generator-annprocess $JMH_VERSION
|
||||
|
||||
tar -cvzf ../$BUNDLE_NAME *
|
||||
|
||||
echo "Created $BUILD_DIR/$BUNDLE_NAME"
|
||||
170
make/devkit/createLibffiBundle.sh
Normal file
170
make/devkit/createLibffiBundle.sh
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2023, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This script generates a libffi bundle. On linux by building it from source
|
||||
# using a devkit, which should match the devkit used to build the JDK.
|
||||
#
|
||||
# Set MAKE_ARGS to add parameters to make. Ex:
|
||||
#
|
||||
# $ MAKE_ARGS=-j32 bash createLibffiBundle.sh
|
||||
#
|
||||
# The script tries to behave well on multiple invocations, only performing steps
|
||||
# not already done. To redo a step, manually delete the target files from that
|
||||
# step.
|
||||
#
|
||||
# Note that the libtool and texinfo packages are needed to build libffi
|
||||
# $ sudo apt install libtool texinfo
|
||||
|
||||
# Note that while the build system supports linking against libffi on Windows (x64),
|
||||
# I couldn't get this script working with a Windows devkit, and instead had to manually create
|
||||
# a libffi bundle for Windows. The steps I took were as follows:
|
||||
#
|
||||
# 1. run 'x64 Native Tools Command Prompt for VS 2022'. After that, cl.exe and link.exe should be on path
|
||||
#
|
||||
# 2. in the same shell, run `ucrt64` (this is one of the shell environments that comes with MSYS2).
|
||||
# This should carry over the environment set up by the VS dev prompt into the ucrt64 prompt.
|
||||
#
|
||||
# 3. then, in the libffi repo root folder:
|
||||
# 3.a run `autogen.sh`
|
||||
# 3.b run:
|
||||
# ```
|
||||
# bash configure \
|
||||
# CC="/path/to/libffi/msvcc.sh -m64" \
|
||||
# CXX="/path/to/libffi/msvcc.sh -m64" \
|
||||
# CPPFLAGS="-DFFI_BUILDING_DLL" \
|
||||
# --disable-docs \
|
||||
# --prefix=<install dest>
|
||||
# ```
|
||||
# (`<install dest>` can be whatever you like. That's what you point `--with-libffi` to).
|
||||
#
|
||||
# 4. run `make install`. This should create the `<install dest>` directory with the files:
|
||||
# `include/ffi.h`, `include/ffitarget.h`, `lib/libffi.dll`. It also creates a `lib/libffi.lib` file,
|
||||
# but it is of the wrong file type, `DLL` rather than `LIBRARY`.
|
||||
#
|
||||
# 5. Manually create a working `.lib` file (in the <install dest>/lib dir):
|
||||
# 5.a use `dumpbin /exports libffi.dll` to get a list of exported symbols
|
||||
# 5.b put them in a `libffi.def` file: `EXPORTS` on the first line, then a symbol on each line following
|
||||
# 5.c run `lib /def:libffi.def /machine:x64 /out:libffi.lib` to create the right `.lib` file (`lib` is a visual studio tool)
|
||||
#
|
||||
|
||||
LIBFFI_VERSION=3.4.2
|
||||
|
||||
BUNDLE_NAME=libffi-$LIBFFI_VERSION.tar.gz
|
||||
|
||||
SCRIPT_FILE="$(basename $0)"
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
OUTPUT_DIR="${SCRIPT_DIR}/../../build/libffi"
|
||||
SRC_DIR="$OUTPUT_DIR/src"
|
||||
DOWNLOAD_DIR="$OUTPUT_DIR/download"
|
||||
INSTALL_DIR="$OUTPUT_DIR/install"
|
||||
IMAGE_DIR="$OUTPUT_DIR/image"
|
||||
OS_NAME=$(uname -s)
|
||||
|
||||
USAGE="$0 <devkit dir>"
|
||||
|
||||
if [ "$1" = "" ]; then
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
DEVKIT_DIR="$1"
|
||||
|
||||
# Download source distros
|
||||
mkdir -p $DOWNLOAD_DIR
|
||||
cd $DOWNLOAD_DIR
|
||||
SOURCE_TAR=v$LIBFFI_VERSION.tar.gz
|
||||
if [ ! -f $SOURCE_TAR ]; then
|
||||
wget https://github.com/libffi/libffi/archive/refs/tags/v$LIBFFI_VERSION.tar.gz
|
||||
fi
|
||||
|
||||
# Unpack src
|
||||
mkdir -p $SRC_DIR
|
||||
cd $SRC_DIR
|
||||
LIBFFI_DIRNAME=libffi-$LIBFFI_VERSION
|
||||
LIBFFI_DIR=$SRC_DIR/$LIBFFI_DIRNAME
|
||||
if [ ! -d $LIBFFI_DIRNAME ]; then
|
||||
echo "Unpacking $SOURCE_TAR"
|
||||
tar xf $DOWNLOAD_DIR/$SOURCE_TAR
|
||||
fi
|
||||
|
||||
# Build
|
||||
cd $LIBFFI_DIR
|
||||
if [ ! -e $LIBFFI_DIR/configure ]; then
|
||||
bash ./autogen.sh
|
||||
fi
|
||||
|
||||
case $OS_NAME in
|
||||
Linux)
|
||||
CC=$DEVKIT_DIR/bin/gcc
|
||||
CXX=$DEVKIT_DIR/bin/g++
|
||||
# For Linux/x86 it's under /lib/ instead of /lib64/
|
||||
LIB_FOLDER=lib64
|
||||
LIB_NAME=libffi.so*
|
||||
;;
|
||||
Darwin)
|
||||
CC=$DEVKIT_DIR/Xcode/Contents/Developer/usr/bin/gcc
|
||||
CXX=$DEVKIT_DIR/Xcode/Contents/Developer/usr/bin/gcc
|
||||
LIB_FOLDER=lib
|
||||
LIB_NAME=libffi.*.dylib
|
||||
;;
|
||||
*)
|
||||
echo " Unsupported OS: $OS_NAME"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# For Linux/x86, add --build=i686-pc-linux-gnu CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32
|
||||
bash ./configure \
|
||||
--disable-docs \
|
||||
--prefix=$INSTALL_DIR \
|
||||
CC=$CC \
|
||||
CXX=$CXX
|
||||
|
||||
# Run with nice to keep system usable during build.
|
||||
nice make $MAKE_ARGS install
|
||||
|
||||
mkdir -p $IMAGE_DIR
|
||||
# Extract what we need into an image
|
||||
if [ ! -e $IMAGE_DIR/lib/libffi.so ]; then
|
||||
echo "Copying ${LIB_NAME} to image"
|
||||
mkdir -p $IMAGE_DIR/lib
|
||||
cp -a $INSTALL_DIR/${LIB_FOLDER}/${LIB_NAME} $IMAGE_DIR/lib/
|
||||
fi
|
||||
if [ ! -e $IMAGE_DIR/include/ ]; then
|
||||
echo "Copying include to image"
|
||||
mkdir -p $IMAGE_DIR/include
|
||||
cp -a $INSTALL_DIR/include/. $IMAGE_DIR/include/
|
||||
fi
|
||||
if [ ! -e $IMAGE_DIR/$SCRIPT_FILE ]; then
|
||||
echo "Copying this script to image"
|
||||
cp -a $SCRIPT_DIR/$SCRIPT_FILE $IMAGE_DIR/
|
||||
fi
|
||||
|
||||
# Create bundle
|
||||
if [ ! -e $OUTPUT_DIR/$BUNDLE_NAME ]; then
|
||||
echo "Creating $OUTPUT_DIR/$BUNDLE_NAME"
|
||||
cd $IMAGE_DIR
|
||||
tar zcf $OUTPUT_DIR/$BUNDLE_NAME *
|
||||
fi
|
||||
140
make/devkit/createMacosxDevkit.sh
Normal file
140
make/devkit/createMacosxDevkit.sh
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2023, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This script copies parts of an Xcode installation into a devkit suitable
|
||||
# for building OpenJDK and OracleJDK. The installation Xcode_X.X.xip needs
|
||||
# to be either installed or extracted using for example Archive Utility.
|
||||
# The easiest way to accomplish this is to right click the file in Finder
|
||||
# and choose "Open With -> Archive Utility", or possible typing
|
||||
# "open Xcode_9.2.xip" in a terminal.
|
||||
# erik.joelsson@oracle.com
|
||||
|
||||
USAGE="$0 <Xcode.app>"
|
||||
|
||||
if [ "$1" = "" ]; then
|
||||
echo $USAGE
|
||||
exit 1
|
||||
fi
|
||||
|
||||
XCODE_APP="$1"
|
||||
XCODE_APP_DIR_NAME="${XCODE_APP##*/}"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
|
||||
|
||||
# Find the version of Xcode
|
||||
XCODE_VERSION="$($XCODE_APP/Contents/Developer/usr/bin/xcodebuild -version \
|
||||
| awk '/Xcode/ { print $2 }' )"
|
||||
SDK_VERSION="$(ls $XCODE_APP/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs \
|
||||
| grep [0-9] | sort -r | head -n1 | sed 's/\.sdk//')"
|
||||
|
||||
DEVKIT_ROOT="${BUILD_DIR}/Xcode${XCODE_VERSION}-${SDK_VERSION}"
|
||||
DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
|
||||
|
||||
echo "Xcode version: $XCODE_VERSION"
|
||||
echo "SDK version: $SDK_VERSION"
|
||||
echo "Creating devkit in $DEVKIT_ROOT"
|
||||
|
||||
mkdir -p $DEVKIT_ROOT
|
||||
|
||||
################################################################################
|
||||
# Copy the relevant parts of Xcode.app, removing things that are both big and
|
||||
# unnecessary for our purposes, without building an impossibly long exclude list.
|
||||
EXCLUDE_DIRS=" \
|
||||
Contents/_CodeSignature \
|
||||
Contents/Applications \
|
||||
Contents/Resources \
|
||||
Contents/Library \
|
||||
Contents/XPCServices \
|
||||
Contents/OtherFrameworks \
|
||||
Contents/Developer/Documentation \
|
||||
Contents/Developer/usr/share \
|
||||
Contents/Developer/usr/libexec/git-core \
|
||||
Contents/Developer/usr/bin/git* \
|
||||
Contents/Developer/usr/bin/svn* \
|
||||
Contents/Developer/usr/lib/libgit* \
|
||||
Contents/Developer/usr/lib/libsvn* \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/${SDK_VERSION}.sdk/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/Developer/usr/share/man \
|
||||
Contents/Developer/Platforms/MacOSX.platform/usr \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/sourcekitd.framework \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/libexec/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/swift* \
|
||||
Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/arc \
|
||||
Platforms/AppleTVSimulator.platform \
|
||||
Platforms/iPhoneSimulator.platform \
|
||||
Platforms/WatchSimulator.platform \
|
||||
Contents/SharedFrameworks/ModelIO.framework \
|
||||
Contents/SharedFrameworks/XCSUI.framework \
|
||||
Contents/SharedFrameworks/SceneKit.framework \
|
||||
Contents/SharedFrameworks/XCBuild.framework \
|
||||
Contents/SharedFrameworks/GPUTools*.framework \
|
||||
Contents/SharedFrameworks/DNTDocumentationSupport.framework/Versions/A/Resources/external \
|
||||
$(cd $XCODE_APP && ls -d Contents/Developer/Platforms/* \
|
||||
| grep -v MacOSX.platform | grep -v WatchSimulator.platform) \
|
||||
"
|
||||
|
||||
for ex in $EXCLUDE_DIRS; do
|
||||
EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude=$ex"
|
||||
done
|
||||
|
||||
echo "Copying Xcode.app..."
|
||||
echo rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP/." $DEVKIT_ROOT/Xcode
|
||||
rsync -rlH $INCLUDE_ARGS $EXCLUDE_ARGS "$XCODE_APP/." $DEVKIT_ROOT/Xcode
|
||||
|
||||
################################################################################
|
||||
|
||||
echo-info() {
|
||||
echo "$1" >> $DEVKIT_ROOT/devkit.info
|
||||
}
|
||||
|
||||
echo "Generating devkit.info..."
|
||||
rm -f $DEVKIT_ROOT/devkit.info
|
||||
echo-info "# This file describes to configure how to interpret the contents of this devkit"
|
||||
echo-info "DEVKIT_NAME=\"Xcode $XCODE_VERSION (devkit)\""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH=\"\$DEVKIT_ROOT/Xcode/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:\$DEVKIT_ROOT/Xcode/Contents/Developer/usr/bin\""
|
||||
echo-info "DEVKIT_SYSROOT=\"\$DEVKIT_ROOT/Xcode/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/$SDK_VERSION.sdk\""
|
||||
echo-info "DEVKIT_EXTRA_PATH=\"\$DEVKIT_TOOLCHAIN_PATH\""
|
||||
|
||||
################################################################################
|
||||
# Copy this script
|
||||
|
||||
echo "Copying this script..."
|
||||
cp $0 $DEVKIT_ROOT/
|
||||
|
||||
################################################################################
|
||||
# Create bundle
|
||||
|
||||
echo "Creating bundle..."
|
||||
GZIP=$(command -v pigz)
|
||||
if [ -z "$GZIP" ]; then
|
||||
GZIP="gzip"
|
||||
fi
|
||||
(cd $DEVKIT_ROOT && tar c - . | $GZIP - > "$DEVKIT_BUNDLE")
|
||||
79
make/devkit/createPandocBundle.sh
Normal file
79
make/devkit/createPandocBundle.sh
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#!/bin/bash -e
|
||||
#
|
||||
# Copyright (c) 2017, 2022, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
# Create a bundle in the current directory, containing what's needed to run
|
||||
# the 'pandoc' program by the OpenJDK build.
|
||||
|
||||
TMPDIR=`mktemp -d -t pandocbundle-XXXX`
|
||||
trap "rm -rf \"$TMPDIR\"" EXIT
|
||||
|
||||
ORIG_DIR=`pwd`
|
||||
cd "$TMPDIR"
|
||||
PANDOC_VERSION=2.19.2
|
||||
PACKAGE_VERSION=1.0
|
||||
TARGET_PLATFORM=linux_x64
|
||||
if [ $# = 1 ]; then
|
||||
TARGET_PLATFORM="$1"
|
||||
fi
|
||||
|
||||
PANDOC_EXE="pandoc"
|
||||
PANDOC_PATH="bin/$PANDOC_EXE"
|
||||
if [[ $TARGET_PLATFORM == linux_x64 ]] ; then
|
||||
PANDOC_PLATFORM=linux-amd64
|
||||
PANDOC_SUFFIX=tar.gz
|
||||
elif [[ $TARGET_PLATFORM == linux_aarch64 ]] ; then
|
||||
PANDOC_PLATFORM=linux-arm64
|
||||
PANDOC_SUFFIX=tar.gz
|
||||
elif [[ $TARGET_PLATFORM == macosx_x64 ]] ; then
|
||||
PANDOC_PLATFORM=macOS
|
||||
PANDOC_SUFFIX=zip
|
||||
elif [[ $TARGET_PLATFORM == windows_x64 ]] ; then
|
||||
PANDOC_PLATFORM=windows-x86_64
|
||||
PANDOC_SUFFIX=zip
|
||||
PANDOC_EXE="pandoc.exe"
|
||||
PANDOC_PATH="$PANDOC_EXE"
|
||||
else
|
||||
echo "Unknown platform"
|
||||
exit 1
|
||||
fi
|
||||
BUNDLE_NAME=pandoc-$TARGET_PLATFORM-$PANDOC_VERSION+$PACKAGE_VERSION.tar.gz
|
||||
|
||||
wget https://github.com/jgm/pandoc/releases/download/$PANDOC_VERSION/pandoc-$PANDOC_VERSION-$PANDOC_PLATFORM.$PANDOC_SUFFIX
|
||||
|
||||
mkdir tmp
|
||||
cd tmp
|
||||
if [[ $PANDOC_SUFFIX == zip ]]; then
|
||||
unzip ../pandoc-$PANDOC_VERSION-$PANDOC_PLATFORM.$PANDOC_SUFFIX
|
||||
else
|
||||
tar xzf ../pandoc-$PANDOC_VERSION-$PANDOC_PLATFORM.$PANDOC_SUFFIX
|
||||
fi
|
||||
cd ..
|
||||
|
||||
mkdir pandoc
|
||||
cp tmp/pandoc-$PANDOC_VERSION/$PANDOC_PATH pandoc
|
||||
chmod +x pandoc/$PANDOC_EXE
|
||||
|
||||
tar -cvzf ../$BUNDLE_NAME pandoc
|
||||
cp ../$BUNDLE_NAME "$ORIG_DIR"
|
||||
86
make/devkit/createTidyBundle.sh
Normal file
86
make/devkit/createTidyBundle.sh
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2024, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Creates a tidy bundle in the build directory. A dependency that can be
|
||||
# used to validate and correct HTML.
|
||||
|
||||
# wget, cmake and gcc are required to build tidy.
|
||||
|
||||
set -e
|
||||
|
||||
GITHUB_USER="htacg"
|
||||
REPO_NAME="tidy-html5"
|
||||
COMMIT_HASH="d08ddc2860aa95ba8e301343a30837f157977cba"
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
INSTALL_PREFIX="${SCRIPT_DIR}/../../build/tidy/tidy/"
|
||||
BUILD_DIR="build/cmake"
|
||||
|
||||
OS_NAME=$(uname -s)
|
||||
OS_ARCH=$(uname -m)
|
||||
|
||||
DOWNLOAD_URL="https://github.com/$GITHUB_USER/$REPO_NAME/archive/$COMMIT_HASH.tar.gz"
|
||||
OUTPUT_FILE="$REPO_NAME-$COMMIT_HASH.tar.gz"
|
||||
|
||||
wget "$DOWNLOAD_URL" -O "$OUTPUT_FILE"
|
||||
|
||||
tar -xzf "$OUTPUT_FILE"
|
||||
rm -rf "$OUTPUT_FILE"
|
||||
|
||||
SRC_DIR="$REPO_NAME-$COMMIT_HASH"
|
||||
|
||||
mkdir -p "$SRC_DIR/$BUILD_DIR"
|
||||
cd "$SRC_DIR/$BUILD_DIR"
|
||||
|
||||
case $OS_NAME in
|
||||
Linux|Darwin)
|
||||
echo "Building Tidy HTML5 for Unix-like platform ($OS_NAME)..."
|
||||
|
||||
CMAKE_ARCH_OPTIONS=""
|
||||
if [ "$OS_NAME" == "Darwin" ]; then
|
||||
if [[ "$OS_ARCH" == "arm64" || "$OS_ARCH" == "x86_64" ]]; then
|
||||
CMAKE_ARCH_OPTIONS="-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64"
|
||||
fi
|
||||
fi
|
||||
|
||||
cmake ../.. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$INSTALL_PREFIX" $CMAKE_ARCH_OPTIONS
|
||||
make install
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unsupported OS: $OS_NAME"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
cd "$SCRIPT_DIR"
|
||||
rm -rf "$SRC_DIR"
|
||||
|
||||
cd "$INSTALL_PREFIX.."
|
||||
PACKAGED_FILE="tidy-html5.tar.gz"
|
||||
|
||||
tar -czvf "$PACKAGED_FILE" -C "$INSTALL_PREFIX.." tidy
|
||||
|
||||
echo "Created $INSTALL_PREFIX..$PACKAGED_FILE"
|
||||
310
make/devkit/createWindowsDevkit.sh
Normal file
310
make/devkit/createWindowsDevkit.sh
Normal file
|
|
@ -0,0 +1,310 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright (c) 2015, 2025, 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
|
||||
# particular file as subject to the "Classpath" exception as provided
|
||||
# by Oracle in the LICENSE file that accompanied this code.
|
||||
#
|
||||
# This code 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
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# This script copies parts of a Visual Studio installation into a devkit
|
||||
# suitable for building OpenJDK and OracleJDK. Needs to run in Cygwin or WSL.
|
||||
#
|
||||
# To include the debugger tools for the jtreg failure_handler, those need to
|
||||
# be explicitly added to the Windows SDK installation first. That is done
|
||||
# through Windows Settings - Apps, find the Windows Software Development Kit
|
||||
# installation, click modify, and add the debugger tools.
|
||||
#
|
||||
# erik.joelsson@oracle.com
|
||||
|
||||
usage_and_exit() {
|
||||
echo "Usage: createWindowsDevkit.sh <2019 | 2022>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! $# = 1 ]; then
|
||||
usage_and_exit
|
||||
fi
|
||||
|
||||
VS_VERSION="$1"
|
||||
|
||||
VS_DLL_VERSION="140"
|
||||
SDK_VERSION="10"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname $0)" > /dev/null && pwd)"
|
||||
BUILD_DIR="${SCRIPT_DIR}/../../build/devkit"
|
||||
|
||||
################################################################################
|
||||
# Prepare settings
|
||||
|
||||
UNAME_SYSTEM=`uname -s`
|
||||
UNAME_RELEASE=`uname -r`
|
||||
UNAME_OS=`uname -o`
|
||||
|
||||
# Detect cygwin or WSL
|
||||
IS_CYGWIN=`echo $UNAME_SYSTEM | grep -i CYGWIN`
|
||||
IS_WSL=`echo $UNAME_RELEASE | grep Microsoft`
|
||||
IS_MSYS=`echo $UNAME_OS | grep -i Msys`
|
||||
MSYS2_ARG_CONV_EXCL="*" # make "cmd.exe /c" work for msys2
|
||||
CMD_EXE="cmd.exe /c"
|
||||
|
||||
# Detect host architecture to determine devkit platform support
|
||||
# Note: The devkit always includes x86, x64, and aarch64 libraries and tools
|
||||
# The difference is in toolchain capabilities:
|
||||
# - On x64|AMD64 hosts: aarch64 tools are cross-compilation tools (Hostx64/arm64)
|
||||
# - On aarch64|ARMv8 hosts: aarch64 tools are native tools (Hostarm64/arm64)
|
||||
HOST_ARCH=`echo $PROCESSOR_IDENTIFIER`
|
||||
case $HOST_ARCH in
|
||||
AMD64)
|
||||
echo "Running on x64 host - generating devkit with native x86/x64 tools and cross-compiled aarch64 tools."
|
||||
echo "For native aarch64 compilation tools, run this script on a Windows/aarch64 machine."
|
||||
SUPPORTED_PLATFORMS="x86, x64 (native) and aarch64 (cross-compiled)"
|
||||
;;
|
||||
ARMv8)
|
||||
echo "Running on aarch64 host - generating devkit with native tools for all platforms (x86, x64, aarch64)."
|
||||
SUPPORTED_PLATFORMS="x86, x64, and aarch64 (all native)"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown host architecture: $HOST_ARCH"
|
||||
echo "Proceeding with devkit generation - toolchain capabilities may vary."
|
||||
SUPPORTED_PLATFORMS="x86, x64, and aarch64"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "x$IS_CYGWIN" != "x"; then
|
||||
BUILD_ENV="cygwin"
|
||||
elif test "x$IS_MSYS" != "x"; then
|
||||
BUILD_ENV="cygwin"
|
||||
elif test "x$IS_WSL" != "x"; then
|
||||
BUILD_ENV="wsl"
|
||||
else
|
||||
echo "Unknown environment; only Cygwin/MSYS2/WSL are supported."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test "x$BUILD_ENV" = "xcygwin"; then
|
||||
WINDOWS_PATH_TO_UNIX_PATH="cygpath -u"
|
||||
elif test "x$BUILD_ENV" = "xwsl"; then
|
||||
WINDOWS_PATH_TO_UNIX_PATH="wslpath -u"
|
||||
fi
|
||||
|
||||
# Work around the insanely named ProgramFiles(x86) env variable
|
||||
PROGRAMFILES_X86="$($WINDOWS_PATH_TO_UNIX_PATH "$(${CMD_EXE} set | sed -n 's/^ProgramFiles(x86)=//p' | tr -d '\r')")"
|
||||
PROGRAMFILES="$($WINDOWS_PATH_TO_UNIX_PATH "$PROGRAMFILES")"
|
||||
|
||||
case $VS_VERSION in
|
||||
2019)
|
||||
MSVC_PROGRAMFILES_DIR="${PROGRAMFILES_X86}"
|
||||
MSVC_CRT_DIR="Microsoft.VC142.CRT"
|
||||
VS_VERSION_NUM_NODOT="160"
|
||||
;;
|
||||
|
||||
2022)
|
||||
MSVC_PROGRAMFILES_DIR="${PROGRAMFILES}"
|
||||
MSVC_CRT_DIR="Microsoft.VC143.CRT"
|
||||
VS_VERSION_NUM_NODOT="170"
|
||||
;;
|
||||
*)
|
||||
echo "Unexpected VS version: $VS_VERSION"
|
||||
usage_and_exit
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# Find Visual Studio installation dir
|
||||
VSNNNCOMNTOOLS=`${CMD_EXE} echo %VS${VS_VERSION_NUM_NODOT}COMNTOOLS% | tr -d '\r'`
|
||||
VSNNNCOMNTOOLS="$($WINDOWS_PATH_TO_UNIX_PATH "$VSNNNCOMNTOOLS")"
|
||||
if [ -d "$VSNNNCOMNTOOLS" ]; then
|
||||
VS_INSTALL_DIR="$VSNNNCOMNTOOLS/../.."
|
||||
else
|
||||
VS_INSTALL_DIR="${MSVC_PROGRAMFILES_DIR}/Microsoft Visual Studio/$VS_VERSION"
|
||||
VS_INSTALL_DIR="$(ls -d "${VS_INSTALL_DIR}/"{Community,Professional,Enterprise} 2>/dev/null | head -n1)"
|
||||
fi
|
||||
echo "VSNNNCOMNTOOLS: $VSNNNCOMNTOOLS"
|
||||
echo "VS_INSTALL_DIR: $VS_INSTALL_DIR"
|
||||
|
||||
# Extract semantic version
|
||||
POTENTIAL_INI_FILES="Common7/IDE/wdexpress.isolation.ini Common7/IDE/devenv.isolation.ini"
|
||||
for f in $POTENTIAL_INI_FILES; do
|
||||
if [ -f "$VS_INSTALL_DIR/$f" ]; then
|
||||
VS_VERSION_SP="$(grep ^SemanticVersion= "$VS_INSTALL_DIR/$f")"
|
||||
# Remove SemanticVersion=
|
||||
VS_VERSION_SP="${VS_VERSION_SP#*=}"
|
||||
# Remove suffix of too detailed numbering starting with +
|
||||
VS_VERSION_SP="${VS_VERSION_SP%+*}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$VS_VERSION_SP" ]; then
|
||||
echo "Failed to find SP version"
|
||||
exit 1
|
||||
fi
|
||||
echo "Found Version SP: $VS_VERSION_SP"
|
||||
|
||||
# Setup output dirs
|
||||
DEVKIT_ROOT="${BUILD_DIR}/VS${VS_VERSION}-${VS_VERSION_SP}-devkit"
|
||||
DEVKIT_BUNDLE="${DEVKIT_ROOT}.tar.gz"
|
||||
|
||||
echo "Creating devkit in $DEVKIT_ROOT"
|
||||
echo "Platform support: $SUPPORTED_PLATFORMS"
|
||||
|
||||
MSVCR_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}.dll
|
||||
VCRUNTIME_1_DLL=${MSVC_CRT_DIR}/vcruntime${VS_DLL_VERSION}_1.dll
|
||||
MSVCP_DLL=${MSVC_CRT_DIR}/msvcp${VS_DLL_VERSION}.dll
|
||||
|
||||
################################################################################
|
||||
# Copy Visual Studio files
|
||||
|
||||
TOOLS_VERSION="$(ls "$VS_INSTALL_DIR/VC/Tools/MSVC" | sort -r -n | head -n1)"
|
||||
echo "Found Tools version: $TOOLS_VERSION"
|
||||
VC_SUBDIR="VC/Tools/MSVC/$TOOLS_VERSION"
|
||||
REDIST_VERSION="$(ls "$VS_INSTALL_DIR/VC/Redist/MSVC" | sort -r -n | head -n1)"
|
||||
echo "Found Redist version: $REDIST_VERSION"
|
||||
REDIST_SUBDIR="VC/Redist/MSVC/$REDIST_VERSION"
|
||||
echo "Copying VC..."
|
||||
rm -rf $DEVKIT_ROOT/VC
|
||||
mkdir -p $DEVKIT_ROOT/VC/bin
|
||||
if [ -d "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostarm64/arm64" ]; then
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostarm64/arm64" $DEVKIT_ROOT/VC/bin/
|
||||
else
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/arm64" $DEVKIT_ROOT/VC/bin/
|
||||
fi
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx64/x64" $DEVKIT_ROOT/VC/bin/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/bin/Hostx86/x86" $DEVKIT_ROOT/VC/bin/
|
||||
mkdir -p $DEVKIT_ROOT/VC/lib
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/arm64" $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x64" $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/lib/x86" $DEVKIT_ROOT/VC/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/include" $DEVKIT_ROOT/VC/
|
||||
mkdir -p $DEVKIT_ROOT/VC/atlmfc/lib
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/arm64" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x64" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/lib/x86" $DEVKIT_ROOT/VC/atlmfc/lib/
|
||||
cp -r "$VS_INSTALL_DIR/${VC_SUBDIR}/atlmfc/include" $DEVKIT_ROOT/VC/atlmfc/
|
||||
mkdir -p $DEVKIT_ROOT/VC/Auxiliary
|
||||
cp -r "$VS_INSTALL_DIR/VC/Auxiliary/Build" $DEVKIT_ROOT/VC/Auxiliary/
|
||||
mkdir -p $DEVKIT_ROOT/VC/redist
|
||||
cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/arm64" $DEVKIT_ROOT/VC/redist/
|
||||
cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x64" $DEVKIT_ROOT/VC/redist/
|
||||
cp -r "$VS_INSTALL_DIR/$REDIST_SUBDIR/x86" $DEVKIT_ROOT/VC/redist/
|
||||
|
||||
# The redist runtime libs are needed to run the compiler but may not be
|
||||
# installed on the machine where the devkit will be used.
|
||||
cp $DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x86
|
||||
cp $DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x86
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/x64
|
||||
cp $DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/x64
|
||||
cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL $DEVKIT_ROOT/VC/bin/arm64
|
||||
cp $DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL $DEVKIT_ROOT/VC/bin/arm64
|
||||
|
||||
################################################################################
|
||||
# Copy SDK files
|
||||
|
||||
SDK_INSTALL_DIR=`${CMD_EXE} echo %WindowsSdkDir% | tr -d '\r'`
|
||||
SDK_INSTALL_DIR="$($WINDOWS_PATH_TO_UNIX_PATH "$SDK_INSTALL_DIR")"
|
||||
if [ ! -d "$SDK_INSTALL_DIR" ]; then
|
||||
SDK_INSTALL_DIR="$PROGRAMFILES_X86/Windows Kits/$SDK_VERSION"
|
||||
fi
|
||||
echo "SDK_INSTALL_DIR: $SDK_INSTALL_DIR"
|
||||
|
||||
SDK_FULL_VERSION="$(ls "$SDK_INSTALL_DIR/bin" | sort -r -n | head -n1)"
|
||||
echo "Found SDK version: $SDK_FULL_VERSION"
|
||||
UCRT_VERSION="$(ls "$SDK_INSTALL_DIR/Redist" | grep $SDK_VERSION | sort -r -n | head -n1)"
|
||||
echo "Found UCRT version: $UCRT_VERSION"
|
||||
echo "Copying SDK..."
|
||||
rm -rf $DEVKIT_ROOT/$SDK_VERSION
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/bin
|
||||
cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x64" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
cp -r "$SDK_INSTALL_DIR/bin/$SDK_FULL_VERSION/x86" $DEVKIT_ROOT/$SDK_VERSION/bin/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/lib
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/arm64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist
|
||||
cp -r "$SDK_INSTALL_DIR/Redist/$UCRT_VERSION/ucrt" $DEVKIT_ROOT/$SDK_VERSION/Redist/
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include
|
||||
cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/
|
||||
if [ -d "$SDK_INSTALL_DIR/Debuggers" ]; then
|
||||
mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/arm64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/x64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/x86" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/arm64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/x64" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
cp -r "$SDK_INSTALL_DIR/Debuggers/lib/x86" $DEVKIT_ROOT/$SDK_VERSION/Debuggers/lib/
|
||||
else
|
||||
echo "No SDK debuggers found, skipping"
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# Generate devkit.info
|
||||
|
||||
echo-info() {
|
||||
echo "$1" >> $DEVKIT_ROOT/devkit.info
|
||||
}
|
||||
|
||||
echo "Generating devkit.info..."
|
||||
rm -f $DEVKIT_ROOT/devkit.info
|
||||
echo-info "# This file describes to configure how to interpret the contents of this devkit"
|
||||
echo-info "DEVKIT_NAME=\"Microsoft Visual Studio $VS_VERSION $VS_VERSION_SP (devkit)\""
|
||||
echo-info "DEVKIT_VS_VERSION=\"$VS_VERSION\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86=\"\$DEVKIT_ROOT/VC/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/x86\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\""
|
||||
echo-info "DEVKIT_UCRT_DLL_DIR_x86=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x86\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/x64\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_VCRUNTIME_1_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$VCRUNTIME_1_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\""
|
||||
echo-info "DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLCHAIN_PATH_aarch64=\"\$DEVKIT_ROOT/VC/bin/arm64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86:\$DEVKIT_ROOT/$SDK_VERSION/Debuggers/arm64\""
|
||||
echo-info "DEVKIT_VS_INCLUDE_aarch64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\""
|
||||
echo-info "DEVKIT_VS_LIB_aarch64=\"\$DEVKIT_ROOT/VC/lib/arm64;\$DEVKIT_ROOT/VC/atlmfc/lib/arm64;\$DEVKIT_ROOT/$SDK_VERSION/lib/arm64\""
|
||||
echo-info "DEVKIT_MSVCR_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCR_DLL\""
|
||||
echo-info "DEVKIT_VCRUNTIME_1_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$VCRUNTIME_1_DLL\""
|
||||
echo-info "DEVKIT_MSVCP_DLL_aarch64=\"\$DEVKIT_ROOT/VC/redist/arm64/$MSVCP_DLL\""
|
||||
echo-info "DEVKIT_UCRT_DLL_DIR_aarch64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/arm64\""
|
||||
echo-info ""
|
||||
echo-info "DEVKIT_TOOLS_VERSION=\"$TOOLS_VERSION\""
|
||||
echo-info "DEVKIT_REDIST_VERSION=\"$REDIST_VERSION\""
|
||||
echo-info "DEVKIT_SDK_VERSION=\"$SDK_FULL_VERSION\""
|
||||
echo-info "DEVKIT_UCRT_VERSION=\"$UCRT_VERSION\""
|
||||
|
||||
################################################################################
|
||||
# Copy this script
|
||||
|
||||
echo "Copying this script..."
|
||||
cp $0 $DEVKIT_ROOT/
|
||||
|
||||
################################################################################
|
||||
# Create bundle
|
||||
|
||||
echo "Creating bundle: $DEVKIT_BUNDLE"
|
||||
(cd "$DEVKIT_ROOT" && tar zcf "$DEVKIT_BUNDLE" .)
|
||||
14
make/devkit/patches/riscv64-gcc-11.3.0.patch
Normal file
14
make/devkit/patches/riscv64-gcc-11.3.0.patch
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
diff -ur a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
|
||||
--- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp 2022-11-30 12:25:37.363419659 +0100
|
||||
+++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp 2022-11-30 12:42:48.135412054 +0100
|
||||
@@ -59,7 +59,9 @@
|
||||
|
||||
#if !SANITIZER_ANDROID
|
||||
#include <fstab.h>
|
||||
-#include <sys/mount.h>
|
||||
+// sys/mount.h conflicts with linux/fs.h in glibc 2.36+
|
||||
+// See https://sourceware.org/glibc/wiki/Release/2.36#Usage_of_.3Clinux.2Fmount.h.3E_and_.3Csys.2Fmount.h.3E
|
||||
+// This has been fixed elsewhere, but apparently not in Fedora riscv.
|
||||
#include <sys/timeb.h>
|
||||
#include <utmpx.h>
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue