commit 0a6ff3d9d91f5437868d949af72354af743b30e1 Author: Silvan Calarco Date: Mon Dec 23 12:47:18 2024 +0100 Release 1.0 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1ea668d --- /dev/null +++ b/Makefile @@ -0,0 +1,52 @@ +# Makefile for openmamba-rpm-config +# Copyright (c) 2024 by Silvan Calarco +# Released under the terms of the GNU GPLv3 license + +PACKAGE=openmamba-rpm-config + +distdir = $(PACKAGE)-$(VERSION) +dist_archive = $(distdir).tar.bz2 + +include VERSION + +# System locations +prefix = /usr +rpmdir = ${prefix}/lib/rpm +srcdir = . + +DESTDIR = +INSTALL = /usr/bin/install +INSTALL_PROGRAM = ${INSTALL} -m 755 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_DIR = ${INSTALL} -d -m 755 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} + +all: + +install-dirs: + @$(INSTALL_DIR) $(DESTDIR)$(rpmdir)/openmamba + +install-data: + @$(INSTALL_DATA) openmamba/macros $(DESTDIR)$(rpmdir)/openmamba/macros + @$(INSTALL_DATA) openmamba/rpmrc $(DESTDIR)$(rpmdir)/openmamba/rpmrc + +install-programs: + @$(INSTALL_SCRIPT) openmamba/brp-strip-lto $(DESTDIR)$(rpmdir)/openmamba/brp-strip-lto + +install: install-dirs install-data install-programs + +clean: + rm -f $(dist_archive) + +dist: clean + @mkdir /tmp/$(distdir) + @cp -a * /tmp/$(distdir)/ + @rm -f $(dist_archive);\ + tar cf - -C /tmp $(distdir) | bzip2 -9 -c > $(dist_archive) + @rm -rf /tmp/$(distdir) + @echo "file \`$(dist_archive)' created" + +dist-rpm: dist + @rpm_sourcedir=`rpm --eval=%{_sourcedir}`;\ + mv -f $(PACKAGE)-$(VERSION).tar.bz2 $$rpm_sourcedir;\ + echo "File $$rpm_sourcedir/$(PACKAGE)-$(VERSION).tar.bz2 created." diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..d53e27c --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +VERSION=1.0 diff --git a/openmamba/brp-strip-lto b/openmamba/brp-strip-lto new file mode 100755 index 0000000..9d36b74 --- /dev/null +++ b/openmamba/brp-strip-lto @@ -0,0 +1,18 @@ +#!/usr/bin/sh +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +STRIP=${1:-strip} +NCPUS=${RPM_BUILD_NCPUS:-1} + +case `uname -a` in +Darwin*) exit 0 ;; +*) ;; +esac + +# Strip ELF binaries +find "$RPM_BUILD_ROOT" -type f -name '*.[ao]' \! -regex "$RPM_BUILD_ROOT/*usr/lib/debug.*" -print0 | \ + eu-elfclassify --not-program --not-library --not-linux-kernel-module --stdin0 --print0 | \ + xargs -0 -r -P$NCPUS -n32 sh -c "$STRIP -p -R .gnu.lto_* -R .gnu.debuglto_* -R .llvm.lto -N __gnu_lto_v1 \"\$@\"" ARG0 diff --git a/openmamba/macros b/openmamba/macros new file mode 100644 index 0000000..e3eb960 --- /dev/null +++ b/openmamba/macros @@ -0,0 +1,141 @@ +# GCC toolchain +%__cc_gcc gcc +%__cxx_gcc g++ +%__cpp_gcc gcc -E + +# Clang toolchain +%__cc_clang clang +%__cxx_clang clang++ +%__cpp_clang clang-cpp + +# Default to the GCC toolchain +%toolchain gcc + +%__cc %{expand:%%{__cc_%{toolchain}}} +%__cxx %{expand:%%{__cxx_%{toolchain}}} +%__cpp %{expand:%%{__cpp_%{toolchain}}} + +# Compiler macros to use for invoking compilers in spec files for packages that +# want to use the default compiler and don't care which compiler that is. +%build_cc %{__cc} +%build_cxx %{__cxx} +%build_cpp %{__cpp} + +#============================================================================== +# --- Compiler flags control. +# +# Please consult buildflags.md for parts that can be configured +# from RPM spec files. + +# Use the remove-section option to force the find-debuginfo script +# to move the annobin notes into the separate debuginfo file. +%_find_debuginfo_extra_opts %{?_annotated_build:--remove-section .gnu.build.attributes} + +# Include frame pointer information by default +# Use "%undefine _include_frame_pointers" to disable. +%_include_frame_pointers %{undefined rhel} || 0%{?rhel} >= 11 +%_frame_pointers_cflags %{expr:0%{?_include_frame_pointers} ? "-fno-omit-frame-pointer" : ""} +%_frame_pointers_cflags_x86_64 %{expr:0%{?_include_frame_pointers} ? "-mno-omit-leaf-frame-pointer" : ""} +%_frame_pointers_cflags_aarch64 %{expr:0%{?_include_frame_pointers} ? "-mno-omit-leaf-frame-pointer" : ""} +%_frame_pointers_cflags_s390x %{expr:0%{?_include_frame_pointers} ? "-mbackchain" : ""} + +# Fail linking if there are undefined symbols. Required for proper +# ELF symbol versioning support. Disabled by default. +# Use "%define _ld_strict_symbol_defs 1" to enable. +#%_ld_strict_symbol_defs 1 +%_ld_symbols_flags %{?_ld_strict_symbol_defs:-Wl,-z,defs} + +# use "%undefine _ld_as_needed" to disable. +%_ld_as_needed 1 +%_ld_as_needed_flags %{?_ld_as_needed:-Wl,--as-needed} + +# s390x currently does not support packed relocations. +%_ld_pack_relocs %[ "%{_arch}" == "x86_64" || "%{_arch}" == "i386" || "%{_arch}" == "ppc64le" || "%{_arch}" == "aarch64"] +%_ld_pack_relocs_flags %[0%{?_ld_pack_relocs} ? "-Wl,-z,pack-relative-relocs" : ""] + +# LTO is the default in openmamba. +# "%define _lto_cflags %{nil}" to opt out +# +# We currently have -ffat-lto-objects turned on out of an abundance of +# caution. To remove it we need to do a check of the installed .o/.a files +# to verify they have real sections/symbols after LTO stripping. That +# way we can detect installing an unusable .o/.a file. This is on the TODO +# list for F34. +%_gcc_lto_cflags -flto=auto -ffat-lto-objects +%_clang_lto_cflags -flto=thin -ffat-lto-objects +%_lto_cflags %{expand:%%{_%{toolchain}_lto_cflags}} + +# Default fortification level. +# "%define _fortify_level 2" to downgrade and +# "%define _fortify_level 0" or "%undefine _fortify_level" to disable +# +# We use a single -Wp here to enforce order so that ccache does not ever +# reorder them. +%_fortify_level 3 +%_fortify_level_flags %[ 0%{?_fortify_level} > 0 ? "-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=%{_fortify_level}" : "" ] + +# This can be set to a positive integer to obtain increasing type +# safety levels for C. See buildflags.md. +%build_type_safety_c 3 + +# Some linkers default to a build-id algorithm that is not supported by rpmbuild, +# so we need to specify the right algorithm to use. +%_build_id_flags -Wl,--build-id=sha1 + +%_general_options -O2 %{?_lto_cflags} -fexceptions -g -grecord-gcc-switches -pipe +%_warning_options -Wall%[%__build_for_lang_any && "%toolchain" == "gcc" ? " -Wno-complain-wrong-lang" : ""]%[%__build_for_lang_c + %__build_for_lang_cxx ? " -Werror=format-security" : ""]%[%__build_for_lang_c && (%build_type_safety_c == 0) ? " -fpermissive" : ""]%[%__build_for_lang_c && (%build_type_safety_c == 1) ? " -Wno-error=int-conversion" : ""]%[%__build_for_lang_c && (%build_type_safety_c > 0 && %build_type_safety_c < 3) ? " -Wno-error=incompatible-pointer-types" : ""] +%_preprocessor_defines %{_fortify_level_flags} -Wp,-D_GLIBCXX_ASSERTIONS + +# Common variables are no longer generated by default by gcc and clang +# If they are needed then add "%define _legacy_common_support 1" to the spec file. +%_legacy_options %{?_legacy_common_support: -fcommon} + +%__global_compiler_flags %{_general_options} %{_warning_options} %{_preprocessor_defines} %{_legacy_options} + +# Internal macros. Do not use directly. These variables can be rebound +# to suppress certain frontend-specific compiler flags (or in the case +# of __build_for_lang_any, frontend-agnostic flags). Dynamic scoping +# and shadowing redefinitions are used for the __build_for_* variables +# to remain largely compatible with existing spec files that have +# hard-coded assumptions which macros assume which other macros. +# The __build_flags_no_macro_warning construct suppresses a warning +# about unused RPM macros. +%__build_for_lang_c 1 +%__build_for_lang_cxx 1 +%__build_for_lang_any 1 +%__build_flags_no_macro_warning %[%__build_for_lang_c + %__build_for_lang_cxx + %__build_for_lang_any ? "" : ""] +%__build_flags_common() %{expand:%define __build_for_lang_c 0}%{expand:%define __build_for_lang_cxx 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} +%__build_flags_lang_c() %{expand:%define __build_for_lang_cxx 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} +%__build_flags_lang_cxx() %{expand:%define __build_for_lang_c 0}%{expand:%define __build_for_lang_any 0}%{__build_flags_no_macro_warning}%{optflags} + +#--------------------------------------------------------------------- +# Expanded at end of %install scriptlet. +# + +%__arch_install_post %{nil} + +# Standard brp-macro naming: +# convert all '-' in basename to '_', add two leading underscores. +%__brp_compress %{_rpmconfigdir}/brp-compress %{?_prefix} +%__brp_strip %{_rpmconfigdir}/brp-strip %{__strip} +%__brp_strip_lto /usr/lib/rpm/openmamba/brp-strip-lto %{__strip} +%__brp_strip_comment_note %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump} +%__brp_strip_static_archive %{_rpmconfigdir}/brp-strip-static-archive %{__strip} +%__brp_elfperms %{_rpmconfigdir}/brp-elfperms +%__brp_remove_la_files %{_rpmconfigdir}/brp-remove-la-files + +%__os_install_post \ + %{?__brp_compress} \ + %{?__brp_elfperms} \ + %{?__brp_strip} \ + %{?__brp_strip_static_archive} \ + %{?__brp_strip_comment_note} \ + %{?__brp_remove_la_files} \ +%{nil} + +%__spec_install_post\ + %{?__debug_package:%{__debug_install_post}}\ + %{__arch_install_post}\ + %{__os_install_post}\ +%{nil} + diff --git a/openmamba/rpmrc b/openmamba/rpmrc new file mode 100644 index 0000000..d1cbe88 --- /dev/null +++ b/openmamba/rpmrc @@ -0,0 +1,20 @@ +include: /usr/lib/rpm/rpmrc + +optflags: i586 %{__global_compiler_flags} -m32 -march=i586 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection +optflags: i686 %{__global_compiler_flags} -m32 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection +optflags: athlon %{__global_compiler_flags} -m32 -march=athlon -fasynchronous-unwind-tables -fstack-clash-protection +optflags: x86_64 %{__global_compiler_flags} -m64 +optflags: x86_64_v2 %{__global_compiler_flags} -m64 -march=x86-64-v2 +optflags: x86_64_v3 %{__global_compiler_flags} -m64 -march=x86-64-v3 +optflags: x86_64_v4 %{__global_compiler_flags} -m64 -march=x86-64-v4 + +optflags: aarch64 %{__global_compiler_flags} -mbranch-protection=standard -fasynchronous-unwind-tables %[ "%{toolchain}" == "gcc" ? "-fstack-clash-protection" : "" ] + +# set build arch to fedora buildarches on hardware capable of running it +# saves having to do rpmbuild --target= +buildarchtranslate: athlon: i586 +buildarchtranslate: geode: i586 +buildarchtranslate: pentium4: i586 +buildarchtranslate: pentium3: i586 +buildarchtranslate: i686: i586 +buildarchtranslate: i586: i586