cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
194 lines
8.6 KiB
CMake
194 lines
8.6 KiB
CMake
#
|
|
#//===----------------------------------------------------------------------===//
|
|
#//
|
|
#// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
#// See https://llvm.org/LICENSE.txt for license information.
|
|
#// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#//
|
|
#//===----------------------------------------------------------------------===//
|
|
#
|
|
|
|
# Setup the flags correctly for cmake (covert to string)
|
|
# Pretty them up (STRIP any beginning and trailing whitespace,
|
|
# remove duplicates, remove empty entries)
|
|
macro(libomp_setup_flags flags)
|
|
if(NOT "${${flags}}" STREQUAL "") # if flags are empty, don't do anything
|
|
set(flags_local)
|
|
list(REMOVE_DUPLICATES ${flags}) # remove duplicates
|
|
list(REMOVE_ITEM ${flags} "") # remove empty items
|
|
libomp_list_to_string("${${flags}}" flags_local)
|
|
string(STRIP "${flags_local}" flags_local)
|
|
set(${flags} "${flags_local}")
|
|
endif()
|
|
endmacro()
|
|
|
|
# C++ compiler flags
|
|
function(libomp_get_cxxflags cxxflags)
|
|
set(flags_local)
|
|
|
|
# GCC silently accepts any -Wno-<foo> option, but warns about those options
|
|
# being unrecognized only if the compilation triggers other warnings to be
|
|
# printed. Therefore, check for whether the compiler supports options in the
|
|
# form -W<foo>, and if supported, add the corresponding -Wno-<foo> option.
|
|
|
|
libomp_append(flags_local -fno-exceptions LIBOMP_HAVE_FNO_EXCEPTIONS_FLAG)
|
|
libomp_append(flags_local -fno-rtti LIBOMP_HAVE_FNO_RTTI_FLAG)
|
|
libomp_append(flags_local -Wno-class-memaccess LIBOMP_HAVE_WCLASS_MEMACCESS_FLAG)
|
|
libomp_append(flags_local -Wno-covered-switch-default LIBOMP_HAVE_WCOVERED_SWITCH_DEFAULT_FLAG)
|
|
libomp_append(flags_local -Wno-frame-address LIBOMP_HAVE_WFRAME_ADDRESS_FLAG)
|
|
libomp_append(flags_local -Wno-strict-aliasing LIBOMP_HAVE_WSTRICT_ALIASING_FLAG)
|
|
libomp_append(flags_local -Wstringop-overflow=0 LIBOMP_HAVE_WSTRINGOP_OVERFLOW_FLAG)
|
|
libomp_append(flags_local -Wno-stringop-truncation LIBOMP_HAVE_WSTRINGOP_TRUNCATION_FLAG)
|
|
libomp_append(flags_local -Wno-switch LIBOMP_HAVE_WSWITCH_FLAG)
|
|
libomp_append(flags_local -Wno-uninitialized LIBOMP_HAVE_WUNINITIALIZED_FLAG)
|
|
libomp_append(flags_local -Wno-return-type-c-linkage LIBOMP_HAVE_WRETURN_TYPE_C_LINKAGE_FLAG)
|
|
libomp_append(flags_local -Wno-cast-qual LIBOMP_HAVE_WCAST_QUAL_FLAG)
|
|
libomp_append(flags_local -Wno-int-to-void-pointer-cast LIBOMP_HAVE_WINT_TO_VOID_POINTER_CAST_FLAG)
|
|
# libomp_append(flags_local -Wconversion LIBOMP_HAVE_WCONVERSION_FLAG)
|
|
libomp_append(flags_local /GS LIBOMP_HAVE_GS_FLAG)
|
|
libomp_append(flags_local /EHsc LIBOMP_HAVE_EHSC_FLAG)
|
|
libomp_append(flags_local /Oy- LIBOMP_HAVE_OY__FLAG)
|
|
if(${IA32} OR ${INTEL64})
|
|
libomp_append(flags_local -mrtm LIBOMP_HAVE_MRTM_FLAG)
|
|
endif()
|
|
# Intel(R) C Compiler flags
|
|
libomp_append(flags_local /Qsafeseh LIBOMP_HAVE_QSAFESEH_FLAG)
|
|
libomp_append(flags_local -Qoption,cpp,--extended_float_types LIBOMP_HAVE_EXTENDED_FLOAT_TYPES_FLAG)
|
|
libomp_append(flags_local -Qlong_double LIBOMP_HAVE_LONG_DOUBLE_FLAG)
|
|
libomp_append(flags_local -Qdiag-disable:177 LIBOMP_HAVE_DIAG_DISABLE_177_FLAG)
|
|
if(${RELEASE_BUILD} OR ${RELWITHDEBINFO_BUILD})
|
|
libomp_append(flags_local -Qinline-min-size=1 LIBOMP_HAVE_INLINE_MIN_SIZE_FLAG)
|
|
endif()
|
|
# Architectural C and C++ flags
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
libomp_append(flags_local -m32 LIBOMP_HAVE_M32_FLAG)
|
|
endif()
|
|
if(${IA32})
|
|
libomp_append(flags_local /arch:SSE2 LIBOMP_HAVE_ARCH_SSE2_FLAG)
|
|
libomp_append(flags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
|
|
libomp_append(flags_local -falign-stack=maintain-16-byte LIBOMP_HAVE_FALIGN_STACK_FLAG)
|
|
elseif(${MIC})
|
|
libomp_append(flags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
|
|
libomp_append(flags_local -ftls-model=initial-exec LIBOMP_HAVE_FTLS_MODEL_FLAG)
|
|
libomp_append(flags_local "-opt-streaming-stores never" LIBOMP_HAVE_OPT_STREAMING_STORES_FLAG)
|
|
endif()
|
|
set(cxxflags_local ${flags_local} ${LIBOMP_CXXFLAGS})
|
|
libomp_setup_flags(cxxflags_local)
|
|
set(${cxxflags} ${cxxflags_local} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Assembler flags
|
|
function(libomp_get_asmflags asmflags)
|
|
set(asmflags_local)
|
|
# Architectural assembler flags
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
libomp_append(asmflags_local -m32 LIBOMP_HAVE_M32_FLAG)
|
|
endif()
|
|
if(${IA32})
|
|
libomp_append(asmflags_local /safeseh LIBOMP_HAVE_SAFESEH_MASM_FLAG)
|
|
libomp_append(asmflags_local /coff LIBOMP_HAVE_COFF_MASM_FLAG)
|
|
elseif(${MIC})
|
|
libomp_append(asmflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
|
|
endif()
|
|
set(asmflags_local ${asmflags_local} ${LIBOMP_ASMFLAGS})
|
|
libomp_setup_flags(asmflags_local)
|
|
set(${asmflags} ${asmflags_local} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Linker flags
|
|
function(libomp_get_ldflags ldflags)
|
|
set(ldflags_local)
|
|
libomp_append(ldflags_local "${CMAKE_LINK_DEF_FILE_FLAG}${CMAKE_CURRENT_BINARY_DIR}/${LIBOMP_LIB_NAME}.def"
|
|
IF_DEFINED CMAKE_LINK_DEF_FILE_FLAG)
|
|
libomp_append(ldflags_local "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
|
|
IF_DEFINED CMAKE_C_OSX_CURRENT_VERSION_FLAG)
|
|
libomp_append(ldflags_local "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}${LIBOMP_VERSION_MAJOR}.${LIBOMP_VERSION_MINOR}"
|
|
IF_DEFINED CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG)
|
|
libomp_append(ldflags_local -Wl,--as-needed LIBOMP_HAVE_AS_NEEDED_FLAG)
|
|
libomp_append(ldflags_local "-Wl,--version-script=${LIBOMP_SRC_DIR}/exports_so.txt" LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
|
|
libomp_append(ldflags_local -static-libgcc LIBOMP_HAVE_STATIC_LIBGCC_FLAG)
|
|
libomp_append(ldflags_local -Wl,-z,noexecstack LIBOMP_HAVE_Z_NOEXECSTACK_FLAG)
|
|
libomp_append(ldflags_local -no-intel-extensions LIBOMP_HAVE_NO_INTEL_EXTENSIONS_FLAG)
|
|
libomp_append(ldflags_local -static-intel LIBOMP_HAVE_STATIC_INTEL_FLAG)
|
|
libomp_append(ldflags_local /SAFESEH LIBOMP_HAVE_SAFESEH_FLAG)
|
|
# Architectural linker flags
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
libomp_append(ldflags_local -m32 LIBOMP_HAVE_M32_FLAG)
|
|
endif()
|
|
if(${IA32})
|
|
libomp_append(ldflags_local -msse2 LIBOMP_HAVE_MSSE2_FLAG)
|
|
elseif(${MIC})
|
|
libomp_append(ldflags_local -mmic LIBOMP_HAVE_MMIC_FLAG)
|
|
libomp_append(ldflags_local -Wl,-x LIBOMP_HAVE_X_FLAG)
|
|
endif()
|
|
set(ldflags_local ${ldflags_local} ${LIBOMP_LDFLAGS})
|
|
libomp_setup_flags(ldflags_local)
|
|
set(${ldflags} ${ldflags_local} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Library flags
|
|
function(libomp_get_libflags libflags)
|
|
set(libflags_local)
|
|
libomp_append(libflags_local "${CMAKE_THREAD_LIBS_INIT}")
|
|
libomp_append(libflags_local "${LIBOMP_HWLOC_LIBRARY}" LIBOMP_USE_HWLOC)
|
|
if(${IA32})
|
|
libomp_append(libflags_local -lirc_pic LIBOMP_HAVE_IRC_PIC_LIBRARY)
|
|
endif()
|
|
if(MINGW)
|
|
libomp_append(libflags_local -lpsapi LIBOMP_HAVE_PSAPI)
|
|
endif()
|
|
if(LIBOMP_HAVE_SHM_OPEN_WITH_LRT)
|
|
libomp_append(libflags_local -lrt)
|
|
endif()
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "DragonFly|FreeBSD|OpenBSD")
|
|
libomp_append(libflags_local "-Wl,--no-as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
|
|
libomp_append(libflags_local "-lm")
|
|
libomp_append(libflags_local "-Wl,--as-needed" LIBOMP_HAVE_AS_NEEDED_FLAG)
|
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly")
|
|
libomp_append(libflags_local "-lkvm")
|
|
endif()
|
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux|NetBSD|SunOS")
|
|
libomp_append(libflags_local -lm)
|
|
endif()
|
|
set(libflags_local ${libflags_local} ${LIBOMP_LIBFLAGS})
|
|
libomp_setup_flags(libflags_local)
|
|
libomp_string_to_list("${libflags_local}" libflags_local_list)
|
|
set(${libflags} ${libflags_local_list} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Fortran flags
|
|
function(libomp_get_fflags fflags)
|
|
set(fflags_local)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
libomp_append(fflags_local -m32 LIBOMP_HAVE_M32_FORTRAN_FLAG)
|
|
endif()
|
|
set(fflags_local ${fflags_local} ${LIBOMP_FFLAGS})
|
|
libomp_setup_flags(fflags_local)
|
|
set(${fflags} ${fflags_local} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
# Python generate-defs.py flags (For Windows only)
|
|
function(libomp_get_gdflags gdflags)
|
|
set(gdflags_local)
|
|
if(${IA32})
|
|
set(libomp_gdflag_arch arch_32)
|
|
libomp_append(gdflags_local "-D IS_IA_ARCH")
|
|
elseif(${INTEL64})
|
|
set(libomp_gdflag_arch arch_32e)
|
|
libomp_append(gdflags_local "-D IS_IA_ARCH")
|
|
else()
|
|
set(libomp_gdflag_arch arch_${LIBOMP_ARCH})
|
|
endif()
|
|
libomp_append(gdflags_local "-D ${libomp_gdflag_arch}")
|
|
libomp_append(gdflags_local "-D msvc_compat")
|
|
libomp_append(gdflags_local "-D norm" NORMAL_LIBRARY)
|
|
libomp_append(gdflags_local "-D prof" PROFILE_LIBRARY)
|
|
libomp_append(gdflags_local "-D stub" STUBS_LIBRARY)
|
|
libomp_append(gdflags_local "-D HAVE_QUAD" LIBOMP_USE_QUAD_PRECISION)
|
|
libomp_append(gdflags_local "-D USE_DEBUGGER" LIBOMP_USE_DEBUGGER)
|
|
if(${DEBUG_BUILD} OR ${RELWITHDEBINFO_BUILD})
|
|
libomp_append(gdflags_local "-D KMP_DEBUG")
|
|
endif()
|
|
set(${gdflags} ${gdflags_local} PARENT_SCOPE)
|
|
endfunction()
|