diff --git a/package/ctcgfw/port-mirroring/Makefile b/package/ctcgfw/port-mirroring/Makefile deleted file mode 100644 index dbfb27d253..0000000000 --- a/package/ctcgfw/port-mirroring/Makefile +++ /dev/null @@ -1,108 +0,0 @@ -# -# @file Makefile -# -# @author Akagi201 -# @date 2015/03/23 -# -# OpenWrt feeds Makefile -# - -############################################## -# OpenWrt Makefile for port-mirroring program -# -# -# Most of the variables used here are defined in -# the include directives below. We just need to -# specify a basic description of the package, -# where to build our program, where to find -# the source files, and where to install the -# compiled program on the router. -# -# Be very careful of spacing in this file. -# Indents should be tabs, not spaces, and -# there should be no trailing whitespace in -# lines that are not commented. -# -############################################## - -include $(TOPDIR)/rules.mk - -# Name and release number of this package -PKG_NAME:=port-mirroring -PKG_VERSION:=1.3 -PKG_RELEASE:=1 - -# This specifies the directory where we're going to build the program. -# The root build directory, $(BUILD_DIR), is by default the build_mipsel -# directory in your OpenWrt SDK directory -#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -#PKG_SOURCE_URL:=http://port-mirroring.googlecode.com/files/ -#PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/Akagi201/port-mirroring.git -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=master -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk - -# Specify package information for this program. -# The variables defined here should be self explanatory. -# If you are running Kamikaze, delete the DESCRIPTION -# variable below and uncomment the Kamikaze define -# directive for the description below -define Package/port-mirroring - SECTION:=net - CATEGORY:=Network - DEPENDS:=+libpcap +libpthread - TITLE:=port-mirroring tool - URL:=https://github.com/Akagi201/port-mirroring - MENU:=1 -endef - -define Package/port-mirroring/description - port-mirroring offers port mirror in a software. -endef - -# Specify where and how to install the program. Since we only have one file, -# the port-mirroring, install it by copying it to the /bin directory on -# the router. The $(1) variable represents the root directory on the router running -# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install -# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the -# command to copy the binary file from its current location (in our case the build -# directory) to the install directory. -define Package/port-mirroring/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/port-mirroring $(1)/usr/sbin/ - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) $(PKG_BUILD_DIR)/port-mirroring.conf $(1)/etc/config/port-mirroring - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) $(PKG_BUILD_DIR)/port-mirroringd $(1)/etc/init.d/port_mirroring -endef - -define Package/port-mirroring/postinst -#!/bin/sh -if [ -z "$${IPKG_INSTROOT}" ]; then - echo "Enabling rc.d symlink for port-mirroring" - /etc/init.d/port_mirroring enable -fi -exit 0 -endef - -define Package/port-mirroring/prerm -#!/bin/sh -# check if we are on real system -if [ -z "$${IPKG_INSTROOT}" ]; then - echo "Removing rc.d symlink for port-mirroring" - /etc/init.d/port_mirroring disable -fi -exit 0 -endef - -# This line executes the necessary commands to compile our program. -# The above define directives specify all the information needed, but this -# line calls BuildPackage which in turn actually uses this information to -# build a package. -$(eval $(call BuildPackage,port-mirroring)) diff --git a/package/devel/binutils/Makefile b/package/devel/binutils/Makefile index 9f7a0724f4..23f1ea9c25 100644 --- a/package/devel/binutils/Makefile +++ b/package/devel/binutils/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=binutils -PKG_VERSION:=2.34 +PKG_VERSION:=2.35.1 PKG_RELEASE:=1 PKG_SOURCE_URL:=@GNU/binutils PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz PKG_VERSION:=$(PKG_VERSION) -PKG_HASH:=f00b0e8803dc9bab1e2165bd568528135be734df3fabf8d0161828cd56028952 +PKG_HASH:=3ced91db9bf01182b7e420eab68039f2083aed0a214c0424e257eae3ddee8607 PKG_FIXUP:=autoreconf PKG_LIBTOOL_PATHS:=. gas bfd opcodes gprof binutils ld libiberty gold intl diff --git a/package/lean/libcryptopp/Makefile b/package/lean/libcryptopp/Makefile index effc72046d..7f14bf8dcf 100644 --- a/package/lean/libcryptopp/Makefile +++ b/package/lean/libcryptopp/Makefile @@ -17,10 +17,10 @@ PKG_HASH:=db38a15a6b1c337c665e2ebeb731dd0754b05e45504897d0f2fe4ae9f5ee589a PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) -CMAKE_INSTALL:=1 +PKG_FIXUP:=autoreconf +PKG_INSTALL:=1 include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk define Package/libcryptopp SECTION:=libs @@ -36,15 +36,13 @@ define Package/package/libcryptopp abstract base classes. endef -CMAKE_OPTIONS += -DCMAKE_CXX_FLAGS="$(FPIC)" -CMAKE_OPTIONS += -DBUILD_STATIC=ON -CMAKE_OPTIONS += -DBUILD_SHARED=ON - UNPACK_CMD=cd $(PKG_BUILD_DIR) && unzip "$(DL_DIR)/$(PKG_SOURCE)" + define Build/Prepare $(Build/Prepare/Default) cd $(PKG_BUILD_DIR) && rm -f GNUmakefile GNUmakefile-cross endef + define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include/cryptopp $(CP) $(PKG_INSTALL_DIR)/usr/include/cryptopp/* $(1)/usr/include/cryptopp/ diff --git a/package/lean/libcryptopp/src/CMakeLists.txt b/package/lean/libcryptopp/src/CMakeLists.txt deleted file mode 100644 index e4a4d1678b..0000000000 --- a/package/lean/libcryptopp/src/CMakeLists.txt +++ /dev/null @@ -1,1186 +0,0 @@ -# Please ensure your changes or patch meets minimum requirements. -# The minimum requirements are 2.8.6. It roughly equates to -# Ubuntu 14.05 LTS or Solaris 11.3. Please do not check in something -# for 3.5.0 or higher because it will break LTS operating systems -# and a number of developer boards used for testing. To test your -# changes, please set up a Ubuntu 14.05 LTS system. - -# Should we be setting things like this? We are not a C project -# so nothing should be done with the C compiler. But there is -# no reliable way to tell CMake we are C++. -# Cannot set this... Breaks Linux PowerPC with Clang: -# SET(CMAKE_C_COMPILER ${CMAKE_CXX_COMPILER}) -# # error "The CMAKE_C_COMPILER is set to a C++ compiler" - -if(NOT DEFINED cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING) - set(cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING 1) -endif() -if(cryptocpp_DISPLAY_CMAKE_SUPPORT_WARNING) - message( STATUS -"*************************************************************************\n" -"The Crypto++ library does not officially support CMake. CMake support is a\n" -"community effort, and the library works with the folks using CMake to help\n" -"improve it. If you find an issue then please fix it or report it at\n" -"https://github.com/noloader/cryptopp-cmake.\n" -"-- *************************************************************************" -) -endif() - -# Print useful information -message( STATUS "CMake version ${CMAKE_VERSION}" ) - -cmake_minimum_required(VERSION 2.8.6) -if (${CMAKE_VERSION} VERSION_LESS "3.0.0") - project(cryptopp) - set(cryptopp_VERSION_MAJOR 8) - set(cryptopp_VERSION_MINOR 3) - set(cryptopp_VERSION_PATCH 0) -else () - cmake_policy(SET CMP0048 NEW) - project(cryptopp VERSION 8.3.0) - if (NOT ${CMAKE_VERSION} VERSION_LESS "3.1.0") - cmake_policy(SET CMP0054 NEW) - endif () -endif () - -# Need to set SRC_DIR manually after removing the Python library code. -set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}) - -# Make RelWithDebInfo the default (it does e.g. add '-O2 -g -DNDEBUG' for GNU) -# If not in multi-configuration environments, no explicit build type or CXX -# flags are set by the user and if we are the root CMakeLists.txt file. -if (NOT CMAKE_CONFIGURATION_TYPES AND - NOT CMAKE_NO_BUILD_TYPE AND - NOT CMAKE_BUILD_TYPE AND - NOT CMAKE_CXX_FLAGS AND - CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(CMAKE_BUILD_TYPE RelWithDebInfo) -endif () - -include(GNUInstallDirs) -include(CheckCXXCompilerFlag) - -# We now carry around test programs. test_cxx.cxx is the default C++ one. -# Also see https://github.com/weidai11/cryptopp/issues/741. -set(TEST_PROG_DIR ${SRC_DIR}/TestPrograms) -set(TEST_CXX_FILE ${TEST_PROG_DIR}/test_cxx.cxx) - -#============================================================================ -# Settable options -#============================================================================ - -option(BUILD_STATIC "Build static library" ON) -option(BUILD_SHARED "Build shared library" ON) -option(BUILD_TESTING "Build library tests" ON) -option(BUILD_DOCUMENTATION "Use Doxygen to create the HTML based API documentation" OFF) -option(USE_INTERMEDIATE_OBJECTS_TARGET "Use a common intermediate objects target for the static and shared library targets" ON) - -# These are IA-32 options. TODO: Add ARM A-32, Aarch64 and Power8 options. -option(DISABLE_ASM "Disable ASM" OFF) -option(DISABLE_SSSE3 "Disable SSSE3" OFF) -option(DISABLE_SSE4 "Disable SSE4" OFF) -option(DISABLE_AESNI "Disable AES-NI" OFF) -option(DISABLE_SHA "Disable SHA" OFF) -option(DISABLE_AVX "Disable AVX" OFF) -option(DISABLE_AVX2 "Disable AVX2" OFF) -option(CRYPTOPP_NATIVE_ARCH "Enable native architecture" OFF) -set(CRYPTOPP_DATA_DIR "" CACHE PATH "Crypto++ test data directory") - -#============================================================================ -# Compiler options -#============================================================================ - -set(CRYPTOPP_COMPILE_DEFINITIONS) -set(CRYPTOPP_COMPILE_OPTIONS) - -# Stop hiding the damn output... -# set(CMAKE_VERBOSE_MAKEFILE on) - -# Always 1 ahead in Master. Also see http://groups.google.com/forum/#!topic/cryptopp-users/SFhqLDTQPG4 -set(LIB_VER ${cryptopp_VERSION_MAJOR}${cryptopp_VERSION_MINOR}${cryptopp_VERSION_PATCH}) - -# Don't use RPATH's. The resulting binary could fail a security audit. -set(CMAKE_MACOSX_RPATH 0) - -if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - list(APPEND CRYPTOPP_COMPILE_OPTIONS -wd68 -wd186 -wd279 -wd327 -wd161 -wd3180) -endif () - -# Also see http://github.com/weidai11/cryptopp/issues/395 -if (DISABLE_ASM) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ASM) -endif () -if (DISABLE_SSSE3) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE3) -endif () -if (DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SSSE4) -endif () -if (DISABLE_CLMUL) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_CLMUL) -endif () -if (DISABLE_AESNI) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AESNI) -endif () -if (DISABLE_RDRAND) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDRAND) -endif () -if (DISABLE_RDSEED) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_RDSEED) -endif () -if (DISABLE_AVX) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX) -endif () -if (DISABLE_AVX2) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_AVX2) -endif () -if (DISABLE_SHA) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_SHA) -endif () -if (DISABLE_ALTIVEC) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_ALTIVEC) -endif () -if (DISABLE_POWER7) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER7) -endif () -if (DISABLE_POWER8) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER8) -endif () -if (DISABLE_POWER9) - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS CRYPTOPP_DISABLE_POWER9) -endif () -if (NOT CRYPTOPP_DATA_DIR STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "CRYPTOPP_DATA_DIR=${CRYPTOPP_DATA_DIR}") -endif () - -############################################################################### - -# Try to find a Posix compatible grep and sed. Solaris, Digital Unix, -# Tru64, HP-UX and a few others need tweaking - -if (EXISTS /usr/xpg4/bin/grep) - set(GREP_CMD /usr/xpg4/bin/grep) -elseif (EXISTS /usr/gnu/bin/grep) - set(GREP_CMD /usr/gnu/bin/grep) -elseif (EXISTS /usr/linux/bin/grep) - set(GREP_CMD /usr/linux/bin/grep) -else () - set(GREP_CMD grep) -endif () - -if (EXISTS /usr/xpg4/bin/sed) - set(SED_CMD /usr/xpg4/bin/sed) -elseif (EXISTS /usr/gnu/bin/sed) - set(SED_CMD /usr/gnu/bin/sed) -elseif (EXISTS /usr/linux/bin/sed) - set(SED_CMD /usr/linux/bin/sed) -else () - set(SED_CMD sed) -endif () - -############################################################################### - -function(CheckCompileOption opt var) - - if (MSVC) - - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - elseif (CMAKE_CXX_COMPILER_ID MATCHES "SunPro") - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "illegal value ignored" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - # Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. - elseif (CMAKE_CXX_COMPILER MATCHES "xlC") - - message(STATUS "Performing Test ${var}") - execute_process( - COMMAND sh -c "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS} ${opt} -c ${TEST_CXX_FILE} 2>&1" - COMMAND ${GREP_CMD} -i -c -E "Unrecognized value" - RESULT_VARIABLE COMMAND_RESULT - OUTPUT_VARIABLE COMMAND_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE) - - # No dereference below. Thanks for the warning, CMake (not!). - if (COMMAND_RESULT AND NOT COMMAND_OUTPUT) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - else () - - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - endif () - -endfunction(CheckCompileOption) - -function(CheckCompileLinkOption opt var prog) - - if (MSVC) - - # TODO: improve this... - CHECK_CXX_COMPILER_FLAG(${opt} ${var}) - - elseif (APPLE) - - message(STATUS "Performing Test ${var}") - try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt}) - if (COMMAND_SUCCESS) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - else () - - message(STATUS "Performing Test ${var}") - try_compile(COMMAND_SUCCESS ${CMAKE_BINARY_DIR} ${prog} COMPILE_DEFINITIONS ${opt}) - if (COMMAND_SUCCESS) - set(${var} 1 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Success") - else () - set(${var} 0 PARENT_SCOPE) - message(STATUS "Performing Test ${var} - Failed") - endif () - - endif () - -endfunction(CheckCompileLinkOption) - -function(AddCompileOption opt) - - if ("${COMMAND_OUTPUT}" NOT STREQUAL "") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "${opt}") - endif () - -endfunction(AddCompileOption) - -############################################################################### - -function(DumpMachine output pattern) - - if (MSVC) - - # CMake does not provide a generic shell/terminal mechanism - # and Microsoft environments don't know what 'sh' is. - set(${output} 0 PARENT_SCOPE) - - else () - if(CMAKE_SYSTEM_PROCESSOR MATCHES ${pattern}) - set(${output} TRUE PARENT_SCOPE) - endif() - endif() - -endfunction(DumpMachine) - -# Thansk to Anonimal for MinGW; see http://github.com/weidai11/cryptopp/issues/466 -DumpMachine(CRYPTOPP_AMD64 "(x86_64)|(AMD64|amd64)") -DumpMachine(CRYPTOPP_I386 "^i.86$") -DumpMachine(CRYPTOPP_MINGW32 "^mingw32") -DumpMachine(CRYPTOPP_MINGW64 "(w64-mingw32)|(mingw64)") -DumpMachine(CRYPTOPP_X32 "(x32)") -DumpMachine(CRYPTOPP_AARCH32 "^aarch32") -DumpMachine(CRYPTOPP_AARCH64 "^aarch64") -DumpMachine(CRYPTOPP_ARMHF "(armhf)|(arm7l)|(eabihf)") -DumpMachine(CRYPTOPP_ARM "^arm") - -# Detecting PowerPC is only good with GCC. IBM XLC compiler is -# a little different and I don't know how to ask to the triplet -# XLC is targeting. Below we punt by setting CRYPTOPP_POWERPC64 -# if we detect the compiler is XLC. -DumpMachine(CRYPTOPP_POWERPC "^(powerpc|ppc)") -DumpMachine(CRYPTOPP_POWERPC64 "^ppc64") - -############################################################################### - -# Test SunCC for a string like 'CC: Sun C++ 5.13 SunOS_i386' -if (NOT CRYPTOPP_SOLARIS) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "SunOS" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () - -# Test GCC for a string like 'i386-pc-solaris2.11' -if (NOT CRYPTOPP_SOLARIS) - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -dumpmachine 2>&1" - COMMAND ${GREP_CMD} -i -c "Solaris" - OUTPUT_VARIABLE CRYPTOPP_SOLARIS - OUTPUT_STRIP_TRAILING_WHITESPACE) -endif () - -# Fixup PowerPC. If both 32-bit and 64-bit use 64-bit. -if (CRYPTOPP_POWERPC AND CRYPTOPP_POWERPC64) - unset(CRYPTOPP_POWERPC) -endif () - -# Fixup for xlC compiler. -dumpmachine fails so we miss PowerPC -# TODO: something better than proxying the platform via compiler -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER MATCHES "xlC") - message ("-- Fixing platform due to IBM xlC") - set(CRYPTOPP_POWERPC64 1) -endif () - -# DumpMachine SunCC style -if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - - # SunCC is 32-bit, but it builds both 32 and 64 bit. Use - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE CRYPTOPP_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND sh -c "${CMAKE_CXX_COMPILER} -V 2>&1" - COMMAND ${GREP_CMD} -i -c -E "i386|i86" - OUTPUT_VARIABLE CRYPTOPP_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "i386" - OUTPUT_VARIABLE KERNEL_I386 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "amd64" - OUTPUT_VARIABLE KERNEL_AMD64 - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c "Sparc" - OUTPUT_VARIABLE KERNEL_SPARC - OUTPUT_STRIP_TRAILING_WHITESPACE) - - execute_process(COMMAND isainfo -k - COMMAND ${GREP_CMD} -i -c -E "UltraSarc|Sparc64|SparcV9" - OUTPUT_VARIABLE KERNEL_SPARC64 - OUTPUT_STRIP_TRAILING_WHITESPACE) - -endif () - -############################################################################### - -# TODO: what about ICC and LLVM on Windows? -if (MSVC) - if (CMAKE_SYSTEM_VERSION MATCHES "10\\.0.*") - list(APPEND CRYPTOPP_COMPILE_DEFINITIONS "_WIN32_WINNT=0x0A00") - endif () - list(APPEND CRYPTOPP_COMPILE_OPTIONS /FI winapifamily.h) -endif () - -# Enable PIC for all target machines except 32-bit i386 due to register pressures. -if (NOT CRYPTOPP_I386) - SET(CMAKE_POSITION_INDEPENDENT_CODE 1) -endif () - -# IBM XLC compiler options for AIX and Linux. -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER MATCHES "xlC") - - #CheckCompileLinkOption("-qxlcompatmacros" CRYPTOPP_XLC_COMPAT "${TEST_CXX_FILE}") - #if (CRYPTOPP_XLC_COMPAT) - # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qxlcompatmacros") - #endif () - - CheckCompileLinkOption("-qrtti" CRYPTOPP_PPC_RTTI "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_RTTI) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qrtti") - endif () - - CheckCompileLinkOption("-qmaxmem=-1" CRYPTOPP_PPC_MAXMEM "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_MAXMEM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qmaxmem=-1") - endif () - - CheckCompileLinkOption("-qthreaded" CRYPTOPP_PPC_THREADED "${TEST_CXX_FILE}") - if (CRYPTOPP_PPC_THREADED) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-qthreaded") - endif () -endif () - -# Solaris specific -if (CRYPTOPP_SOLARIS) - - # SunCC needs -template=no%extdef - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-template=no%extdef") - endif () - - # SunCC needs -xregs=no%appl on Sparc (not x86) for libraries (not test program) - # TODO: wire this up properly - if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro" AND (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64)) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-xregs=no%appl") - endif () - - # GCC needs to enable use of '/' for division in the assembler - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-Wa,--divide") - endif () - -endif () - -#============================================================================ -# Sources & headers -#============================================================================ - -# Library headers -file(GLOB cryptopp_HEADERS ${SRC_DIR}/*.h) - -# Remove headers used to build test suite -list(REMOVE_ITEM cryptopp_HEADERS - ${SRC_DIR}/bench.h - ${SRC_DIR}/validate.h - ) - -# Test sources. You can use the GNUmakefile to generate the list: `make sources`. -set(cryptopp_SOURCES_TEST - ${SRC_DIR}/test.cpp - ${SRC_DIR}/bench1.cpp - ${SRC_DIR}/bench2.cpp - ${SRC_DIR}/bench3.cpp - ${SRC_DIR}/validat0.cpp - ${SRC_DIR}/validat1.cpp - ${SRC_DIR}/validat2.cpp - ${SRC_DIR}/validat3.cpp - ${SRC_DIR}/validat4.cpp - ${SRC_DIR}/validat5.cpp - ${SRC_DIR}/validat6.cpp - ${SRC_DIR}/validat7.cpp - ${SRC_DIR}/validat8.cpp - ${SRC_DIR}/validat9.cpp - ${SRC_DIR}/validat10.cpp - ${SRC_DIR}/regtest1.cpp - ${SRC_DIR}/regtest2.cpp - ${SRC_DIR}/regtest3.cpp - ${SRC_DIR}/regtest4.cpp - ${SRC_DIR}/datatest.cpp - ${SRC_DIR}/fipsalgt.cpp - ${SRC_DIR}/fipstest.cpp - ${SRC_DIR}/dlltest.cpp - #${SRC_DIR}/adhoc.cpp - ) - -# Library sources. You can use the GNUmakefile to generate the list: `make sources`. -# Makefile sorted them at http://github.com/weidai11/cryptopp/pull/426. -file(GLOB cryptopp_SOURCES ${SRC_DIR}/*.cpp) -list(SORT cryptopp_SOURCES) -list(REMOVE_ITEM cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${SRC_DIR}/pch.cpp - ${SRC_DIR}/simple.cpp - ${SRC_DIR}/adhoc.cpp - ${cryptopp_SOURCES_TEST} - ) -set(cryptopp_SOURCES - ${SRC_DIR}/cryptlib.cpp - ${SRC_DIR}/cpu.cpp - ${SRC_DIR}/integer.cpp - ${cryptopp_SOURCES} - ) - -if(ANDROID) - include_directories(${ANDROID_NDK}/sources/android/cpufeatures) - list(APPEND cryptopp_SOURCES ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c) -endif() - -set(cryptopp_SOURCES_ASM) - -if (MSVC AND NOT DISABLE_ASM) - if (${CMAKE_GENERATOR} MATCHES ".*ARM") - message(STATUS "Disabling ASM because ARM is specified as target platform.") - else () - enable_language(ASM_MASM) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/rdrand.asm - ${SRC_DIR}/rdseed.asm - ) - if (CMAKE_SIZEOF_VOID_P EQUAL 8) - list(APPEND cryptopp_SOURCES_ASM - ${SRC_DIR}/x64dll.asm - ${SRC_DIR}/x64masm.asm - ) - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X64") - else () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES COMPILE_DEFINITIONS "_M_X86" COMPILE_FLAGS "/safeseh") - endif () - set_source_files_properties(${cryptopp_SOURCES_ASM} PROPERTIES LANGUAGE ASM_MASM) - endif () -endif () - -#============================================================================ -# Architecture flags -#============================================================================ - -# TODO: Android, AIX, IBM xlC, iOS and a few other profiles are missing. - -# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -# Must use CMAKE_CXX_COMPILER here due to XLC 13.1 and LLVM front-end. -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel" OR CMAKE_CXX_COMPILER MATCHES "xlC") - - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) - - CheckCompileLinkOption("-msse2" CRYPTOPP_IA32_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cxx") - CheckCompileLinkOption("-mssse3" CRYPTOPP_IA32_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cxx") - CheckCompileLinkOption("-msse4.1" CRYPTOPP_IA32_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cxx") - CheckCompileLinkOption("-msse4.2" CRYPTOPP_IA32_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cxx") - CheckCompileLinkOption("-mssse3 -mpclmul" CRYPTOPP_IA32_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cxx") - CheckCompileLinkOption("-msse4.1 -maes" CRYPTOPP_IA32_AES - "${TEST_PROG_DIR}/test_x86_aes.cxx") - CheckCompileLinkOption("-mavx" CRYPTOPP_IA32_AVX - "${TEST_PROG_DIR}/test_x86_avx.cxx") - CheckCompileLinkOption("-mavx2" CRYPTOPP_IA32_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cxx") - CheckCompileLinkOption("-msse4.2 -msha" CRYPTOPP_IA32_SHA - "${TEST_PROG_DIR}/test_x86_sha.cxx") - if (EXISTS "${TEST_PROG_DIR}/test_asm_mixed.cxx") - CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM - "${TEST_PROG_DIR}/test_asm_mixed.cxx") - else () - CheckCompileLinkOption("" CRYPTOPP_MIXED_ASM - "${TEST_PROG_DIR}/test_mixed_asm.cxx") - endif () - - # https://github.com/weidai11/cryptopp/issues/756 - if (NOT CRYPTOPP_MIXED_ASM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_MIXED_ASM") - endif () - - if (NOT CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ASM") - elseif (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse2") - set_source_files_properties(${SRC_DIR}/donna_sse.cpp PROPERTIES COMPILE_FLAGS "-msse2") - endif () - if (NOT CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSSE3") - elseif (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/keccak_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3") - if (NOT CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") - elseif (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1") - endif () - if (NOT CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SSE4") - elseif (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2") - if (NOT CRYPTOPP_IA32_CLMUL AND NOT DISABLE_CLMUL) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_CLMUL") - elseif (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_CLMUL) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -mpclmul") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-mpclmul") - endif () - if (NOT CRYPTOPP_IA32_AES AND NOT DISABLE_AES) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AESNI") - elseif (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.1 -maes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-mssse3 -maes") - endif () - #if (NOT CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) - # list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX") - #elseif (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) - # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx") - #endif () - if (NOT CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_AVX2") - elseif (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-mavx2") - endif () - if (NOT CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_SHANI") - elseif (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-msse4.2 -msha") - endif () - endif () - endif () - - elseif (CRYPTOPP_AARCH32 OR CRYPTOPP_AARCH64) - - CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_ASIMD) - CheckCompileOption("-march=armv8-a+crc" CRYPTOPP_ARMV8A_CRC) - CheckCompileOption("-march=armv8-a+crypto" CRYPTOPP_ARMV8A_CRYPTO) - CheckCompileOption("-march=armv8-a" CRYPTOPP_ARMV8A_NATIVE) - - if (CRYPTOPP_ARMV8A_ASIMD) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a") - endif () - if (CRYPTOPP_ARMV8A_CRC) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crc") - endif () - if (CRYPTOPP_ARMV8A_CRYPTO) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv8-a+crypto") - endif () - - elseif (CRYPTOPP_ARM OR CRYPTOPP_ARMHF) - - CheckCompileLinkOption("-march=armv7-a -mfpu=neon" CRYPTOPP_ARMV7A_NEON - "${TEST_PROG_DIR}/test_arm_neon.cxx") - CheckCompileLinkOption("-march=armv7-a -mthumb -mfpu=neon" CRYPTOPP_ARMV7A_THUMB_NEON - "${TEST_PROG_DIR}/test_arm_neon.cxx") - - if (CRYPTOPP_ARMV7A_NEON) - - # Add Cryptogams ASM files for ARM on Linux. Linux is required due to GNU Assembler. - # AES requires -mthumb under Clang. Do not add -mthumb for SHA for any files. - if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR CMAKE_SYSTEM_NAME STREQUAL "Android") - list(APPEND cryptopp_SOURCES ${SRC_DIR}/aes_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha1_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha256_armv4.S) - list(APPEND cryptopp_SOURCES ${SRC_DIR}/sha512_armv4.S) - - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha1_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha256_armv4.S PROPERTIES LANGUAGE CXX) - set_source_files_properties(${SRC_DIR}/sha512_armv4.S PROPERTIES LANGUAGE CXX) - - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mthumb -mfpu=neon -Wa,--noexecstack") - else () - set_source_files_properties(${SRC_DIR}/aes_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - endif () - - set_source_files_properties(${SRC_DIR}/sha1_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - set_source_files_properties(${SRC_DIR}/sha256_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - set_source_files_properties(${SRC_DIR}/sha512_armv4.S PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon -Wa,--noexecstack") - endif () - - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/neon_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-march=armv7-a -mfpu=neon") - else () - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_ARM_NEON_AVAILABLE=0") - endif () - - elseif (CRYPTOPP_POWERPC OR CRYPTOPP_POWERPC64) - - # XLC requires -qaltivec in addition to Arch or CPU option - if (CMAKE_CXX_COMPILER MATCHES "xlC") - set(CRYPTOPP_ALTIVEC_FLAGS "-qaltivec") - set(CRYPTOPP_POWER4_FLAGS "-qarch=pwr4 -qaltivec") - set(CRYPTOPP_POWER5_FLAGS "-qarch=pwr5 -qaltivec") - set(CRYPTOPP_POWER6_FLAGS "-qarch=pwr6 -qaltivec") - set(CRYPTOPP_POWER7_VSX_FLAG "-qarch=pwr7 -qvsx -qaltivec") - set(CRYPTOPP_POWER7_PWR_FLAGS "-qarch=pwr7 -qaltivec") - set(CRYPTOPP_POWER8_FLAGS "-qarch=pwr8 -qaltivec") - set(CRYPTOPP_POWER9_FLAGS "-qarch=pwr9 -qaltivec") - else () - set(CRYPTOPP_ALTIVEC_FLAGS "-maltivec") - set(CRYPTOPP_POWER7_VSX_FLAGS "-mcpu=power7 -mvsx") - set(CRYPTOPP_POWER7_PWR_FLAGS "-mcpu=power7") - set(CRYPTOPP_POWER8_FLAGS "-mcpu=power8") - set(CRYPTOPP_POWER9_FLAGS "-mcpu=power9") - endif () - - CheckCompileLinkOption("${CRYPTOPP_ALTIVEC_FLAGS}" PPC_ALTIVEC_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - - # Hack for XLC. Find the lowest PWR architecture. - if (CMAKE_CXX_COMPILER MATCHES "xlC") - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER4_FLAGS}" PPC_POWER4_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER4_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER4_FLAGS}") - endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER5_FLAGS}" PPC_POWER5_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER5_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER5_FLAGS}") - endif () - endif () - if (NOT PPC_ALTIVEC_FLAG) - CheckCompileLinkOption("${CRYPTOPP_POWER6_FLAGS}" PPC_POWER6_FLAG - "${TEST_PROG_DIR}/test_ppc_altivec.cxx") - if (PPC_POWER6_FLAG) - set(PPC_ALTIVEC_FLAG 1) - set(CRYPTOPP_ALTIVEC_FLAGS "${CRYPTOPP_POWER6_FLAGS}") - endif () - endif () - endif () - - # Hack for XLC and GCC. Find the right combination for PWR7 and the VSX unit. - CheckCompileLinkOption("${CRYPTOPP_POWER7_VSX_FLAGS}" PPC_POWER7_FLAG - "${TEST_PROG_DIR}/test_ppc_power7.cxx") - if (PPC_POWER7_FLAG) - set (CRYPTOPP_POWER7_FLAGS "${CRYPTOPP_POWER7_VSX_FLAGS}") - else () - CheckCompileLinkOption("${CRYPTOPP_POWER7_PWR_FLAGS}" PPC_POWER7_FLAG - "${TEST_PROG_DIR}/test_ppc_power7.cxx") - if (PPC_POWER7_FLAG) - set (CRYPTOPP_POWER7_FLAGS "${CRYPTOPP_POWER7_PWR_FLAGS}") - endif () - endif () - - CheckCompileLinkOption("${CRYPTOPP_POWER8_FLAGS}" PPC_POWER8_FLAG - "${TEST_PROG_DIR}/test_ppc_power8.cxx") - - CheckCompileLinkOption("${CRYPTOPP_POWER9_FLAGS}" PPC_POWER9_FLAG - "${TEST_PROG_DIR}/test_ppc_power9.cxx") - - if (PPC_POWER9_FLAG AND NOT DISABLE_POWER9) - set_source_files_properties(${SRC_DIR}/ppc_power9.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER9_FLAGS}) - endif () - - if (PPC_POWER8_FLAG AND NOT DISABLE_POWER8) - set_source_files_properties(${SRC_DIR}/ppc_power8.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - #set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - #set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER8_FLAGS}) - endif () - - if (PPC_POWER7_FLAG AND NOT DISABLE_POWER7) - set_source_files_properties(${SRC_DIR}/ppc_power7.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_POWER7_FLAGS}) - endif () - - if (PPC_ALTIVEC_FLAG AND NOT DISABLE_ALTIVEC) - set_source_files_properties(${SRC_DIR}/ppc_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - - # Drop to Altivec if Power8 unavailable - if (NOT PPC_POWER8_FLAG) - if (PPC_ALTIVEC_FLAG) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS ${CRYPTOPP_ALTIVEC_FLAGS}) - endif () - endif () - - if (NOT PPC_ALTIVEC_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_ALTIVEC") - elseif (NOT PPC_POWER7_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER7") - elseif (NOT PPC_POWER8_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER8") - elseif (NOT PPC_POWER9_FLAG) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-DCRYPTOPP_DISABLE_POWER9") - endif () - - endif () -endif () - -# New as of Pull Request 461, http://github.com/weidai11/cryptopp/pull/461. -if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro") - - if (CRYPTOPP_AMD64 OR CRYPTOPP_I386 OR CRYPTOPP_X32) - - CheckCompileLinkOption("-xarch=sse2" CRYPTOPP_IA32_SSE2 - "${TEST_PROG_DIR}/test_x86_sse2.cxx") - CheckCompileLinkOption("-xarch=ssse3" CRYPTOPP_IA32_SSSE3 - "${TEST_PROG_DIR}/test_x86_ssse3.cxx") - CheckCompileLinkOption("-xarch=sse4_1" CRYPTOPP_IA32_SSE41 - "${TEST_PROG_DIR}/test_x86_sse41.cxx") - CheckCompileLinkOption("-xarch=sse4_2" CRYPTOPP_IA32_SSE42 - "${TEST_PROG_DIR}/test_x86_sse42.cxx") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_CLMUL - "${TEST_PROG_DIR}/test_x86_clmul.cxx") - CheckCompileLinkOption("-xarch=aes" CRYPTOPP_IA32_AES - "${TEST_PROG_DIR}/test_x86_aes.cxx") - CheckCompileLinkOption("-xarch=avx" CRYPTOPP_IA32_AVX - "${TEST_PROG_DIR}/test_x86_avx.cxx") - CheckCompileLinkOption("-xarch=avx2" CRYPTOPP_IA32_AVX2 - "${TEST_PROG_DIR}/test_x86_avx2.cxx") - CheckCompileLinkOption("-xarch=sha" CRYPTOPP_IA32_SHA - "${TEST_PROG_DIR}/test_x86_sha.cxx") - - # Each -xarch=XXX options must be added to LDFLAGS if the option is used during a compile. - set(XARCH_LDFLAGS "") - - if (CRYPTOPP_IA32_SSE2 AND NOT DISABLE_ASM) - set_source_files_properties(${SRC_DIR}/sse_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set_source_files_properties(${SRC_DIR}/chacha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse2") - set(XARCH_LDFLAGS "-xarch=sse2") - endif () - if (CRYPTOPP_IA32_SSSE3 AND NOT DISABLE_SSSE3) - set_source_files_properties(${SRC_DIR}/aria_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/cham_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/lea_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/simon128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set_source_files_properties(${SRC_DIR}/speck128_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=ssse3") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=ssse3") - if (CRYPTOPP_IA32_SSE41 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/blake2s_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set_source_files_properties(${SRC_DIR}/blake2b_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_1") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_1") - endif () - if (CRYPTOPP_IA32_SSE42 AND NOT DISABLE_SSE4) - set_source_files_properties(${SRC_DIR}/crc_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sse4_2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sse4_2") - if (CRYPTOPP_IA32_CLMUL AND NOT DISABLE_CLMUL) - set_source_files_properties(${SRC_DIR}/gcm_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set_source_files_properties(${SRC_DIR}/gf2n_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - endif () - if (CRYPTOPP_IA32_AES AND NOT DISABLE_AES) - set_source_files_properties(${SRC_DIR}/rijndael_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set_source_files_properties(${SRC_DIR}/sm4_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=aes") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=aes") - endif () - #if (CRYPTOPP_IA32_AVX AND NOT DISABLE_AVX) - # set_source_files_properties(${SRC_DIR}/XXX_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - # set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx") - #endif () - if (CRYPTOPP_IA32_AVX2 AND NOT DISABLE_AVX2) - set_source_files_properties(${SRC_DIR}/chacha_avx.cpp PROPERTIES COMPILE_FLAGS "-xarch=avx2") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=avx2") - endif () - if (CRYPTOPP_IA32_SHA AND NOT DISABLE_SHA) - set_source_files_properties(${SRC_DIR}/sha_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set_source_files_properties(${SRC_DIR}/shacal2_simd.cpp PROPERTIES COMPILE_FLAGS "-xarch=sha") - set(XARCH_LDFLAGS "${XARCH_LDFLAGS} -xarch=sha") - endif () - endif () - endif () - - # https://stackoverflow.com/a/6088646/608639 - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${XARCH_LDFLAGS} -M${SRC_DIR}/cryptopp.mapfile") - - # elseif (CRYPTOPP_SPARC OR CRYPTOPP_SPARC64) - - endif () -endif () - -# Attempt to determine a suitable native option -if (CRYPTOPP_NATIVE_ARCH) - - CheckCompileOption("-march=native" NATIVE_ARCH) - if (NATIVE_ARCH) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-march=native") - else () - CheckCompileOption("-native" NATIVE_ARCH) - if (NATIVE_ARCH) - list(APPEND CRYPTOPP_COMPILE_OPTIONS "-native") - endif () - endif () - - if (NOT NATIVE_ARCH) - message(WARNING "CRYPTOPP_NATIVE_ARCH enabled, but failed to detect native architecture option") - endif () - -endif() - -#============================================================================ -# Compile targets -#============================================================================ - -# Work around the archaic versions of cmake that do not support -# target_compile_xxxx commands -# !!! DO NOT try to use the old way for newer version - it does not work !!! -function(cryptopp_target_compile_properties target) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_compile_definitions(${target} PUBLIC ${CRYPTOPP_COMPILE_DEFINITIONS}) - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_DEFINITIONS}") - set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS "${CRYPTOPP_COMPILE_DEFINITIONS}") - endif() - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.12") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") - else() - string (REPLACE ";" " " PROP_STR "${CRYPTOPP_COMPILE_OPTIONS}") - set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${PROP_STR}") - endif() -endfunction() - -set(cryptopp_LIBRARY_SOURCES ${cryptopp_SOURCES_ASM}) -if (USE_INTERMEDIATE_OBJECTS_TARGET AND NOT ${CMAKE_VERSION} VERSION_LESS "2.8.8") - add_library(cryptopp-object OBJECT ${cryptopp_SOURCES}) - cryptopp_target_compile_properties(cryptopp-object) - - list(APPEND cryptopp_LIBRARY_SOURCES - $ - ) -else () - list(APPEND cryptopp_LIBRARY_SOURCES - ${cryptopp_SOURCES} - ) -endif () - -if (BUILD_STATIC) - add_library(cryptopp-static STATIC ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-static) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-static PUBLIC $ $) - else () - set_target_properties(cryptopp-static PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () -endif () - -if (BUILD_SHARED) - add_library(cryptopp-shared SHARED ${cryptopp_LIBRARY_SOURCES}) - cryptopp_target_compile_properties(cryptopp-shared) - if (NOT ${CMAKE_VERSION} VERSION_LESS "2.8.11") - target_include_directories(cryptopp-shared PUBLIC $ $) - else () - set_target_properties(cryptopp-shared PROPERTIES INCLUDE_DIRECTORIES "$ $") - endif () -endif () - -# Set filenames for targets to be "cryptopp" -if (NOT MSVC) - set(COMPAT_VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}) - - if (BUILD_STATIC) - set_target_properties(cryptopp-static - PROPERTIES - OUTPUT_NAME cryptopp) - endif () - if (BUILD_SHARED) - set_target_properties(cryptopp-shared - PROPERTIES - SOVERSION ${COMPAT_VERSION} - OUTPUT_NAME cryptopp) - endif () -endif () - -# Add alternate ways to invoke the build for the shared library that are -# similar to how the crypto++ 'make' tool works. -# see https://github.com/noloader/cryptopp-cmake/issues/32 -if (BUILD_STATIC) - add_custom_target(static DEPENDS cryptopp-static) -endif () -if (BUILD_SHARED) - add_custom_target(shared DEPENDS cryptopp-shared) - add_custom_target(dynamic DEPENDS cryptopp-shared) -endif () - -#============================================================================ -# Third-party libraries -#============================================================================ - -if (WIN32) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static ws2_32) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ws2_32) - endif () -endif () - -# This may need to be expanded to "Solaris" -if (CRYPTOPP_SOLARIS) - if (BUILD_STATIC) - target_link_libraries(cryptopp-static nsl socket) - endif () - if (BUILD_SHARED) - target_link_libraries(cryptopp-shared nsl socket) - endif () -endif () - -find_package(Threads) -if (BUILD_STATIC) - target_link_libraries(cryptopp-static ${CMAKE_THREAD_LIBS_INIT}) -endif () -if (BUILD_SHARED) - target_link_libraries(cryptopp-shared ${CMAKE_THREAD_LIBS_INIT}) -endif () - -#============================================================================ -# Tests -#============================================================================ - -enable_testing() -if (BUILD_TESTING) - add_executable(cryptest ${cryptopp_SOURCES_TEST}) - target_link_libraries(cryptest cryptopp-static) - - # Setting "cryptest" binary name to "cryptest.exe" - if (NOT (WIN32 OR CYGWIN)) - set_target_properties(cryptest PROPERTIES OUTPUT_NAME cryptest.exe) - endif () - if (NOT TARGET cryptest.exe) - add_custom_target(cryptest.exe) - add_dependencies(cryptest.exe cryptest) - endif () - - file(COPY ${SRC_DIR}/TestData DESTINATION ${PROJECT_BINARY_DIR}) - file(COPY ${SRC_DIR}/TestVectors DESTINATION ${PROJECT_BINARY_DIR}) - - add_test(NAME build_cryptest COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target cryptest) - add_test(NAME cryptest COMMAND $ v) - set_tests_properties(cryptest PROPERTIES DEPENDS build_cryptest) -endif () - -#============================================================================ -# Doxygen documentation -#============================================================================ - -if (BUILD_DOCUMENTATION) - find_package(Doxygen REQUIRED) - - set(in_source_DOCS_DIR "${SRC_DIR}/html-docs") - set(out_source_DOCS_DIR "${PROJECT_BINARY_DIR}/html-docs") - - add_custom_target(docs ALL - COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile -d CRYPTOPP_DOXYGEN_PROCESSING - WORKING_DIRECTORY ${SRC_DIR} - SOURCES ${SRC_DIR}/Doxyfile - ) - - if (NOT ${in_source_DOCS_DIR} STREQUAL ${out_source_DOCS_DIR}) - add_custom_command( - TARGET docs POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory "${in_source_DOCS_DIR}" "${out_source_DOCS_DIR}" - COMMAND ${CMAKE_COMMAND} -E remove_directory "${in_source_DOCS_DIR}" - ) - endif () -endif () - -#============================================================================ -# Install -#============================================================================ - -set(export_name "cryptopp-targets") - -# Runtime package -if (BUILD_SHARED) - export(TARGETS cryptopp-shared FILE ${export_name}.cmake ) - install( - TARGETS cryptopp-shared - EXPORT ${export_name} - DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) -endif () - -# Development package -if (BUILD_STATIC) - export(TARGETS cryptopp-static FILE ${export_name}.cmake ) - install(TARGETS cryptopp-static EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR}) -endif () -install(FILES ${cryptopp_HEADERS} DESTINATION include/cryptopp) - -# CMake Package -if (NOT CMAKE_VERSION VERSION_LESS 2.8.8) - include(CMakePackageConfigHelpers) - write_basic_package_version_file("${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake" VERSION ${cryptopp_VERSION_MAJOR}.${cryptopp_VERSION_MINOR}.${cryptopp_VERSION_PATCH} COMPATIBILITY SameMajorVersion) - install(FILES cryptopp-config.cmake ${PROJECT_BINARY_DIR}/cryptopp-config-version.cmake DESTINATION "lib/cmake/cryptopp") - install(EXPORT ${export_name} DESTINATION "lib/cmake/cryptopp") -endif () - -# Tests -if (BUILD_TESTING) - install(TARGETS cryptest DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(DIRECTORY ${SRC_DIR}/TestData DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) - install(DIRECTORY ${SRC_DIR}/TestVectors DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cryptopp) -endif () - -# Documentation -if (BUILD_DOCUMENTATION) - install(DIRECTORY "${out_source_DOCS_DIR}" DESTINATION ${CMAKE_INSTALL_DOCDIR}) -endif () - -# Print a configuration summary. We want CXX and CXXFLAGS, but they are not includd in ALL. -if (CRYPTOPP_I386) - message(STATUS "Platform: i386/i686") -elseif (CRYPTOPP_AMD64) - message(STATUS "Platform: x86_64") -elseif (CRYPTOPP_X32) - message(STATUS "Platform: x86_64-x32") -elseif (CRYPTOPP_ARMHF) - message(STATUS "Platform: armhf") -elseif (CRYPTOPP_ARM) - message(STATUS "Platform: arm") -elseif (CRYPTOPP_AARCH32) - message(STATUS "Platform: Aarch32") -elseif (CRYPTOPP_AARCH64) - message(STATUS "Platform: Aarch64") -elseif (CRYPTOPP_SPARC) - message(STATUS "Platform: Sparc") -elseif (CRYPTOPP_SPARC64) - message(STATUS "Platform: Sparc64") -elseif (CRYPTOPP_POWERPC) - message(STATUS "Platform: PowerPC") -elseif (CRYPTOPP_POWERPC64) - message(STATUS "Platform: PowerPC-64") -elseif (CRYPTOPP_MINGW32) - message(STATUS "Platform: MinGW-32") -elseif (CRYPTOPP_MINGW32) - message(STATUS "Platform: MinGW-64") -endif () -if (CRYPTOPP_ARMV7A_NEON) - message(STATUS "NEON: TRUE") -endif () -if (CRYPTOPP_NATIVE_ARCH) - message(STATUS "Native arch: TRUE") -else () - message(STATUS "Native arch: FALSE") -endif () -message(STATUS "Compiler: ${CMAKE_CXX_COMPILER}") -message(STATUS "Compiler options: ${CMAKE_CXX_FLAGS} ${CRYPTOPP_COMPILE_OPTIONS}") -message(STATUS "Compiler definitions: ${CRYPTOPP_COMPILE_DEFINITIONS}") -message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") diff --git a/package/lean/libcryptopp/src/Makefile.am b/package/lean/libcryptopp/src/Makefile.am new file mode 100644 index 0000000000..d5256f9d7c --- /dev/null +++ b/package/lean/libcryptopp/src/Makefile.am @@ -0,0 +1,592 @@ +## Makefile.am - Autotools configuration file for Crypto++. +## written and placed in public domain by Jeffrey Walton. +## based on Debian Makefile.am by László Böszörményi. +## +## The GNUmakefile can generate the list of lib headers, lib sources, +## test headers and test sources. Generate the list of files with +## 'make sources'. Remove the SIMD files for libothers_la_SOURCES. +## Thanks to steeldriver on U&L.SE for help with the sed. +## +## make sources | sed 's|cryptlib.cpp cpu.cpp integer.cpp ||g' | \ +## sed -e 's|[[:alnum:]]*_simd.cpp ||g' | \ +## sed -e 's|[[:alnum:]]*_sse.cpp ||g' | \ +## sed -e 's|[[:alnum:]]*_avx.cpp ||g' | \ +## sed -e 's|[[:alnum:]]*_armv4.cpp ||g' | \ +## sed -e 's|ppc_power[[:alnum:]]*.cpp ||g' | \ +## fold -s -w 72 +## +## The command `make sources | sed ... | fold` will create the source file +## list that can be used with `libothers_la_SOURCES` below. +## +## The list of header files can be built with 'make sources', too. +## +## make sources | sed -e 's|[[:alnum:]]*_armv4.h ||g' \ +## fold -s -w 72 +## +## Note: configure.ac deletes GNUmakefile. You can get it back with: +## +## git checkout GNUmakefile +## + +## Automake does not support "specific flags for certain source files" +## natively, so we hack it. The hack include building 20 or so +## libraries and then combining them into an archive or shared object. +## Also see https://lists.gnu.org/archive/html/automake/2017-11/msg00000.html +## https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html. +## +## Visit the link below for the original Debian Autotools files +## https://sources.debian.net/src/libcrypto++/5.6.4-8/debian/autotools/ +## + +## TODO: +## +## - Figure out how to include TestPrograms/ in the dist tarball +## TestPrograms/ is unique because it is included in dist tarball but not installed +## +## - Figure out what's going on with DragonFly and dependencies +## + +AUTOMAKE_OPTIONS = foreign +ACLOCAL_AMFLAGS = -I m4 +AM_DEFAULT_SOURCE_EXT = .cpp + +## libcryptopp.la is created from disjoint libraries due to object file +## ordering and per-object file flags requirements. libcryptopp.la is +## named as the primary library, and the object files with special needs +## are listed as EXTRA_LTLIBRARIES. Also see +## https://lists.gnu.org/archive/html/automake/2017-11/msg00000.html. + +lib_LTLIBRARIES = \ + libcryptopp.la + +EXTRA_LTLIBRARIES = \ + libcryptlib.la \ + libcpu.la \ + libinteger.la \ + libaria_simd.la \ + libblake2s_simd.la \ + libblake2b_simd.la \ + libchacha_simd.la \ + libchacha_avx.la \ + libcham_simd.la \ + libcrc_simd.la \ + libdonna_sse.la \ + libgcm_simd.la \ + libgf2n_simd.la \ + libkeccak_simd.la \ + liblea_simd.la \ + libneon_simd.la \ + libppc_simd.la \ + libppc_power7.la \ + libppc_power8.la \ + libppc_power9.la \ + librijndael_simd.la \ + libsha_simd.la \ + libshacal2_simd.la \ + libsimon128_simd.la \ + libspeck128_simd.la \ + libsm4_simd.la \ + libsse_simd.la + +## ARMv7-a AES and SHA by Andy Polyakov +if CRYPTOGAMS_ARM_SOURCES + EXTRA_LTLIBRARIES += libaes_armv4.la + EXTRA_LTLIBRARIES += libsha1_armv4.la + EXTRA_LTLIBRARIES += libsha256_armv4.la + EXTRA_LTLIBRARIES += libsha512_armv4.la +endif + +## The remainder of the source files +EXTRA_LTLIBRARIES += libothers.la + +## libcryptopp_la_SOURCES is empty because we need to create the library +## artifact from disjoint libraries due to object file ordering and +## per-object file flags requriements. Actually, the adhoc.cpp file is +## due to an automake issue of assuming C sources when the list is empty. +## https://lists.gnu.org/archive/html/automake/2017-11/msg00000.html. + +libcryptopp_la_SOURCES = \ + adhoc.cpp + +## Don't use EXTRA_ prefix for libcryptopp_la_LIBADD. It breaks Solaris. + +libcryptopp_la_LIBADD = \ + $(libcryptlib_la_OBJECTS) \ + $(libcpu_la_OBJECTS) \ + $(libinteger_la_OBJECTS) \ + $(libaria_simd_la_OBJECTS) \ + $(libblake2s_simd_la_OBJECTS) \ + $(libblake2b_simd_la_OBJECTS) \ + $(libchacha_simd_la_OBJECTS) \ + $(libchacha_avx_la_OBJECTS) \ + $(libcham_simd_la_OBJECTS) \ + $(libcrc_simd_la_OBJECTS) \ + $(libdonna_sse_la_OBJECTS) \ + $(libgcm_simd_la_OBJECTS) \ + $(libgf2n_simd_la_OBJECTS) \ + $(libkeccak_simd_la_OBJECTS) \ + $(liblea_simd_la_OBJECTS) \ + $(libneon_simd_la_OBJECTS) \ + $(libppc_simd_la_OBJECTS) \ + $(libppc_power7_la_OBJECTS) \ + $(libppc_power8_la_OBJECTS) \ + $(libppc_power9_la_OBJECTS) \ + $(librijndael_simd_la_OBJECTS) \ + $(libsha_simd_la_OBJECTS) \ + $(libshacal2_simd_la_OBJECTS) \ + $(libsimon128_simd_la_OBJECTS) \ + $(libspeck128_simd_la_OBJECTS) \ + $(libsm4_simd_la_OBJECTS) \ + $(libsse_simd_la_OBJECTS) + +## ARMv7-a AES and SHA by Andy Polyakov +if CRYPTOGAMS_ARM_SOURCES + libcryptopp_la_LIBADD += $(libaes_armv4_la_OBJECTS) + libcryptopp_la_LIBADD += $(libsha1_armv4_la_OBJECTS) + libcryptopp_la_LIBADD += $(libsha256_armv4_la_OBJECTS) + libcryptopp_la_LIBADD += $(libsha512_armv4_la_OBJECTS) +endif + +## cpufeatures library on Android +if ANDROID_CPU_FEATURES + libcryptopp_la_LIBADD += $(libcpu_features_la_OBJECTS) +endif + +## The remainder of the object files +libcryptopp_la_LIBADD += $(libothers_la_OBJECTS) + +## Don't use EXTRA_ prefix for libcryptopp_la_DEPENDENCIES. It breaks Solaris. + +libcryptopp_la_DEPENDENCIES = \ + $(libcryptlib_la_OBJECTS) \ + $(libcpu_la_OBJECTS) \ + $(libinteger_la_OBJECTS) \ + $(libaria_simd_la_OBJECTS) \ + $(libblake2s_simd_la_OBJECTS) \ + $(libblake2b_simd_la_OBJECTS) \ + $(libchacha_simd_la_OBJECTS) \ + $(libchacha_avx_la_OBJECTS) \ + $(libcham_simd_la_OBJECTS) \ + $(libcrc_simd_la_OBJECTS) \ + $(libdonna_sse_la_OBJECTS) \ + $(libkeccak_simd_la_OBJECTS) \ + $(liblea_simd_la_OBJECTS) \ + $(libgcm_simd_la_OBJECTS) \ + $(libgf2n_simd_la_OBJECTS) \ + $(libneon_simd_la_OBJECTS) \ + $(libppc_simd_la_OBJECTS) \ + $(libppc_power7_la_OBJECTS) \ + $(libppc_power8_la_OBJECTS) \ + $(libppc_power9_la_OBJECTS) \ + $(librijndael_simd_la_OBJECTS) \ + $(libsha_simd_la_OBJECTS) \ + $(libshacal2_simd_la_OBJECTS) \ + $(libsimon128_simd_la_OBJECTS) \ + $(libspeck128_simd_la_OBJECTS) \ + $(libsm4_simd_la_OBJECTS) \ + $(libsse_simd_la_OBJECTS) + +## ARMv7-a AES and SHA by Andy Polyakov +if CRYPTOGAMS_ARM_SOURCES + libcryptopp_la_DEPENDENCIES += $(libaes_armv4_la_OBJECTS) + libcryptopp_la_DEPENDENCIES += $(libsha1_armv4_la_OBJECTS) + libcryptopp_la_DEPENDENCIES += $(libsha256_armv4_la_OBJECTS) + libcryptopp_la_DEPENDENCIES += $(libsha512_armv4_la_OBJECTS) +endif + +## cpufeatures library on Android +if ANDROID_CPU_FEATURES + libcryptopp_la_DEPENDENCIES += $(libcpu_features_la_OBJECTS) +endif + +## The remainder of the object files +libcryptopp_la_DEPENDENCIES += $(libothers_la_OBJECTS) + +## Man, did Autotools fuck this up royally... +## https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +libcryptopp_la_LDFLAGS = $(AM_LDFLAGS) -release 8.3.0 -version-info 8:3 + +## Source files with special needs +libcryptlib_la_SOURCES = cryptlib.cpp +libcryptlib_la_CXXFLAGS = $(AM_CXXFLAGS) + +libcpu_la_SOURCES = cpu.cpp +libcpu_la_CXXFLAGS = $(AM_CXXFLAGS) + +libinteger_la_SOURCES = integer.cpp +libinteger_la_CXXFLAGS = $(AM_CXXFLAGS) + +libaria_simd_la_SOURCES = aria_simd.cpp +libaria_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_ARIA_FLAG) + +libblake2s_simd_la_SOURCES = blake2s_simd.cpp +libblake2s_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_BLAKE2S_FLAG) + +libblake2b_simd_la_SOURCES = blake2b_simd.cpp +libblake2b_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_BLAKE2B_FLAG) + +libchacha_simd_la_SOURCES = chacha_simd.cpp +libchacha_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_CHACHA_FLAG) + +libchacha_avx_la_SOURCES = chacha_avx.cpp +libchacha_avx_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_CHACHA_AVX2_FLAG) + +libcham_simd_la_SOURCES = cham_simd.cpp +libcham_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_CHAM_FLAG) + +libcrc_simd_la_SOURCES = crc_simd.cpp +libcrc_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_CRC_FLAG) + +libdonna_sse_la_SOURCES = donna_sse.cpp +libdonna_sse_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_DONNA_FLAG) + +libgcm_simd_la_SOURCES = gcm_simd.cpp +libgcm_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_GCM_FLAG) + +libgf2n_simd_la_SOURCES = gf2n_simd.cpp +libgf2n_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_GF2N_FLAG) + +libkeccak_simd_la_SOURCES = keccak_simd.cpp +libkeccak_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_KECCAK_FLAG) + +liblea_simd_la_SOURCES = lea_simd.cpp +liblea_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_LEA_FLAG) + +libneon_simd_la_SOURCES = neon_simd.cpp +libneon_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_NEON_FLAG) + +libppc_simd_la_SOURCES = ppc_simd.cpp +libppc_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_ALTIVEC_FLAG) + +libppc_power7_la_SOURCES = ppc_power7.cpp +libppc_power7_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_POWER7_FLAG) + +libppc_power8_la_SOURCES = ppc_power8.cpp +libppc_power8_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_POWER8_FLAG) + +# Do not use CRYPTOPP_POWER9_FLAG. See https://github.com/weidai11/cryptopp/issues/986 +libppc_power9_la_SOURCES = ppc_power9.cpp +# libppc_power9_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_POWER9_FLAG) +libppc_power9_la_CXXFLAGS = $(AM_CXXFLAGS) + +librijndael_simd_la_SOURCES = rijndael_simd.cpp +librijndael_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_AES_FLAG) + +libsha_simd_la_SOURCES = sha_simd.cpp +libsha_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SHA_FLAG) + +libshacal2_simd_la_SOURCES = shacal2_simd.cpp +libshacal2_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SHA_FLAG) + +libsimon128_simd_la_SOURCES = simon128_simd.cpp +libsimon128_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SIMON128_FLAG) + +libspeck128_simd_la_SOURCES = speck128_simd.cpp +libspeck128_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SPECK128_FLAG) + +libsm4_simd_la_SOURCES = sm4_simd.cpp +libsm4_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SM4_FLAG) + +libsse_simd_la_SOURCES = sse_simd.cpp +libsse_simd_la_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTOPP_SSE2_FLAG) + +## ARMv7-a AES and SHA by Andy Polyakov +## Also see https://stackoverflow.com/q/51575580/608639 +if CRYPTOGAMS_ARM_SOURCES + libaes_armv4_la_SOURCES = aes_armv4.S + libsha1_armv4_la_SOURCES = sha1_armv4.S + libsha256_armv4_la_SOURCES = sha256_armv4.S + libsha512_armv4_la_SOURCES = sha512_armv4.S + libaes_armv4_la_CCASFLAGS = $(AM_CXXFLAGS) $(CRYPTOPGAMS_ARMV4_THUMB_FLAG) + libsha1_armv4_la_CCASFLAGS = $(AM_CXXFLAGS) $(CRYPTOPGAMS_ARMV4_FLAG) + libsha256_armv4_la_CCASFLAGS = $(AM_CXXFLAGS) $(CRYPTOPGAMS_ARMV4_FLAG) + libsha512_armv4_la_CCASFLAGS = $(AM_CXXFLAGS) $(CRYPTOPGAMS_ARMV4_FLAG) +endif + +## cpufeatures library on Android +if ANDROID_CPU_FEATURES + libcpu_features_la_SOURCES = cpu-features.c +endif + +# This is the list of remaining sources files that don't need special order +# and don't need special flags. It is formed by removing cryptlib.cpp, +# cpu.cpp, integer.cpp, *_avx.cpp and *_simd.cpp files. It is sorted in +# alphabetical order for deterministic builds. + +# To build this list, see the head notes. +libothers_la_SOURCES = \ + 3way.cpp adler32.cpp algebra.cpp algparam.cpp allocate.cpp arc4.cpp \ + aria.cpp ariatab.cpp asn.cpp authenc.cpp base32.cpp base64.cpp \ + basecode.cpp bfinit.cpp blake2.cpp blowfish.cpp blumshub.cpp \ + camellia.cpp cast.cpp casts.cpp cbcmac.cpp ccm.cpp chacha.cpp \ + chachapoly.cpp cham.cpp channels.cpp cmac.cpp crc.cpp darn.cpp \ + default.cpp des.cpp dessp.cpp dh.cpp dh2.cpp dll.cpp donna_32.cpp \ + donna_64.cpp dsa.cpp eax.cpp ec2n.cpp eccrypto.cpp ecp.cpp elgamal.cpp \ + emsa2.cpp eprecomp.cpp esign.cpp files.cpp filters.cpp fips140.cpp \ + fipstest.cpp gcm.cpp gf256.cpp gf2_32.cpp gf2n.cpp gfpcrypt.cpp \ + gost.cpp gzip.cpp hc128.cpp hc256.cpp hex.cpp hight.cpp hmac.cpp \ + hrtimer.cpp ida.cpp idea.cpp iterhash.cpp kalyna.cpp kalynatab.cpp \ + keccak.cpp keccak_core.cpp lea.cpp luc.cpp mars.cpp marss.cpp md2.cpp \ + md4.cpp md5.cpp misc.cpp modes.cpp mqueue.cpp mqv.cpp nbtheory.cpp \ + oaep.cpp osrng.cpp padlkrng.cpp panama.cpp pkcspad.cpp poly1305.cpp \ + polynomi.cpp pssr.cpp pubkey.cpp queue.cpp rabbit.cpp rabin.cpp \ + randpool.cpp rc2.cpp rc5.cpp rc6.cpp rdrand.cpp rdtables.cpp \ + rijndael.cpp ripemd.cpp rng.cpp rsa.cpp rw.cpp safer.cpp salsa.cpp \ + scrypt.cpp seal.cpp seed.cpp serpent.cpp sha.cpp sha3.cpp shacal2.cpp \ + shake.cpp shark.cpp sharkbox.cpp simeck.cpp simon.cpp skipjack.cpp \ + sm3.cpp sm4.cpp sosemanuk.cpp speck.cpp square.cpp squaretb.cpp \ + strciphr.cpp tea.cpp tftables.cpp threefish.cpp tiger.cpp tigertab.cpp \ + ttmac.cpp tweetnacl.cpp twofish.cpp vmac.cpp wake.cpp whrlpool.cpp \ + xed25519.cpp xtr.cpp xtrcrypt.cpp xts.cpp zdeflate.cpp zinflate.cpp \ + zlib.cpp + +# To build this list, see the head notes. +pkginclude_HEADERS = \ + 3way.h adler32.h adv_simd.h aes.h algebra.h algparam.h allocate.h \ + arc4.h argnames.h aria.h arm_simd.h asn.h authenc.h base32.h base64.h \ + basecode.h blake2.h blowfish.h blumshub.h camellia.h cast.h cbcmac.h \ + ccm.h chacha.h chachapoly.h cham.h channels.h cmac.h config.h \ + config_align.h config_asm.h config_cpu.h config_cxx.h config_dll.h \ + config_int.h config_misc.h config_ns.h config_os.h config_ver.h cpu.h \ + crc.h cryptlib.h darn.h default.h des.h dh.h dh2.h dll.h dmac.h donna.h \ + donna_32.h donna_64.h donna_sse.h drbg.h dsa.h eax.h ec2n.h eccrypto.h \ + ecp.h ecpoint.h elgamal.h emsa2.h eprecomp.h esign.h fhmqv.h files.h \ + filters.h fips140.h fltrimpl.h gcm.h gf256.h gf2_32.h gf2n.h gfpcrypt.h \ + gost.h gzip.h hashfwd.h hc128.h hc256.h hex.h hight.h hkdf.h hmac.h \ + hmqv.h hrtimer.h ida.h idea.h integer.h iterhash.h kalyna.h keccak.h \ + lea.h local.h lubyrack.h luc.h mars.h md2.h md4.h md5.h mdc.h \ + mersenne.h misc.h modarith.h modes.h modexppc.h mqueue.h mqv.h \ + naclite.h nbtheory.h nr.h oaep.h oids.h osrng.h ossig.h padlkrng.h \ + panama.h pch.h pkcspad.h poly1305.h polynomi.h ppc_simd.h pssr.h \ + pubkey.h pwdbased.h queue.h rabbit.h rabin.h randpool.h rc2.h rc5.h \ + rc6.h rdrand.h rijndael.h ripemd.h rng.h rsa.h rw.h safer.h salsa.h \ + scrypt.h seal.h secblock.h secblockfwd.h seckey.h seed.h serpent.h \ + serpentp.h sha.h sha3.h shacal2.h shake.h shark.h simeck.h simon.h \ + simple.h siphash.h skipjack.h sm3.h sm4.h smartptr.h sosemanuk.h \ + speck.h square.h stdcpp.h strciphr.h tea.h threefish.h tiger.h trap.h \ + trunhash.h ttmac.h tweetnacl.h twofish.h vmac.h wake.h whrlpool.h \ + words.h xed25519.h xtr.h xtrcrypt.h xts.h zdeflate.h zinflate.h zlib.h + +noinst_HEADERS = \ + local.h \ + bench.h \ + factory.h \ + resource.h \ + validate.h \ + aes_armv4.h \ + sha1_armv4.h \ + sha256_armv4.h \ + sha512_armv4.h + +bin_PROGRAMS = cryptest$(EXEEXT) + +cryptest_CXXFLAGS = $(AM_CXXFLAGS) $(CRYPTEST_CXXFLAGS) -DCRYPTOPP_DATA_DIR='"${pkgdatadir}/"' +cryptest_SOURCES = \ + test.cpp bench1.cpp bench2.cpp bench3.cpp datatest.cpp \ + dlltest.cpp fipsalgt.cpp validat0.cpp validat1.cpp validat2.cpp \ + validat3.cpp validat4.cpp validat5.cpp validat6.cpp validat7.cpp \ + validat8.cpp validat9.cpp validat10.cpp regtest1.cpp regtest2.cpp \ + regtest3.cpp regtest4.cpp + +nodist_cryptest_SOURCES = adhoc.cpp +cryptest_LDADD = $(lib_LTLIBRARIES) + +CLEANFILES = adhoc.cpp + +## Copy the TestVectors/ and TestData/ to ${pkgdatadir}. +## TestPrograms/ is included in the tarball but not installed. +## https://www.gnu.org/software/automake/manual/html_node/Data.html + +# Create with 'ls TestVectors/*.dat'. These files get installed. +testdata_FILES = \ + TestData/3desval.dat TestData/fhmqv160.dat TestData/rc2val.dat \ + TestData/3wayval.dat TestData/fhmqv256.dat TestData/rc5val.dat \ + TestData/aria.dat TestData/fhmqv384.dat TestData/rc6val.dat \ + TestData/camellia.dat TestData/fhmqv512.dat TestData/rijndael.dat \ + TestData/cast128v.dat TestData/gostval.dat TestData/rsa1024.dat \ + TestData/cast256v.dat TestData/hmqv160.dat TestData/rsa2048a.dat \ + TestData/defdmac1.bin TestData/hmqv256.dat TestData/rsa2048.dat \ + TestData/defdmac2.bin TestData/hmqv384.dat TestData/rsa400pb.dat \ + TestData/descert.dat TestData/hmqv512.dat TestData/rsa400pv.dat \ + TestData/dh1024.dat TestData/ideaval.dat TestData/rsa512a.dat \ + TestData/dh2048.dat TestData/luc1024.dat TestData/rw1024.dat \ + TestData/dlie1024.dat TestData/luc2048.dat TestData/rw2048.dat \ + TestData/dlie2048.dat TestData/lucc1024.dat TestData/saferval.dat \ + TestData/dsa1024b.dat TestData/lucc512.dat TestData/serpentv.dat \ + TestData/dsa1024.dat TestData/lucd1024.dat TestData/shacal2v.dat \ + TestData/dsa512.dat TestData/lucd512.dat TestData/sharkval.dat \ + TestData/ecies_p160.dat TestData/lucs1024.dat TestData/skipjack.dat \ + TestData/ecies_t163.dat TestData/lucs512.dat TestData/squareva.dat \ + TestData/ed25519.dat TestData/marsval.dat TestData/twofishv.dat \ + TestData/ed25519v0.dat TestData/mqv1024.dat TestData/usage.dat \ + TestData/ed25519v1.dat TestData/mqv2048.dat TestData/x25519.dat \ + TestData/elgc1024.dat TestData/nr1024.dat TestData/x25519v0.dat \ + TestData/esig1023.dat TestData/nr2048.dat TestData/x25519v1.dat \ + TestData/esig1536.dat TestData/rabi1024.dat TestData/xtrdh171.dat \ + TestData/esig2046.dat TestData/rabi2048.dat TestData/xtrdh342.dat + +# Create with 'ls TestVectors/*.txt'. These files get installed. +testvector_FILES = \ + TestVectors/aead.txt TestVectors/rsa_pss.txt \ + TestVectors/aes.txt TestVectors/rw.txt \ + TestVectors/all.txt TestVectors/salsa.txt \ + TestVectors/aria.txt TestVectors/seal.txt \ + TestVectors/blake2b.txt TestVectors/seed.txt \ + TestVectors/blake2s.txt TestVectors/sha1_160_fips_180.txt \ + TestVectors/blake2.txt TestVectors/sha1_fips_180.txt \ + TestVectors/camellia.txt TestVectors/sha2_224_fips_180.txt \ + TestVectors/ccm.txt TestVectors/sha2_256_fips_180.txt \ + TestVectors/chacha20poly1305.txt TestVectors/sha2_384_fips_180.txt \ + TestVectors/chacha_tls.txt TestVectors/sha2_512_fips_180.txt \ + TestVectors/chacha.txt TestVectors/sha2_fips_180.txt \ + TestVectors/cham.txt TestVectors/sha2.txt \ + TestVectors/cmac.txt TestVectors/sha3_224_fips_202.txt \ + TestVectors/dlies.txt TestVectors/sha3_256_fips_202.txt \ + TestVectors/dsa_1363.txt TestVectors/sha3_384_fips_202.txt \ + TestVectors/dsa_rfc6979.txt TestVectors/sha3_512_fips_202.txt \ + TestVectors/dsa.txt TestVectors/sha3_fips_202.txt \ + TestVectors/eax.txt TestVectors/sha3.txt \ + TestVectors/esign.txt TestVectors/shacal2.txt \ + TestVectors/gcm.txt TestVectors/shake.txt \ + TestVectors/hc128.txt TestVectors/sha.txt \ + TestVectors/hc256.txt TestVectors/simeck.txt \ + TestVectors/hight.txt TestVectors/simon.txt \ + TestVectors/hkdf.txt TestVectors/siphash.txt \ + TestVectors/hmac.txt TestVectors/skipjack.txt \ + TestVectors/kalyna.txt TestVectors/sm3.txt \ + TestVectors/keccak.txt TestVectors/sm4.txt \ + TestVectors/lea.txt TestVectors/sosemanuk.txt \ + TestVectors/mars.txt TestVectors/speck.txt \ + TestVectors/nr.txt TestVectors/tea.txt \ + TestVectors/panama.txt TestVectors/threefish.txt \ + TestVectors/poly1305aes.txt TestVectors/ttmac.txt \ + TestVectors/poly1305_tls.txt TestVectors/vmac.txt \ + TestVectors/rabbit.txt TestVectors/wake.txt \ + TestVectors/Readme.txt TestVectors/whrlpool.txt \ + TestVectors/rsa_oaep.txt TestVectors/xchacha.txt \ + TestVectors/rsa_pkcs1_1_5.txt TestVectors/xts.txt + +# Create with 'ls TestPrograms/test_*.cxx'. These files do not get installed. +# They exist so the feature tests can be run from the configure directory. +testprogs_FILES= \ + TestPrograms/test_32bit.cxx + TestPrograms/test_64bit.cxx + TestPrograms/test_arm_acle_header.cxx + TestPrograms/test_arm_aes.cxx + TestPrograms/test_arm_asimd.cxx + TestPrograms/test_arm_crc.cxx + TestPrograms/test_arm_neon.cxx + TestPrograms/test_arm_neon_header.cxx + TestPrograms/test_arm_pmull.cxx + TestPrograms/test_arm_sha1.cxx + TestPrograms/test_arm_sha256.cxx + TestPrograms/test_arm_sha3.cxx + TestPrograms/test_arm_sha512.cxx + TestPrograms/test_arm_sm3.cxx + TestPrograms/test_arm_sm4.cxx + TestPrograms/test_asm_mixed.cxx + TestPrograms/test_cxx11_alignas.cxx + TestPrograms/test_cxx11_alignof.cxx + TestPrograms/test_cxx11_assert.cxx + TestPrograms/test_cxx11_atomic.cxx + TestPrograms/test_cxx11_auto.cxx + TestPrograms/test_cxx11_constexpr.cxx + TestPrograms/test_cxx11.cxx + TestPrograms/test_cxx11_deletefn.cxx + TestPrograms/test_cxx11_enumtype.cxx + TestPrograms/test_cxx11_initializer.cxx + TestPrograms/test_cxx11_lambda.cxx + TestPrograms/test_cxx11_noexcept.cxx + TestPrograms/test_cxx11_nullptr.cxx + TestPrograms/test_cxx11_staticinit.cxx + TestPrograms/test_cxx11_sync.cxx + TestPrograms/test_cxx11_vartemplates.cxx + TestPrograms/test_cxx14.cxx + TestPrograms/test_cxx17_assert.cxx + TestPrograms/test_cxx17.cxx + TestPrograms/test_cxx17_exceptions.cxx + TestPrograms/test_cxx98_exception.cxx + TestPrograms/test_cxx.cxx + TestPrograms/test_glibc.cxx + TestPrograms/test_newlib.cxx + TestPrograms/test_ppc_aes.cxx + TestPrograms/test_ppc_altivec.cxx + TestPrograms/test_ppc_power7.cxx + TestPrograms/test_ppc_power8.cxx + TestPrograms/test_ppc_power9.cxx + TestPrograms/test_ppc_sha.cxx + TestPrograms/test_ppc_vmull.cxx + TestPrograms/test_pthreads.cxx + TestPrograms/test_x86_aes.cxx + TestPrograms/test_x86_avx2.cxx + TestPrograms/test_x86_avx512.cxx + TestPrograms/test_x86_avx.cxx + TestPrograms/test_x86_clmul.cxx + TestPrograms/test_x86_cpuid.cxx + TestPrograms/test_x86_rdrand.cxx + TestPrograms/test_x86_rdseed.cxx + TestPrograms/test_x86_sha.cxx + TestPrograms/test_x86_sse2.cxx + TestPrograms/test_x86_sse3.cxx + TestPrograms/test_x86_sse41.cxx + TestPrograms/test_x86_sse42.cxx + TestPrograms/test_x86_ssse3.cxx + TestPrograms/test_x86_via_aes.cxx + TestPrograms/test_x86_via_rng.cxx + TestPrograms/test_x86_via_sha.cxx + +nobase_dist_pkgdata_DATA = \ + $(testdata_FILES) \ + $(testvector_FILES) + +# Can't seem to get this to work, despite the fiddling attempts. +# https://www.gnu.org/software/automake/manual/html_node/Uniform.html and +# https://www.gnu.org/software/automake/manual/html_node/Program-and-Library-Variables.html +#nobase_noinst_data_DATA = \ +# $(testprogs_FILES) + +# Workaround Automake bug. We can't seem to include the TestProgram/ data +# in the tarball without installation using their Uniform Naming Scheme +# https://www.gnu.org/software/automake/manual/html_node/Uniform.html and +# https://www.gnu.org/software/automake/manual/html_node/Program-and-Library-Variables.html +dist-hook: + chmod -R u+w $(distdir) + cp -r TestPrograms/ $(distdir) + rm -f $(distdir)/TestPrograms/dump2def.cxx + +## Automake bug workaround. If libcryptopp_la_SOURCES is an empty list, Automake assumes +## C source files and drives link through the C compiler. We provide the empty adhoc.cpp +## to get things back on course, so adhoc.cpp must always be copied. + +adhoc.cpp: + cp adhoc.cpp.proto adhoc.cpp + touch adhoc.cpp + +## Remove doc directory if present +distclean-local: + -rm -rf html-docs doxyfile.stamp + +## Automake does not properly uninstall the library test data and vectors +uninstall-hook: + -rm -rf ${pkgdatadir} + -rm -rf ${pkghtmldir} + +## Doxygen is available but not built by default +## TODO: copy docs to ${pkghtmldir} if built +if CRYPTOPP_DOXYGEN_AVAILABLE + +## PHONY targets. Automake can only handle one of them... +.PHONY: doc docs html htmldoc checkout reset + +doc docs html htmldoc: + $(DOXYGEN) Doxyfile -d CRYPTOPP_DOXYGEN_PROCESSING + +endif + +# Restore GNUmakefile +checkout: + git checkout master -f + +# Restore GNUmakefile +reset: + git reset --hard HEAD diff --git a/package/lean/libcryptopp/src/configure.ac b/package/lean/libcryptopp/src/configure.ac new file mode 100644 index 0000000000..9296bf2071 --- /dev/null +++ b/package/lean/libcryptopp/src/configure.ac @@ -0,0 +1,2746 @@ +## configure.ac - Autotools configuration file for Crypto++. +## written and placed in public domain by Jeffrey Walton. +## based on Debian configure.ac by László Böszörményi. + + +## Visit the link below for the original Debian Autotools files +## http://sources.debian.net/src/libcrypto++/5.6.4-8/debian/autotools/ +## +## To generate the configure file perform the following. The extra steps are +## needed because the Autotools on some machines, like a PowerMac or Solaris, +## are not modern enough for macros like AC_PROG_LIBTOOL and AC_ENABLE_SHARED. +## +## autoupdate && libtoolize && autoreconf +## +## Our Autoconf tests are strict. We use custom AC_COMPILE_IFELSE and +## AC_LINK_IFELSE that rejects a feature test if there are any warnings or +## errors. We needed this because Autotools was mis-detecting features on AIX +## and Solarix using XLC and SunCC. We also needed the custom tests because +## Autoconf does not have a "warnings as errors" option that just works on all +## the compilers we support. + + +## TODO +## +## - Figure out how to make Autoconf stop using the fucking C compiler for tasks. +## The damn tool does not honor AC_PROG_CXX or observe the absence of +## AC_PROG_CC. It also fails to provide a AC_PROG_NO_CC macro. The damn tool +## is no better than Cmake. +## +## - Fix Autotools not treating warnings as errors. Our test programs are clean, +## so they should compile cleanly or the feature is not available. However, +## Autotools lacks a AC_TREAT_WARNINGS_AS_ERRORS-like macro or define. +## +## - Fix Autoconf using the wrong AR and ARFLAGS on platforms like OS X. Also +## see http://lists.gnu.org/archive/html/bug-autoconf/2017-11/msg00002.html. +## +## - Fix Autoconf not honoring LT_INIT. We are trying to enable PIC, static and +## shared by default but Autotools is ignoring [pic-only]. Also see +## https://stackoverflow.com/q/56215237/608639. +## +## - Fix Autoconf not using PIC/PIE for cryptest. The problem is bigger than the +## LT_INIT bug. There is no Uniform Name like bin_LTPROGRAMS to signal PIC/PIE +## should be used. Autoconf is guessing wrong and not using PIC/PIE. +## +## - Fix Autotools 'make dist' failures. If you run 'make dist' on x86_64, then +## the release tarball only works on x86_64. It is like it is pre-configured +## for only the x86_64 platform, and other platform code paths have been +## thrown away. WTF??? +## +## - Fix Autoconf ignoring our config.h.in. This one looks like it is a problem +## without a solution. Also see https://stackoverflow.com/q/48436715/608639. +## (Gave up after https://github.com/weidai11/cryptopp/commit/c51f0ecbfd21. +## Now we can write new config_asm.h, config_cxx.h, and config_misc.h.) +## +## - Figure out how to write new configuration information to config_asm.h, +## config_cxx.h, and config_misc.h. According to the Autoconf manual we +## can use multiple headers. However, it does not seem to work in +## practice. Also see https://stackoverflow.com/q/56193203/608639. +## +## - Stop using local.h, and write the config data into a Crypto++ compatible +## config.h. There's not much to "Crypto++ compatible config.h". We need test +## and write preprocessor macros like CRYPTOPP_BIG_ENDIAN, +## CRYPTOPP_LITTLE_ENDIAN, CRYPTOPP_CXX11, etc. There's just a lot of them. +## This problem now appears to be closely related to the config.h.in problem. +## We can't supply a template and expect Autotools to honor it. Also see +## https://lists.gnu.org/archive/html/autoconf/2018-07/msg00014.html. +## +## - Fix incorrect use of --with-sysroot. Autotools does not seem to honor it +## when it is set. Also see http://stackoverflow.com/q/47226389/608639. +## +## - Fix MSYS2 compile error due to `lt-cryptest.c` and `lt-cryptestcwd.c`. +## They are C files and don't use necessary C++ flags. They also use Posix +## functions but fail to define _XOPEN_SOURCE. I'm guessing this has something +## to do with libtool, but I have no idea how to fix it at the moment. Also +## see http://lists.gnu.org/archive/html/bug-libtool/2017-11/msg00002.html. +## +## - Fix the ARM 32-builds. Running 'cryptest v' results in +## "unexpected reloc type 0x03". GNUmakefile and CMake are OK. I've been +## working on it (on and off) for three days and no closer to finding a +## solution. Autotools is such a broken heaping pile of shit... Also see +## https://sourceware.org/ml/binutils/2019-05/msg00287.html +## +## - Fix static initialization order fiasco tests. We don't know how to craft +## the tests because we don't know how to compile two files at once using +## Autotools. Also see https://stackoverflow.com/q/51662985/608639. +## +## - Fix -xarch for SHA when using SunCC. We don't know the arch value at the +## moment. If things work as expected we will fail the feature test and the +## code paths will be disabled. But we want them enabled once Sun supports +## the SHA extensions. See https://stackoverflow.com/q/45872180/608639. +## +## - Fix LDFLAGS on AIX. Autotools is adding unwanted flags to LDFLAGS and it +## is causing a runtime crash in startup code. See +## https://stackoverflow.com/q/51680113/608639. +## +## - Add ubsan and asan targets for testing. +## +## - Setup test environment with Dash, which appears to be the lamest shell. +## +## - Package Autotools propery, for a regular user's definition of "proper". +## I don't know what the final deliverables or artifacts are supposed to +## look like. We also get warnings and errors due to a missing m4/ directory +## even though we don't use it. Maybe we need to distribute an empty m4/ +## directory to keep the tools quiet. + +############################################################################# + +## This configure.ac proceeds in five parts: +## +## 1. configure.ac preamble +## +## 2. compiler and host detection +## +## 3. configure options, like --disable-asm +## +## 4. CPU feature tests, like SSE, NEON, ARMv8, PowerPC +## +## 5. C++ feature tests, like C++11, alignof and alignas +## +## 6. Misc feature and options +## + +############################################################################# +## PART 1 PART 1 PART 1 PART 1 PART 1 PART 1 PART 1 PART 1 +## ========================================================================== +## configure.ac preamble +############################################################################# + +AC_INIT([Crypto++], [8.3], [http://www.cryptopp.com/wiki/Bug_Report], [cryptopp], [http://www.cryptopp.com]) +AC_CONFIG_SRCDIR([configure.ac]) +AC_CONFIG_HEADERS([local.h]) +AC_CONFIG_FILES([Makefile] [libcryptopp.pc]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) + +AM_INIT_AUTOMAKE + +AM_PROG_AS +AC_PROG_LIBTOOL + +AC_PROG_CXX +AC_LANG([C++]) +LT_LANG([C++]) + +# Programs we use +AC_PROG_SED +AC_PROG_AWK +AC_PROG_GREP +AC_PROG_EGREP + +# Detect build and host platforms +AC_CANONICAL_HOST +AC_CANONICAL_BUILD + +## Assert this once to avoid surprises +AC_LANG_ASSERT([C++]) + +############################################################################# + +## Our Autoconf tests are strict. We use custom AC_COMPILE_IFELSE and +## AC_LINK_IFELSE that rejects a feature test if there are any warnings or +## errors. We needed this because Autotools was mis-detecting features on +## AIX and Solarix using XLC and SunCC. We also needed the custom tests +## because Autoconf does not have a "warnings as errors" option that just +## works on all the compilers we support. + +AC_DEFUN([XXX_COMPILE_IFELSE], + [AC_COMPILE_IFELSE( + [$1], + [retval=0 + touch conftest.err + if test `cat conftest.err | wc -w` != "0"; then retval=1; fi + ],[retval=1] + ) + AS_IF([test $retval = 0],[$2],[$3])] +) + +AC_DEFUN([XXX_LINK_IFELSE], + [AC_LINK_IFELSE( + [$1], + [retval=0 + touch conftest.err + if test `cat conftest.err | wc -w` != "0"; then retval=1; fi + ],[retval=1] + ) + AS_IF([test $retval = 0],[$2],[$3])] +) + +############################################################################# +## PART 2 PART 2 PART 2 PART 2 PART 2 PART 2 PART 2 PART 2 +## ========================================================================== +## compiler and host detection +############################################################################# + +## These are some variables that help us track platform and compiler. +## It speeds up configuration by adding some intelligence to the +## test selection process. It also avoids failed configurations by +## avoiding some tests that fail but Autotools reports as success. + +IS_AIX_OS=`echo $build | $GREP -i -c 'aix'` +IS_SUN_OS=`uname -s | $GREP -i -c 'SunOS'` +IS_LINUX_OS=`echo "$build" | $GREP -i -c 'linux'` +IS_APPLE_OS=`echo "$build" | $EGREP -i -c 'apple|darwin'` +IS_ANDROID_OS=`echo $build | $GREP -i -c 'android'` +IS_CYGWIN_OS=`echo $build | $GREP -i -c 'cygwin'` +IS_MINGW_OS=`echo $build | $GREP -i -c 'mingw'` + +IS_IA32=`echo $build | $EGREP -i -c 'i.86|x86_64|amd64'` +IS_ARM32=`echo $build | $EGREP -i -c 'arm|armhf|arm7l|eabihf'` +IS_ARMV8=`echo $build | $EGREP -i -c 'aarch32|aarch64'` +IS_PPC=`echo $build | $EGREP -i -c 'ppc|powerpc|powermac'` +IS_SPARC=`echo $build | $EGREP -i -c 'sparc|sparcv8|sparcv9|sparc64'` + +## Debug builds add more goodies to help break things. I like breaking things. +IS_DEBUG=`echo $CPPFLAGS $CXXFLAGS | $GREP -i -c '\-DDEBUG'` + +############################################################################# + +## Determine the compiler's target. GCC '-dumpmachine' is the target, +## so it represents what the compiler is building for (and not what its +## running on). We add '2>/dev/null' because IBM's xlC dumps the man page +## when presented with '-dumpmachine' since it is not a valid option. + +## See if CXX is valid. Autotools just trucks on with an invalid one. + +if test x"$CXX" != "x"; then + COMPILER_VALID=`command -v "$CXX"` + if test x"$COMPILER_VALID" = "x"; then + AC_MSG_FAILURE(["$CXX" is not a valid compiler or is not on-path]) + fi +fi + +## Compiler is valid. Try to detect the target and vendor. +## SunCC is empty, so we just use $build + +COMPILER_TARGET=`"$CXX" "$CXXFLAGS" -dumpmachine 2>/dev/null` +if test x"$COMPILER_TARGET" = "x"; then + COMPILER_TARGET="$build" +fi + +## Determine the compiler's vendor. We need to work around some Autoconf bugs. + +COMPILER_VERSION=`"$CXX" --version 2>/dev/null | head -n 1` + +## IBM xlC test if COMPILER_VERSION is empty +if test x"$COMPILER_VERSION" = "x"; then + COMPILER_VERSION=`"$CXX" -qversion 2>/dev/null | head -n 1` +fi + +## SunCC test if COMPILER_VERSION is empty +if test x"$COMPILER_VERSION" = "x"; then + COMPILER_VERSION=`"$CXX" -V 2>&1 | head -n 1` +fi + +## Microsoft test if COMPILER_VERSION is empty +if test `basename "$CXX"` = "cl.exe"; then + COMPILER_VERSION=`"$CXX" /? 2>&1 | head -n 1` +fi + +IS_GCC_COMPILER=`echo $COMPILER_VERSION | $GREP -i -v 'Clang' | $EGREP -i -c 'GCC|G\+\+'` +IS_MSC_COMPILER=`echo $COMPILER_VERSION | $GREP -i -c 'Microsoft'` +IS_LLVM_COMPILER=`echo $COMPILER_VERSION | $EGREP -i -c 'LLVM|Clang'` +IS_SUN_COMPILER=`echo $COMPILER_VERSION | $EGREP -i -c 'Sun C'` +IS_ICC_COMPILER=`echo $COMPILER_VERSION | $GREP -i -c 'ICC'` +IS_XLC_COMPILER=`echo $COMPILER_VERSION | $GREP -i -c 'IBM XL'` +IS_PORTS_COMPILER=`echo $COMPILER_VERSION | $EGREP -i -c 'MacPorts|Homebrew'` + +## A catch-all for compilers that claim to be GCC compatible. Each should be +## able to handle GCC syntax. It excludes XLC, SunCC and MSVC +if test "$IS_GCC_COMPILER" != "0" || test "$IS_LLVM_COMPILER" != "0" || \ + test "$IS_ICC_COMPILER" != "0"; then + IS_GNUC_COMPILER=1 +else + IS_GNUC_COMPILER=0 +fi + +## Friendly names for reporting +CXXNAME=`basename "$CXX"` +LDNAME=`basename "$LD"` + +## Small fixup +case "$LDNAME" in + "ld "*) LDNAME=ld + ;; +esac + +############################################################################# +## PART 3 PART 3 PART 3 PART 3 PART 3 PART 3 PART 3 PART 3 +## ========================================================================== +## configure options, like --disable-asm +############################################################################# + +AC_ARG_ENABLE([pthreads], + AS_HELP_STRING([--disable-pthreads], [disable pthreads])) +AS_IF([test "x$enable_pthreads" = "xno"], [ + : # AC_DEFINE([CRYPTOPP_DISABLE_PTHREADS], [1], [disable pthreads]) +]) + +# Applies to all platforms +AC_ARG_ENABLE([asm], + AS_HELP_STRING([--disable-asm], [disable all ASM and intrinsics])) +AS_IF([test "x$enable_asm" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [disable all ASM and intrinsics]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" +]) + +# X86 defines +AC_ARG_ENABLE([sse2], + AS_HELP_STRING([--disable-sse2], [disable x86 SSE2 instructions])) +AS_IF([test "x$enable_sse2" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SSE2], [1], [disable x86 SSE2 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE2" +]) + +AC_ARG_ENABLE([sse3], + AS_HELP_STRING([--disable-sse3], [disable x86 SSE3 instructions])) +AS_IF([test "x$enable_sse3" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SSE3], [1], [disable x86 SSE3 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE3" +]) + +AC_ARG_ENABLE([ssse3], + AS_HELP_STRING([--disable-ssse3], [disable x86 SSSE3 instructions])) +AS_IF([test "x$enable_ssse3" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SSSE3], [1], [disable x86 SSSE3 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSSE3" +]) + +AC_ARG_ENABLE([sse4], + AS_HELP_STRING([--disable-sse4], [disable x86 SSE4.1 and SSE4.2 instructions])) +AS_IF([test "x$enable_sse4" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SSE4], [1], [disable x86 SSE4.1 and SSE4.2 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE4" +]) + +AC_ARG_ENABLE([clmul], + AS_HELP_STRING([--disable-clmul], [disable x86 CLMUL instructions])) +AS_IF([test "x$enable_clmul" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_CLMUL], [1], [disable x86 CLMUL instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_CLMUL" +]) + +AC_ARG_ENABLE([aes], + AS_HELP_STRING([--disable-aes], [disable x86 AES instructions])) +AS_IF([test "x$enable_aes" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_AES], [1], [disable x86 AES instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AES" +]) + +AC_ARG_ENABLE([sha], + AS_HELP_STRING([--disable-sha], [disable x86 SHA instructions])) +AS_IF([test "x$enable_sha" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA], [1], [disable x86 SHA instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA" +]) + +AC_ARG_ENABLE([avx], + AS_HELP_STRING([--disable-avx], [disable x86 AVX instructions])) +AS_IF([test "x$enable_avx" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_AVX], [1], [disable x86 AVX instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX" +]) + +AC_ARG_ENABLE([avx2], + AS_HELP_STRING([--disable-avx2], [disable x86 AVX2 instructions])) +AS_IF([test "x$enable_avx2" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_AVX2], [1], [disable x86 AVX2 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX2" +]) + +# ARM-32 defines +AC_ARG_ENABLE([armv7], + AS_HELP_STRING([--disable-armv7], [disable ARM ARMv7 instructions])) +AS_IF([test "x$enable_armv7" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_ARMV7], [1], [disable ARM ARMv7 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARMV7" +]) + +AC_ARG_ENABLE([neon], + AS_HELP_STRING([--disable-neon], [disable ARM NEON instructions])) +AS_IF([test "x$enable_neon" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_NEON], [1], [disable ARM NEON instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_NEON" +]) + +# ARMv8 defines +AC_ARG_ENABLE([asimd], + AS_HELP_STRING([--disable-asimd], [disable ARMv8 ASIMD instructions])) +AS_IF([test "x$enable_asimd" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_ASIMD], [1], [disable ARMv8 ASIMD instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASIMD" +]) + +AC_ARG_ENABLE([crc32], + AS_HELP_STRING([--disable-crc32], [disable ARMv8 CRC32 instructions])) +AS_IF([test "x$enable_crc32" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_CRC32], [1], [disable ARMv8 CRC32 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_CRC32" +]) + +AC_ARG_ENABLE([pmull], + AS_HELP_STRING([--disable-pmull], [disable ARMv8 PMULL instructions])) +AS_IF([test "x$enable_pmull" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_PMULL], [1], [disable ARMv8 PMULL instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_PMULL" +]) + +AC_ARG_ENABLE([aes], + AS_HELP_STRING([--disable-aes], [disable ARMv8 AES instructions])) +AS_IF([test "x$enable_aes" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_AES], [1], [disable ARMv8 AES instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AES" +]) + +AC_ARG_ENABLE([sha1], + AS_HELP_STRING([--disable-sha1], [disable ARMv8 SHA1 instructions])) +AS_IF([test "x$enable_sha1" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA1], [1], [disable ARMv8 SHA1 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA1" +]) + +AC_ARG_ENABLE([sha256], + AS_HELP_STRING([--disable-sha256], [disable ARMv8 SHA256 instructions])) +AS_IF([test "x$enable_sha256" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA256], [1], [disable ARMv8 SHA256 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA256" +]) + +AC_ARG_ENABLE([sha512], + AS_HELP_STRING([--disable-sha512], [disable ARMv8 SHA512 instructions])) +AS_IF([test "x$enable_sha512" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA512], [1], [disable ARMv8 SHA512 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA512" +]) + +AC_ARG_ENABLE([sha3], + AS_HELP_STRING([--disable-sha3], [disable ARMv8 SHA3 instructions])) +AS_IF([test "x$enable_sha3" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA3], [1], [disable ARMv8 SHA3 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA3" +]) + +AC_ARG_ENABLE([sm3], + AS_HELP_STRING([--disable-sm3], [disable ARMv8 SM3 instructions])) +AS_IF([test "x$enable_sm3" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SM3], [1], [disable ARMv8 SM3 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SM3" +]) + +AC_ARG_ENABLE([sm4], + AS_HELP_STRING([--disable-sm4], [disable ARMv8 SM4 instructions])) +AS_IF([test "x$enable_sm4" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SM4], [1], [disable ARMv8 SM4 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SM4" +]) + +# PPC defines +AC_ARG_ENABLE([altivec], + AS_HELP_STRING([--disable-altivec], [disable PPC Altivec instructions])) +AS_IF([test "x$enable_altivec" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_ALTIVEC], [1], [disable PPC Altivec instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ALTIVEC" +]) + +AC_ARG_ENABLE([aes], + AS_HELP_STRING([--disable-aes], [disable PPC AES instructions])) +AS_IF([test "x$enable_aes" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_AES], [1], [disable PPC AES instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AES" +]) + +AC_ARG_ENABLE([vmull], + AS_HELP_STRING([--disable-vmull], [disable PPC VMULL instructions])) +AS_IF([test "x$enable_vmull" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_VMULL], [1], [disable PPC VMULL instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_VMULL" +]) + +AC_ARG_ENABLE([sha256], + AS_HELP_STRING([--disable-sha256], [disable PPC SHA256 instructions])) +AS_IF([test "x$enable_sha256" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA256], [1], [disable PPC SHA256 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA256" +]) + +AC_ARG_ENABLE([sha512], + AS_HELP_STRING([--disable-sha512], [disable PPC SHA512 instructions])) +AS_IF([test "x$enable_sha512" = "xno"], [ + AC_DEFINE([CRYPTOPP_DISABLE_SHA512], [1], [disable PPC SHA512 instructions]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHA512" +]) + +############################################################################# +## PART 4 PART 4 PART 4 PART 4 PART 4 PART 4 PART 4 PART 4 +## ========================================================================== +## CPU feature tests, like SSE, NEON, ARMv8, PowerPC +############################################################################# + +############################################################################# +## Die early on Android + +if test "$IS_ANDROID_OS" != "0"; then + + AC_MSG_CHECKING([if ANDROID_NDK_ROOT is set]) + if test x"$ANDROID_NDK_ROOT" != "x"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([ANDROID_NDK_ROOT is not set. Please set ANDROID_NDK_ROOT]) + fi +fi + +############################################################################# +## Doxygen documentation +## This only provides a 'make html-doc' recipe in the Makefile. +## If Doxygen is available the user still must issue the command. + +AC_CHECK_PROGS([DOXYGEN], [doxygen]) +if test x"$DOXYGEN" = "x"; then + AM_CONDITIONAL([CRYPTOPP_DOXYGEN_AVAILABLE], [false]) +else + AM_CONDITIONAL([CRYPTOPP_DOXYGEN_AVAILABLE], [true]) +fi + +############################################################################# +## Shared and static libraries + +if true; then + + ## Cant use AC_ENABLE_STATIC and AC_ENABLE_SHARED. AIX Autotools is too old. + AC_MSG_RESULT([checking if static libraries should be enabled... yes]) + + ## http://stackoverflow.com/a/21455267/608639 + case $host_os in + msys* | mingw* | cygwin* ) + AC_MSG_RESULT([checking if shared libraries should be enabled... no]) + enable_shared=no; enable_static=yes; + ;; + *) + AC_MSG_RESULT([checking if shared libraries should be enabled... yes]) + enable_shared=yes; enable_static=yes; + ;; + esac +fi + +############################################################################# +## Pthread library + +if true; then + + ## Add to both CXXFLAGS and LDFLAGS if supported. + ## https://stackoverflow.com/q/2127797/608639. + + SAVED_CXXFLAGS="$CXXFLAGS" + SAVED_LDFLAGS="$LDFLAGS" + + CXXFLAGS="-pthread" + LDFLAGS="-pthread" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Init priorities + +## The tests below should be in two separate source file violating +## init order. One object file should perform the Foo or Bar static +## init, and the second source would have a static object using +## Foo::s_x or Bar::s_x. The problem is, we don't know how to do it. +## Also see https://stackoverflow.com/q/51662985/608639. + +## We can only run one Init Priority test. Otherwise, running both tests +## cause 'CRYPTOPP_INIT_PRIORITY 250' and 'CRYPTOPP_INIT_PRIORITY 0' to be +## written, which results in "warning: CRYPTOPP_INIT_PRIORITY redefined". +## And of course, Autools does not allow us to undefine a macro. + +## GCC-style +if true; then + + SAVED_CXXFLAGS="$CXXFLAGS" + + ## -Wall -Werror are GCC and friends specific. The problem is, + ## Autotools lacks a cross-platform AC_TREAT_WARNINGS_AS_ERRORS. + if test "$IS_MSC_COMPILER" = "0"; then + THIS_CXXFLAGS="-Wall -Werror" + fi + + CXXFLAGS="$THIS_CXXFLAGS" + XXX_PROGRAM="#include + struct Foo { + Foo(int x) : m_x(x) {} + Foo(const Foo& o) : m_x(o.m_x) {} + Foo& operator=(const Foo& o) {m_x=o.m_x; return *this;} + static int s_x; + int m_x; + }; + int Foo::s_x = -1; + static Foo unused __attribute__ ((init_priority (250))) = Foo::s_x; + // This should be in a separate source file violating init order. + // The separate file should have a main() and be linked first. + // static Foo f = Foo::s_x; + // bool success = f.m_x == -1;" + + AC_MSG_CHECKING([if $CXXNAME supports init_priority]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([$XXX_PROGRAM])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([HAVE_GCC_INIT_PRIORITY], [1]) + AC_DEFINE([CRYPTOPP_INIT_PRIORITY], [250], [Enable init_priority]) + else + AC_DEFINE([CRYPTOPP_INIT_PRIORITY], [0], [Disable init_priority]) + fi + + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +## MSC-style +if false; then + + ## The problem is, Autotools lacks a cross-platform + ## AC_TREAT_WARNINGS_AS_ERRORS. Clang, GCC, and friends will see + ## "pragma init_seg" and issue an an unknown pragma warning. + ## Adding -Wall or -Werror will cause MSC and friends to fail on + ## the illegal flag. + if test "$IS_MSC_COMPILER" = "1"; then + THIS_CXXFLAGS="/WX" + else + THIS_CXXFLAGS="-Wall -Werror" + fi + + CXXFLAGS="$THIS_CXXFLAGS" + XXX_PROGRAM="#include + struct Bar { + Bar(int x) : m_x(x) {} + Bar(const Bar& o) : m_x(o.m_x) {} + Bar& operator=(const Bar& o) {m_x=o.m_x; return *this;} + static int s_x; + int m_x; + }; + #pragma init_seg(".CRT$XCU") + int Bar::s_x = -1; + static Bar unused __attribute__ ((init_priority (250))) = Bar::s_x; + // This should be in a separate source file violating init order. + // The separate file should have a main() and be linked first. + // static Bar b = Bar::s_x; + // bool success = b.m_x == -1;" + + AC_MSG_CHECKING([if $CXXNAME supports init_seg]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([$XXX_PROGRAM])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([HAVE_MSC_INIT_PRIORITY], [1]) + AC_DEFINE([CRYPTOPP_INIT_PRIORITY], [250], [Enable init_seg]) + else + AC_DEFINE([CRYPTOPP_INIT_PRIORITY], [0], [Disable init_seg]) + fi + + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Solaris, SunCC and missing optimizations + +OPT_ANY=`echo $CXXFLAGS | $EGREP -c '\-O0|\-O1|\-O2|\-O3|\-O4|\-O5|\-xO0|\-xO1|\-xO2|\-xO3|\-xO4|\-xO5|\-Os|\-Og|\-Ofast'` + +if test "$OPT_ANY" = "0"; then + + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-O2" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + else + + # SunCC + CXXFLAGS="-xO2" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Fix AR on iOS and OS X + +## AR and ARFLAGS usage is currently broke under Autotools. Also see +## http://lists.gnu.org/archive/html/bug-autoconf/2017-11/msg00002.html + +#if test "$IS_APPLE_OS" != "0"; then +# AC_SUBST([AR], ["/usr/bin/libtool"]) +# AC_SUBST([ARFLAGS], ["-static -o"]) +# AC_SUBST([ac_ct_AR], ["/usr/bin/libtool"]) +#fi + +############################################################################# +## Dead code stripping for compilers. Linkers are towards the end of script. +## We have to use XXX_LINK_IFELSE because some compilers don't reject +## -fdata-sections or -ffunction-sections like they should. + +if true; then + + ## Save FLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-fdata-sections" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + CXXFLAGS="-ffunction-sections" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + ## Restore FLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Solaris, GCC and -Wa,--divide + +if test "$IS_SUN_OS" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-Wa,--divide" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Solaris, SunCC compiler options + +if test "$IS_SUN_OS" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-template=no%extdef" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + # https://docs.oracle.com/cd/E18659_01/html/821-1383/bkamt.html + CXXFLAGS="-xregs=no%appl" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## AIX and -qpic=large or -bbigtoc + +if test "$IS_AIX" != "0"; then + + ## Save LDFLAGS + SAVED_LDFLAGS="$LDFLAGS" + + # https://www.ibm.com/developerworks/rational/library/overview-toc-aix/index.html + LDFLAGS="-bbigtoc" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + ## Restore LDFLAGS + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## MacPorts GCC using Clang integrated assembler + +## Modern GCC must use Clang as the assembler. The old Apple +## assembler cannot handle much more than SSE4 or so. We need +## to use -Wa,-q in subsequent tests, if available. + +if test "$IS_APPLE_OS" != "0"; then +if test "$IS_GCC_COMPILER" != "0" && test "$IS_PORTS_COMPILER" != "0"; then + + HAVE_OPT=`echo $CXXFLAGS | $EGREP -i -c '\-Wa,-q'` + if test "$HAVE_OPT" = "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-Wa,-q" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + # We can add -Wa,-q to all files, if needed + if test "$retval" = "0"; then + # AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + WAQ_FLAG="-Wa,-q" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" + fi +fi +fi + +############################################################################# +## Clang integrated assembler and SunCC. + +## Also see https://bugs.llvm.org/show_bug.cgi?id=39895. +if test "$IS_IA32" = "1" && test "x$enable_asm" != "xno"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-msse2 $WAQ_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports mixed ASM]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_asm_mixed.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" != "0"; then + AC_DEFINE([CRYPTOPP_DISABLE_MIXED_ASM], [1], [Disable mixed asm]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_MIXED_ASM" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## IA-32, i386, i586, i686, x86_64, etc. + +## This block handles GCC and friends, including -Wa,-q if needed. +## i86pc and SunCC is handled after this block. +if test "$IS_IA32" = "1" && test "$IS_GNUC_COMPILER" = "1"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + ##### SSE2 ##### + + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse2 $WAQ_FLAG" + else + CXXFLAGS="-msse2" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse2.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SSE2_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_DONNA_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_SSE2_AVAILABLE], [1], [Enable SSE2]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [Disable SSE2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" + fi + + ##### SSE3 ##### + + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse3 $WAQ_FLAG" + else + CXXFLAGS="-msse3" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_DEFINE([CRYPTOPP_SSE3_AVAILABLE], [1], [Enable SSE3]) + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE3], [1], [Disable SSE3]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE3" + fi + + ##### SSSE3 ##### + + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mssse3 $WAQ_FLAG" + else + CXXFLAGS="-mssse3" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_ssse3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SSSE3_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_ARIA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHAM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_KECCAK_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_LEA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_SSSE3_AVAILABLE], [1], [Enable SSSE3]) + else + AC_DEFINE([CRYPTOPP_DISABLE_SSSE3], [1], [Disable SSSE3]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSSE3" + fi + + ##### SSE4.1 ##### + + ## Old BSD linkers don't support SSE4 or above. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse4.1 $WAQ_FLAG" + else + CXXFLAGS="-msse4.1" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse41.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SSE41_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_SSE41_AVAILABLE], [1], [Enable SSE4.1]) + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE4], [1], [Disable SSE4.1]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE4" + fi + + ##### SSE4.2 ##### + + ## Old BSD linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse4.2 $WAQ_FLAG" + else + CXXFLAGS="-msse4.2" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse42.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SSE42_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CRC_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_SSE42_AVAILABLE], [1], [Enable SSE4.2]) + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE4], [1], [Disable SSE4.2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE4" + fi + + ##### PCLMUL ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mpclmul $WAQ_FLAG" + else + CXXFLAGS="-mpclmul" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_clmul.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + # if -mpclmul fails then it is disabled in the next test + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_GF2N_FLAG], [$CXXFLAGS]) + fi + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mssse3 -mpclmul $WAQ_FLAG" + else + CXXFLAGS="-mssse3 -mpclmul" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_clmul.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_CLMUL_AVAILABLE], [1], [Enable CLMUL]) + else + AC_DEFINE([CRYPTOPP_DISABLE_CLMUL], [1], [Disable CLMUL]) + fi + + ##### SSSE3+AES ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mssse3 -maes $WAQ_FLAG" + else + CXXFLAGS="-mssse3 -maes" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_aes.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + # if -maes fails then it is disabled in the next test + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SM4_FLAG], [$CXXFLAGS]) + fi + + ##### SSE4.1+AES ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse4.1 -maes $WAQ_FLAG" + else + CXXFLAGS="-msse4.1 -maes" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_aes.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_AESNI_AVAILABLE], [1], [Enable AESNI]) + else + AC_DEFINE([CRYPTOPP_DISABLE_AESNI], [1], [Disable AESNI]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AESNI" + fi + + ##### AVX ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mavx $WAQ_FLAG" + else + CXXFLAGS="-mavx" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_avx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_CHACHA_AVX_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_AVX_AVAILABLE], [1], [Enable AVX]) + else + AC_DEFINE([CRYPTOPP_DISABLE_AVX], [1], [Disable AVX]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX" + fi + + ##### AVX2 ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-mavx2 $WAQ_FLAG" + else + CXXFLAGS="-mavx2" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_avx2.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_CHACHA_AVX2_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_AVX2_AVAILABLE], [1], [Enable AVX2]) + else + AC_DEFINE([CRYPTOPP_DISABLE_AVX2], [1], [Disable AVX2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX2" + fi + + ##### SHA ##### + + ## Some old compilers, assemblers and linkers don't support it. + if test x"$WAQ_FLAG" != "x"; then + CXXFLAGS="-msse4.2 -msha $WAQ_FLAG" + else + CXXFLAGS="-msse4.2 -msha" + fi + + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sha.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_SHANI_AVAILABLE], [1], [Enable SHANI]) + else + AC_DEFINE([CRYPTOPP_DISABLE_SHANI], [1], [Disable SHANI]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHANI" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +## This block handles i86pc and SunCC. GCC and friends were handled before this block +if test "$IS_IA32" != "0" && test "$IS_SUN_COMPILER" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + ##### SSE2 ##### + + CXXFLAGS="-xarch=sse2" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse2.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + ## GCM AES and SHA should be overwritten with CLMUL, AES and SHA if available. + ## If not available then need -xarch=sse2 due to SSE2, GCM_Xor16_SSE2, etc. + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SSE2__=1" + AC_SUBST([CRYPTOPP_SSE2_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_SSE2_AVAILABLE], [1], [Enable SSE2]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [Disable SSE2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" + fi + + ##### SSE3 ##### + + ## Nothing pivots around SSE3 specifically, but we do use + ## insns from the ISA. Sun requires it as a linker flag. + CXXFLAGS="-xarch=sse3" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SSE3__=1" + AC_DEFINE([CRYPTOPP_SSE3_AVAILABLE], [1], [Enable SSE3]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE3], [1], [Disable SSE3]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE3" + fi + + ##### SSSE3 ##### + + CXXFLAGS="-xarch=ssse3" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_ssse3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SSSE3__=1" + AC_SUBST([CRYPTOPP_SSSE3_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_ARIA_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_CHAM_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_KECCAK_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_LEA_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_SSSE3_AVAILABLE], [1], [Enable SSSE3]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_SSSE3], [1], [Disable SSSE3]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSSE3" + fi + + ##### SSE4.1 ##### + + CXXFLAGS="-xarch=sse4_1" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse41.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SSE4_1__=1" + AC_SUBST([CRYPTOPP_SSE41_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_SSE41_AVAILABLE], [1], [Enable SSE4.1]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE4], [1], [Disable SSE4.1]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE4" + fi + + ##### SSE4.2 ##### + + CXXFLAGS="-xarch=sse4_2" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sse42.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SSE4_2__=1" + AC_SUBST([CRYPTOPP_SSE42_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_CRC_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_SSE42_AVAILABLE], [1], [Enable SSE4.2]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_SSE4], [1], [Disable SSE4.2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SSE4" + fi + + ##### CLMUL ##### + + CXXFLAGS="-xarch=aes" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_clmul.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__CLMUL__=1" + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_GF2N_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_CLMUL_AVAILABLE], [1], "Enable CLMUL") + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_CLMUL], [1], "Disable CLMUL") + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_CLMUL" + fi + + ##### AES ##### + + CXXFLAGS="-xarch=aes" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_aes.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__AES__=1" + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGSX]) + AC_SUBST([CRYPTOPP_SM4_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_AESNI_AVAILABLE], [1], "Enable AESNI") + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_AESNI], [1], "Disable AESNI") + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AESNI" + fi + + ##### AVX ##### + + CXXFLAGS="-xarch=avx" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_avx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__AVX__=1" + AC_DEFINE([CRYPTOPP_AVX_AVAILABLE], [1], [Enable AVX]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_AVX], [1], [Disable AVX]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX" + fi + + ##### AVX2 ##### + + CXXFLAGS="-xarch=avx2" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_avx2.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__AVX2__=1" + AC_SUBST([CRYPTOPP_CHACHA_AVX2_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_AVX2_AVAILABLE], [1], [Enable AVX2]) + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_AVX2], [1], [Disable AVX2]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_AVX2" + fi + + ##### RDRAND ##### + + ## https://docs.oracle.com/cd/E77782_01/html/E77792/gqexw.html + CXXFLAGS="-xarch=avx_i" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_rdrand.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + ## It is not clear if we can avoid the linker option for Solaris + ## Also see https://stackoverflow.com/q/51678753/608639 + #if test "$retval" = "0"; then + # CXXFLAGSX="$CXXFLAGS -D__RDRND__=1" + # AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + #fi + + ##### RDSEED ##### + + ## https://docs.oracle.com/cd/E60778_01/html/E60745/bjapr.html + CXXFLAGS="-xarch=avx2_i" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_rdseed.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + ## It is not clear if we can avoid the linker option for Solaris + ## Also see https://stackoverflow.com/q/51678753/608639 + #if test "$retval" = "0"; then + # CXXFLAGSX="$CXXFLAGS -D__RDSEED__=1" + # AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + #fi + + ##### SHA ##### + + ##CXXFLAGS="-xarch=avx2_i" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_x86_sha.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + CXXFLAGSX="$CXXFLAGS -D__SHA__=1" + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGSX]) + AC_DEFINE([CRYPTOPP_SHA_AVAILABLE], [1], "Enable SHANI") + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + else + AC_DEFINE([CRYPTOPP_DISABLE_SHANI], [1], "Disable SHANI") + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_SHANI" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## ARM A-32, including NEON, soft floats and hard floats + +if test "$IS_ARM32" != "0" || test "$IS_ARMV8" != "0"; then + + # https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html + + AC_CHECK_HEADERS(arm_neon.h, + [AC_DEFINE([CRYPTOPP_ARM_NEON_HEADER], [1], [arm_neon.h is available])], + [AC_DEFINE([CRYPTOPP_ARM_NEON_HEADER], [0], [arm_neon.h is not available])] + ) +fi + +if test "$IS_ARM32" != "0" && test "$IS_ANDROID_OS" = "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-march=armv7-a" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + CXXFLAGS="-march=armv7-a -mfpu=neon" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_neon.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_ARIA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHAM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CRC_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_LEA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_NEON_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SM4_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SPECK64_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_NEON_AVAILABLE], [1], [Enable NEON]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [Disbale NEON]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Android and -mfloat-abi=softfp + +if test "$IS_ARM32" != "0" && test "$IS_ANDROID_OS" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_neon.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_ARIA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHAM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CRC_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_LEA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_NEON_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SM4_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_NEON_AVAILABLE], [1], [Enable NEON]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [Disbale NEON]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" + +fi + +############################################################################# +## ARM A-32 and aes_armv4.S + +# Used by Makefile.am to compile aes_armv4.S and sha1_armv4.S. +# Only valid on Linux because ASM is written for GNU AS (GAS). +if test "$IS_ARM32" != "0" && test "$IS_LINUX_OS" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-march=armv7-a -Wa,--noexecstack" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CONDITIONAL([CRYPTOGAMS_ARM_SOURCES], [true]) + AC_SUBST([CRYPTOPGAMS_ARMV4_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPGAMS_ARMV4_THUMB_FLAG], [$CXXFLAGS]) + fi + + # For Clang, aes_armv4.S needs -mthumb + if test "$IS_LLVM_COMPILER" != "0"; then + + CXXFLAGS="-march=armv7-a -mthumb -Wa,--noexecstack" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPGAMS_ARMV4_THUMB_FLAG], [$CXXFLAGS]) + fi + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +else + # Required for other platforms + AM_CONDITIONAL([CRYPTOGAMS_ARM_SOURCES], [false]) +fi + +############################################################################# +## ARM Aarch32 and Aarch64 + +if test "$IS_ARMV8" != "0"; then + + # https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html + + AC_CHECK_HEADERS(arm_acle.h, + [AC_DEFINE([CRYPTOPP_ARM_ACLE_HEADER], [1], [arm_acle.h is available])], + [AC_DEFINE([CRYPTOPP_ARM_ACLE_HEADER], [0], [arm_acle.h is not available])] + ) + +fi + +if test "$IS_ARMV8" != "0"; then + + # https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-march=armv8-a" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_asimd.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_ARIA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_CHAM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_LEA_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_NEON_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$CXXFLAGS]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ASM], [1], [Enable NEON]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ASM" + fi + + CXXFLAGS="-mfix-cortex-a53-835769" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + CXXFLAGS="-mfix-cortex-a53-843419" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $CXXFLAGS" + fi + + CXXFLAGS="-march=armv8-a+crc" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_crc.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_CRC_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_CRC32_AVAILABLE], [1], [Enable ARMv8 CRC32]) + else + AC_DEFINE([CRYPTOPP_DISABLE_CRC32], [1], [Disable ARMv8 CRC32]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_CRC32" + fi + + CXXFLAGS="-march=armv8-a+crypto" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (AES)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_aes.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_AES_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_AES_AVAILABLE], [1], [Enable ARMv8 AES]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ARM_AES], [1], [Disable ARMv8 AES]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_AES" + fi + + CXXFLAGS="-march=armv8-a+crypto" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (PMULL)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_pmull.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_GCM_FLAG], [$CXXFLAGS]) + AC_SUBST([CRYPTOPP_GF2N_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_PMULL_AVAILABLE], [1], [Enable ARMv8 PMULL]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ARM_PMULL], [1], [Disable ARMv8 PMULL]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_PMULL" + fi + + CXXFLAGS="-march=armv8-a+crypto" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SHA1)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sha1.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SHA1_AVAILABLE], [1], [Enable ARMv8 SHA1]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ARM_SHA], [1], [Disable ARMv8 SHA1]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SHA" + fi + + CXXFLAGS="-march=armv8-a+crypto" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SHA256)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sha256.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SHA_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SHA256_AVAILABLE], [256], [Enable ARMv8 SHA256]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ARM_SHA], [256], [Disable ARMv8 SHA256]) + AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SHA" + fi + + CXXFLAGS="-march=armv8.3-a+sha3" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SHA512)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sha3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SHA512_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SHA512_AVAILABLE], [1], [Enable ARMv8 SHA512]) + #else + #AC_DEFINE([CRYPTOPP_DISABLE_ARM_SHA512], [1], [Disable ARMv8 SHA512]) + #AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SHA512" + fi + + CXXFLAGS="-march=armv8.3-a+sha3" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SHA3)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sha3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SHA3_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SHA3_AVAILABLE], [1], [Enable ARMv8 SHA3]) + #else + #AC_DEFINE([CRYPTOPP_DISABLE_ARM_SHA3], [1], [Disable ARMv8 SHA3]) + #AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SHA3" + fi + + CXXFLAGS="-march=armv8.3-a+sm4" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SM3)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sm3.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SM3_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SM3_AVAILABLE], [1], [Enable ARMv8 SM3]) + #else + #AC_DEFINE([CRYPTOPP_DISABLE_ARM_SM3], [1], [Disable ARMv8 SM3]) + #AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SM3" + fi + + CXXFLAGS="-march=armv8.3-a+sm4" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS (SM4)]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_arm_sm4.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_SM4_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_SM4_AVAILABLE], [1], [Enable ARMv8 SM4]) + #else + #AC_DEFINE([CRYPTOPP_DISABLE_ARM_SM4], [1], [Disable ARMv8 SM4]) + #AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_SM4" + fi + + CXXFLAGS="-march=armv8.3-a+rng" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([CRYPTOPP_ARM_RNG_FLAG], [$CXXFLAGS]) + AC_DEFINE([CRYPTOPP_ARM_RNG_AVAILABLE], [1], [Enable ARMv8 RNG]) + #else + #AC_DEFINE([CRYPTOPP_DISABLE_ARM_RNG], [1], [Disable ARMv8 RNG]) + #AM_CXXFLAGS="$AM_CXXFLAGS -DCRYPTOPP_DISABLE_ARM_RNG" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## IBC XL C/C++ compiler, applies to IA-32 and PPC + +if test "$IS_XLC_COMPILER" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + ## -qrtti must be present for some xlC compilers + HAS_RTTI=`echo $CPPFLAGS $CXXFLAGS | $EGREP -i -c '\-qrtti'` + if test "$HAS_RTTI" = "0"; then + + CXXFLAGS="-qrtti" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + ## -qpic must be present for some xlC compilers + HAS_PIC=`echo $CPPFLAGS $CXXFLAGS | $GREP -i -c '\-qpic'` + if test "$HAS_PIC" = "0"; then + + CXXFLAGS="-qpic" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + # Promotes optimizations + CXXFLAGS="-qmaxmem=-1" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + # Promotes optimizations + CXXFLAGS="-qthreaded" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + if test "$IS_DEBUG" != "0"; then + + # Finds alias violations + CXXFLAGS="-qalias=noansi" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +# More stupid LLVM games. Clang pretending to be three different compilers. +# https://lists.tetaneutral.net/pipermail/cfarm-users/2018-July/000331.html + +if test "$IS_XLC_COMPILER" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-qxlcompatmacros" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" + +fi + +############################################################################# +## PowerPC and PowerPC-64 + +if test "$IS_PPC" != "0"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + # XLC requires -qaltivec in addition to Arch or CPU option + if test "$IS_XLC_COMPILER" = "1"; then + ALTIVEC_FLAG="-qarch=auto -qaltivec" + POWER7_VSX_FLAG="-qarch=pwr7 -qvsx -qaltivec" + POWER7_PWR_FLAG="-qarch=pwr7 -qaltivec" + POWER8_FLAG="-qarch=pwr8 -qaltivec" + POWER9_FLAG="-qarch=pwr9 -qaltivec" + else + ALTIVEC_FLAG="-maltivec" + POWER7_VSX_FLAG="-mcpu=power7 -mvsx" + POWER7_PWR_FLAG="-mcpu=power7" + POWER8_FLAG="-mcpu=power8" + POWER9_FLAG="-mcpu=power9" + fi + + ##### Altivec ##### + + CXXFLAGS="$ALTIVEC_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_ppc_altivec.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + # Assume success, unset on failure + if test "$retval" != "0"; then + AC_SUBST([ALTIVEC_FLAG],[""]) + fi + + ##### POWER7 ##### + + CXXFLAGS="$POWER7_VSX_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_ppc_power7.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + # Figure out what is needed for POWER7 + if test "$retval" = "0"; then + AC_SUBST([POWER7_FLAG],[$POWER7_VSX_FLAG]) + else + CXXFLAGS="$POWER7_PWR_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_ppc_power7.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_SUBST([POWER7_FLAG],[$POWER7_PWR_FLAG]) + else + AC_SUBST([POWER7_FLAG],[""]) + fi # POWER7_PWR_FLAG + fi # POWER7_VSX_FLAG + + ##### POWER8 ##### + + CXXFLAGS="$POWER8_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_ppc_power8.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" != "0"; then + AC_SUBST([POWER8_FLAG],[""]) + fi + + ##### POWER9 ##### + + CXXFLAGS="$POWER9_FLAG" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_ppc_power9.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" != "0"; then + AC_SUBST([POWER9_FLAG],[""]) + fi + + # POWER9 and DARN random number generator. Disabled due to + # https://github.com/weidai11/cryptopp/issues/986 + #if test x"$POWER9_FLAG" != "x"; then + # AC_SUBST([CRYPTOPP_POWER9_FLAG], [$POWER9_FLAG]) + # AC_SUBST([CRYPTOPP_DARN_FLAG], [$POWER9_FLAG]) + #else + # AC_DEFINE([CRYPTOPP_DISABLE_POWER9], [1], [Disable POWER9]) + #fi + + ##### Fixups ##### + + ## POWER8 and in-core crypto. + if test x"$POWER8_FLAG" != "x"; then + AC_SUBST([CRYPTOPP_POWER8_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_BLAKE2B_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_CRC_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_AES_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_GCM_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_GF2N_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_SHA_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_SIMON128_FLAG], [$POWER8_FLAG]) + AC_SUBST([CRYPTOPP_SPECK128_FLAG], [$POWER8_FLAG]) + AC_DEFINE([CRYPTOPP_POWER8_CRC_AVAILABLE], [1], [Enable POWER8 CRC]) + AC_DEFINE([CRYPTOPP_POWER8_AES_AVAILABLE], [1], [Enable POWER8 AES]) + AC_DEFINE([CRYPTOPP_POWER8_PMULL_AVAILABLE], [1], [Enable POWER8 PMULL]) + AC_DEFINE([CRYPTOPP_POWER8_SHA_AVAILABLE], [1], [Enable POWER8 SHA]) + else + AC_DEFINE([CRYPTOPP_DISABLE_POWER8], [1], [Disable POWER8]) + fi + + # POWER7 and VSX + if test x"$POWER7_FLAG" != "x"; then + AC_SUBST([CRYPTOPP_POWER7_FLAG], [$POWER7_FLAG]) + AC_DEFINE([CRYPTOPP_POWER7_AVAILABLE], [1], [Enable POWER7]) + else + AC_DEFINE([CRYPTOPP_DISABLE_POWER7], [1], [Disable POWER7]) + fi + + # Plain old Altivec + if test x"$ALTIVEC_FLAG" != "x"; then + AC_SUBST([CRYPTOPP_ALTIVEC_FLAG], [$ALTIVEC_FLAG]) + AC_SUBST([CRYPTOPP_BLAKE2S_FLAG], [$ALTIVEC_FLAG]) + AC_SUBST([CRYPTOPP_CHACHA_FLAG], [$ALTIVEC_FLAG]) + AC_DEFINE([CRYPTOPP_ALTIVEC_AVAILABLE], [1], [Enable Altivec]) + else + AC_DEFINE([CRYPTOPP_DISABLE_ALTIVEC], [1], [Disable Altivec]) + fi + + # Drop to Altivec if higher Power is not available + if test x"$ALTIVEC_FLAG" != "x"; then + if test x"$CRYPTOPP_GCM_FLAG" = "x"; then + AC_SUBST([CRYPTOPP_GCM_FLAG], [$ALTIVEC_FLAG]) + fi + fi + + # Now set a disable flag + if test x"$ALTIVEC_FLAG" = "x"; then + AM_CXXFLAGS="-DCRYPTOPP_DISABLE_ALTIVEC $AM_CXXFLAGS" + elif test x"$POWER7_FLAG" = "x"; then + AM_CXXFLAGS="-DCRYPTOPP_DISABLE_POWER7 $AM_CXXFLAGS" + elif test x"$POWER8_FLAG" = "x"; then + AM_CXXFLAGS="-DCRYPTOPP_DISABLE_POWER8 $AM_CXXFLAGS" + elif test x"$POWER9_FLAG" = "x"; then + AM_CXXFLAGS="-DCRYPTOPP_DISABLE_POWER9 $AM_CXXFLAGS" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## PART 5 PART 5 PART 5 PART 5 PART 5 PART 5 PART 5 PART 5 +## ========================================================================== +## C++ feature tests, like C++11, alignof and alignas +############################################################################# + +############################################################################# +## Newlib and _XOPEN_SOURCE + +if true; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + ## This test may need to be changed if the Newlib folks provide directions. + ## Also see http://www.sourceware.org/ml/newlib/2017/msg01095.html. + + AC_MSG_CHECKING([whether runtime library is Newlib]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_newlib.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + + CXXFLAGS="-D_XOPEN_SOURCE=600" + AC_MSG_CHECKING([if runtime library supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_DEFINE([_XOPEN_SOURCE], [600], [Enable _XOPEN_SOURCE]) + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## libstdc++ and _GLIBCXX_DEBUG +if test "$IS_DEBUG" = "1"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + AC_MSG_CHECKING([whether runtime library is libstdc++]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_glibc.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + + CXXFLAGS="-D_GLIBCXX_DEBUG" + AC_MSG_CHECKING([if runtime library supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Now test C++ features + +#AH_HEADER= +#AC_CONFIG_COMMANDS_PRE( +# [m4_ifndef([AH_HEADER], [AC_CONFIG_HEADERS([config_cxx.h])]) +#]) + +############################################################################# + +if true; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + AC_MSG_CHECKING([whether runtime library is C++11]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx11.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_DEFINE([CRYPTOPP_CXX11], [1], [C++11 is available]) + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +if true; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + AC_MSG_CHECKING([whether runtime library is C++17]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([`cat TestPrograms/test_cxx17.cxx`])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AC_DEFINE([CRYPTOPP_CXX17], [1], [C++17 is available]) + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## PART 6 PART 6 PART 6 PART 6 PART 6 PART 6 PART 6 PART 6 +## ========================================================================== +## Misc feature and options +############################################################################# + +############################################################################# +## Add -pipe for non-IoT gadgets to speedup compiles. We use 2GB RAM as +## threshold. Anything with less than 2GB will not use -pipe. + +# Unix, Linux and family +MEM_SIZE=`$GREP "MemTotal" /proc/meminfo 2>/dev/null | $AWK '{print int($2/1024/1024); exit;}'` + +# Darwin +if test "$IS_APPLE_OS" != "0"; then + MEM_SIZE=`sysctl -a 2>&1 | $GREP "hw.memsize" 2>/dev/null | $AWK '{print int($3/1024/1024); exit;}'` +fi + +# Solaris +if test "$IS_SUN_OS" != "0"; then + MEM_SIZE=`prtconf 2>/dev/null | $GREP "Memory" | $AWK '{print int($3/1024); exit;}'` +fi + +# AIX +if test "$IS_AIX_OS" != "0"; then + MEM_SIZE=`prtconf -m 2>/dev/null | $GREP "MB" | $AWK '{print int($3/1024); exit;}'` +fi + +if test "$MEM_SIZE" -ge "2"; then + + ## Save CXXFLAGS + SAVED_CXXFLAGS="$CXXFLAGS" + + CXXFLAGS="-pipe" + AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS]) + XXX_COMPILE_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_CXXFLAGS="$AM_CXXFLAGS $CXXFLAGS" + fi + + ## Restore CXXFLAGS + CXXFLAGS="$SAVED_CXXFLAGS" +fi + +############################################################################# +## Dead code stripping for linkers. Compilers are towards the head of script. + +if true; then + + ## Save FLAGS + SAVED_LDFLAGS="$LDFLAGS" + + # OS X uses -Wl,-dead_strip + LDFLAGS="-Wl,-dead_strip" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + # Linux uses --gc-sections + LDFLAGS="-Wl,--gc-sections" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + # Solaris uses -z discard-unused + # https://docs.oracle.com/cd/E26502_01/html/E26507/glmth.html + LDFLAGS="-Wl,-z,discard-unused=sections" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + # Solaris uses -z discard-unused + # https://docs.oracle.com/cd/E26502_01/html/E26507/glmth.html + LDFLAGS="-Wl,-z,discard-unused=dependencies" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + ## Restore FLAGS + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## Solaris, map file and libraries + +if test "$IS_SUN_OS" != "0"; then + + ## Save LDFLAGS + SAVED_LDFLAGS="$LDFLAGS" + + ## IA-32 gets a Mapfile for capabilities. Due to libtool stripping + ## -M arguments, we need to escape it with -XCClinker in AM_LDFLAGS. + if test "$IS_IA32" != "0"; then + LDFLAGS="-Mcryptopp.mapfile" + AC_MSG_CHECKING([if $LDNAME supports -Mcryptopp.mapfile]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS -XCClinker -Mcryptopp.mapfile" + fi + fi + + ## Restore LDFLAGS + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## Add --build-id to linker for debug symbols. +## https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html + +if true; then + + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--build-id" + + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## Demangle output names if possible for friendlier err messages + +if true; then + + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--demangle" + + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## MinGW libraries +## Automake does not follow Make conventions and use AM_LDLIBS. Instead +## it stuffs libraries in the flags which messes up pkg-config *.pc files. + +if test "$IS_MINGW_OS" = "1"; then + + SAVED_LDFLAGS="$LDFLAGS" + + LDFLAGS="-lws2_32" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + ## Restore LDFLAGS + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## OpenMP libraries +## Automake does not follow Make conventions and use AM_LDLIBS. Instead +## it stuffs libraries in the flags which messes up pkg-config *.pc files. + +if true; then + + COUNT1=`echo $CXXFLAGS | $EGREP -c '\-fopenmp'` + COUNT2=`echo $LDFLAGS | $EGREP -c '\-lgomp'` + if test "$COUNT1" != "0" && test "$COUNT2" = "0"; then + + SAVED_LDFLAGS="$LDFLAGS" + + LDFLAGS="-lgomp" + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" + fi +fi + +############################################################################# +## Add -Wl,--exclude-libs,ALL for GNU linker to stop us from re-exporting +## symbols in other libraries. This keeps our ELF section header smaller. + +if test "$enable_shared" = "yes"; then + + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--exclude-libs,ALL" + + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## Add -Wl,--as-needed for linker to avoid linking unneeded libraries. + +if true; then + + SAVED_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--as-needed" + + AC_MSG_CHECKING([if $LDNAME supports $LDFLAGS]) + XXX_LINK_IFELSE( + [AC_LANG_SOURCE([[int main() { return 0; }]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])] + ) + + if test "$retval" = "0"; then + AM_LDFLAGS="$AM_LDFLAGS $LDFLAGS" + fi + + LDFLAGS="$SAVED_LDFLAGS" +fi + +############################################################################# +## Android cpu-features library + +if test "$IS_ANDROID_OS" != "0"; then + + # ac_srcdir does not work. Autotools blows... + + THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h" + AC_CHECK_FILE([$THIS_FILE], + [cp "$THIS_FILE" "./"] + ) + + THIS_FILE="$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c" + AC_CHECK_FILE([$THIS_FILE], + [cp "$THIS_FILE" "./"] + ) + + # And set the flag so Makefile adds the recipes + THIS_FILE="./cpu-features.c" + AC_CHECK_FILE([$THIS_FILE], + [AM_CONDITIONAL([ANDROID_CPU_FEATURES], [true])], + [AM_CONDITIONAL([ANDROID_CPU_FEATURES], [false])] + ) +else + AM_CONDITIONAL([ANDROID_CPU_FEATURES], [false]) +fi + +############################################################################# +## Miscellaneous items + +## Fix CCAS and CCASFLAGS +## Also see https://stackoverflow.com/q/51575580/608639 +AC_SUBST([CCAS], [$CXX]) +AC_SUBST([CCASFLAGS], ["$AM_CXXFLAGS $CXXFLAGS"]) + +## Without this 'make' uses our GNUmakefile, and not Makefile +AC_CONFIG_COMMANDS_PRE([rm -f GNUmakefile 2>/dev/null]) +AC_CONFIG_COMMANDS_PRE([rm -f GNUmakefile-cross 2>/dev/null]) + +## Write the Automake flags we set +AC_SUBST([AM_CXXFLAGS]) +AC_SUBST([AM_LDFLAGS]) + +## Write the output artifacts +AC_OUTPUT + +## Automake bug workaround. If libcryptopp_la_SOURCES is an empty list, Automake assumes +## C source files and drive link through the C compiler. We provide the empty adhoc.cpp +## to get things back on course, so adhoc.cpp must always be copied. + +AC_CONFIG_COMMANDS_POST([cp adhoc.cpp.proto adhoc.cpp]) + +############################################################################# +## Print a summary of information + +echo "" +echo "***********************************************************************" + +echo "Auto-configuration complete. A summary of options are below. If" +echo "something looks wrong then please modify config.h and please report" +echo "it at http://github.com/noloader/cryptopp-autotools." +echo "" + +echo " Build triplet: $build" +echo " Compiler target: $COMPILER_TARGET" +echo "Compiler version: $COMPILER_VERSION" +echo "" + +echo "Static library: $enable_static" +echo "Shared library: $enable_shared" +echo "" + +if test "$IS_ARM32" != "0" || test "$IS_ARMV8" != "0"; then + if test x"$CRYPTOPP_ARM_NEON_HEADER" != "x"; then + echo "CRYPTOPP_ARM_NEON_HEADER: $CRYPTOPP_ARM_NEON_HEADER" + fi + if test x"$CRYPTOPP_ARM_ACLE_HEADER" != "x"; then + echo "CRYPTOPP_ARM_ACLE_HEADER: $CRYPTOPP_ARM_ACLE_HEADER" + fi + echo "" +fi + +if test x"$CRYPTOPP_SSE2_FLAG" != "x"; then + echo "CRYPTOPP_SSE2_FLAG: $CRYPTOPP_SSE2_FLAG" +fi +if test x"$CRYPTOPP_NEON_FLAG" != "x"; then + echo "CRYPTOPP_NEON_FLAG: $CRYPTOPP_NEON_FLAG" +fi +if test x"$CRYPTOPP_ALTIVEC_FLAG" != "x"; then + echo "CRYPTOPP_ALTIVEC_FLAG: $CRYPTOPP_ALTIVEC_FLAG" +fi +if test x"$CRYPTOPP_POWER7_FLAG" != "x"; then + echo "CRYPTOPP_POWER7_FLAG: $CRYPTOPP_POWER7_FLAG" +fi +if test x"$CRYPTOPP_POWER8_FLAG" != "x"; then + echo "CRYPTOPP_POWER8_FLAG: $CRYPTOPP_POWER8_FLAG" +fi +#if test x"$CRYPTOPP_POWER9_FLAG" != "x"; then +# echo "CRYPTOPP_POWER9_FLAG: $CRYPTOPP_POWER9_FLAG" +#fi +if test x"$CRYPTOPP_ARIA_FLAG" != "x"; then + echo "CRYPTOPP_ARIA_FLAG: $CRYPTOPP_ARIA_FLAG" +fi +if test x"$CRYPTOPP_BLAKE2S_FLAG" != "x"; then + echo "CRYPTOPP_BLAKE2S_FLAG: $CRYPTOPP_BLAKE2S_FLAG" +fi +if test x"$CRYPTOPP_BLAKE2B_FLAG" != "x"; then + echo "CRYPTOPP_BLAKE2B_FLAG: $CRYPTOPP_BLAKE2B_FLAG" +fi +if test x"$CRYPTOPP_CHACHA_FLAG" != "x"; then + echo "CRYPTOPP_CHACHA_FLAG: $CRYPTOPP_CHACHA_FLAG" +fi +if test x"$CRYPTOPP_CHACHA_AVX2_FLAG" != "x"; then + echo "CRYPTOPP_CHACHA_AVX2_FLAG: $CRYPTOPP_CHACHA_AVX2_FLAG" +fi +if test x"$CRYPTOPP_CHAM_FLAG" != "x"; then + echo "CRYPTOPP_CHAM_FLAG: $CRYPTOPP_CHAM_FLAG" +fi +if test x"$CRYPTOPP_CRC_FLAG" != "x"; then + echo "CRYPTOPP_CRC_FLAG: $CRYPTOPP_CRC_FLAG" +fi +if test x"$CRYPTOPP_DONNA_FLAG" != "x"; then + echo "CRYPTOPP_DONNA_FLAG: $CRYPTOPP_DONNA_FLAG" +fi +if test x"$CRYPTOPP_LEA_FLAG" != "x"; then + echo "CRYPTOPP_LEA_FLAG: $CRYPTOPP_LEA_FLAG" +fi +if test x"$CRYPTOPP_KECCAK_FLAG" != "x"; then + echo "CRYPTOPP_KECCAK_FLAG: $CRYPTOPP_KECCAK_FLAG" +fi +if test x"$CRYPTOPP_GCM_FLAG" != "x"; then + echo "CRYPTOPP_GCM_FLAG: $CRYPTOPP_GCM_FLAG" +fi +if test x"$CRYPTOPP_GF2N_FLAG" != "x"; then + echo "CRYPTOPP_GF2N_FLAG: $CRYPTOPP_GF2N_FLAG" +fi +if test x"$CRYPTOPP_AES_FLAG" != "x"; then + echo "CRYPTOPP_AES_FLAG: $CRYPTOPP_AES_FLAG" +fi +if test x"$CRYPTOPP_SHA_FLAG" != "x"; then + echo "CRYPTOPP_SHA_FLAG: $CRYPTOPP_SHA_FLAG" +fi +if test x"$CRYPTOPP_SIMON128_FLAG" != "x"; then + echo "CRYPTOPP_SIMON128_FLAG: $CRYPTOPP_SIMON128_FLAG" +fi +if test x"$CRYPTOPP_SPECK128_FLAG" != "x"; then + echo "CRYPTOPP_SPECK128_FLAG: $CRYPTOPP_SPECK128_FLAG" +fi +if test x"$CRYPTOPP_SM4_FLAG" != "x"; then + echo "CRYPTOPP_SM4_FLAG: $CRYPTOPP_SM4_FLAG" +fi +if test x"$CRYPTOPGAMS_ARMV4_FLAG" != "x"; then + echo "CRYPTOPGAMS_ARMV4_FLAG: $CRYPTOPGAMS_ARMV4_FLAG" +fi + +echo "" +echo "Automake flags (can be overridden by user flags):" +echo "AM_CXXFLAGS: $AM_CXXFLAGS" +echo "AM_LDFLAGS: $AM_LDFLAGS" + +echo "" +echo "User flags (overrides Automake flags on conflict):" +echo "CXXFLAGS: $CXXFLAGS" +echo "LDFLAGS: $LDFLAGS" + +OPT_NDEBUG=`echo $CPPFLAGS $CXXFLAGS | $EGREP -c '\-DNDEBUG'` +if test "$OPT_NDEBUG" = "0"; then + echo "" + echo "CPPFLAGS does not include -DNDEBUG. You should consider building" + echo "with NDEBUG defined so an assert does not inadvertently crash your" + echo "program and egress sensitive data to the filesystem or an error" + echo "reporting service like AppPort, Windows Error Reporting, Crash" + echo "Reporter, Test Flight, etc." +fi + +OPT_SYM=`echo $CPPFLAGS $CXXFLAGS | $EGREP -c '\-g'` +if test "$OPT_SYM" = "0"; then + echo "" + echo "CPPFLAGS does not include -g. You should consider building with -g" + echo "to add debug symbols in case you have to analyze a crash." +fi + +OPT_O3=`echo $CXXFLAGS | $EGREP -c '\-O3|\-O4|\-O5|\-xO3|\-xO4|\-xO5|\-Os|\-Ofast'` +if test "$OPT_O3" = "0"; then + echo "" + echo "CXXFLAGS does not include -O3. You should consider building at -O3" + echo "to engage compiler vectorizations and enhance performance." +fi + +echo "***********************************************************************" +echo "" diff --git a/package/lean/libcryptopp/src/cryptopp-config.cmake b/package/lean/libcryptopp/src/cryptopp-config.cmake deleted file mode 100644 index b739501a5f..0000000000 --- a/package/lean/libcryptopp/src/cryptopp-config.cmake +++ /dev/null @@ -1 +0,0 @@ -include("${CMAKE_CURRENT_LIST_DIR}/cryptopp-targets.cmake") diff --git a/package/lean/libcryptopp/src/libcryptopp.pc.in b/package/lean/libcryptopp/src/libcryptopp.pc.in new file mode 100644 index 0000000000..a6c502ee52 --- /dev/null +++ b/package/lean/libcryptopp/src/libcryptopp.pc.in @@ -0,0 +1,31 @@ +## libcryptopp.pc.in - Autotools package configuration file for Crypto++. +## written and placed in public domain by Jeffrey Walton. +## based on Debian package configuration by László Böszörményi. +## + +## libdir=@libdir@ is not working as expected for Fedora, Solaris, +## and other 64-bit OSes that use library directories like /lib64, +## /usr/lib64, /lib/amd64 and friends. Also see: +## * https://stackoverflow.com/q/47124066/608639 +## * https://stackoverflow.com/q/46847939/608639 and +## * https://bugzilla.redhat.com/show_bug.cgi?id=1510073. + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: @PACKAGE_NAME@ +Description: free C++ class library of cryptographic schemes +Authors: originally written by Wei Dai +Maintainers: the Crypto++ community +URL: @PACKAGE_URL@ +Version: @PACKAGE_VERSION@ +Bug-Report: @PACKAGE_BUGREPORT@ +Requires: + +## These flags are mostly broken. We cannot record user choices, +## and then have user programs use the same flags later. +## https://lists.freedesktop.org/archives/pkg-config/2017-November/001087.html +Cflags: -I${includedir} +Libs: -L${libdir} -lcryptopp diff --git a/package/lean/libidn2/Makefile b/package/lean/libidn2/Makefile deleted file mode 100644 index c023b5298d..0000000000 --- a/package/lean/libidn2/Makefile +++ /dev/null @@ -1,93 +0,0 @@ -# -# Copyright (C) 2017-2018 Daniel Engberg -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=libidn2 -PKG_VERSION:=2.0.4 -PKG_RELEASE:=1 -PKG_MAINTAINER:=Kevin Darbyshire-Bryant -PKG_LICENSE:=GPL-2.0-or-later LGPL-3.0-or-later -PKG_LICENSE_FILES:=COPYING COPYINGv2 COPYING.LESSERv3 - -PKG_SOURCE_URL:=@GNU/libidn -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=644b6b03b285fb0ace02d241d59483d98bc462729d8bb3608d5cad5532f3d2f0 - -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/nls.mk - -define Package/idn2/Default - SECTION:=net - CATEGORY:=Network - URL:=http://www.gnu.org/software/libidn/ -endef - -define Package/idn2/Default/description - Libidn2 is a free software implementation of IDNA2008, - Punycode and TR46 in library form. It contains - functionality to convert internationalized domain - names to and from ASCII Compatible Encoding (ACE), - following the IDNA2008 and TR46 standards. -endef - -define Package/idn2 - $(call Package/idn2/Default) - SUBMENU:=IP Addresses and Names - TITLE:=GNU IDN2 (Internationalized Domain Name) tool - DEPENDS:=+libidn2 -endef - -define Package/idn2/description -$(call Package/idn2/Default/description) - - Command line tool using libidn2 - -endef - -define Package/libidn2 - SECTION:=libs - CATEGORY:=Libraries - DEPENDS:=+libunistring $(ICONV_DEPENDS) $(INTL_DEPENDS) - TITLE:=International domain name library (IDNA2008, Punycode and TR46) - URL:=https://www.gnu.org/software/libidn/#libidn2 -endef - -define Package/libidn2/description -$(call Package/idn2/Default/description) - - Library only package - -endef - -CONFIGURE_ARGS += \ - --disable-rpath \ - --disable-doc - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/idn2.h $(1)/usr/include - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{la,so}* $(1)/usr/lib/ - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libidn2.pc $(1)/usr/lib/pkgconfig/ -endef - -define Package/idn2/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/ -endef - -define Package/libidn2/install - $(INSTALL_DIR) $(1)/usr/lib/ - $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,idn2)) -$(eval $(call BuildPackage,libidn2)) diff --git a/package/lean/libtorrent-rasterbar/Makefile b/package/lean/libtorrent-rasterbar/Makefile deleted file mode 100644 index ff9546747a..0000000000 --- a/package/lean/libtorrent-rasterbar/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=libtorrent-rasterbar -PKG_VERSION:=1.2.10 -PKG_RELEASE=1 - -PKG_SOURCE:=$(PKG_NAME)-libtorrent-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/arvidn/libtorrent/tar.gz/libtorrent-$(PKG_VERSION)? -PKG_HASH:=e0fedb583f1e7bdcc0eb80a9df064a1e6fb0b825d8423e64bdb0f7a35879a09e - -PKG_BUILD_DIR:=$(BUILD_DIR)/$(firstword $(subst -, ,$(PKG_NAME)))-libtorrent-$(PKG_VERSION) - -PKG_LICENSE:=BSD -PKG_LICENSE_FILES:=COPYING - -PKG_USE_MIPS16:=0 -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/libtorrent-rasterbar - SECTION:=libs - CATEGORY:=Libraries - TITLE:=Rasterbar BitTorrent library - URL:=https://www.libtorrent.org/ - DEPENDS:=+libstdcpp +libopenssl +boost +boost-system +boost-chrono +boost-random $(ICONV_DEPENDS) - MAINTAINER:=Arvid Norberg -endef - -define Package/libtorrent-rasterbar/description -Rasterbar libtorrent is a C++ library that aims to be a good alternative to -all the other bittorrent implementations around. It is a library and not a -full featured client, although it comes with a working example client. -endef - -TARGET_CFLAGS += $(if $(CONFIG_SOFT_FLOAT),-DBOOST_NO_FENV_H) -fPIC - -EXTRA_CXXFLAGS += $(if $(CONFIG_GCC_VERSION_4_8),-std=gnu++11,-std=gnu++14) - -TARGET_LDFLAGS += -lstdc++ - -CONFIGURE_ARGS += \ - --disable-debug \ - --disable-rpath \ - --enable-encryption \ - --enable-deprecated-functions \ - --with-gnu-ld \ - --with-openssl=$(STAGING_DIR)/usr \ - --with-boost=$(STAGING_DIR)/usr \ - --with-libiconv \ - --with-libiconv-prefix=$(ICONV_PREFIX) - -define Build/Configure - cd $(PKG_BUILD_DIR) ; \ - sh autotool.sh - $(call Build/Configure/Default) -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/libtorrent $(1)/usr/include/ - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtorrent-rasterbar.{a,so*} $(1)/usr/lib/ - $(INSTALL_DIR) $(1)/usr/lib/pkgconfig - $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libtorrent-rasterbar.pc $(1)/usr/lib/pkgconfig/ -endef - -define Package/libtorrent-rasterbar/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtorrent-rasterbar.so.* $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,libtorrent-rasterbar)) diff --git a/package/libs/elfutils/Makefile b/package/libs/elfutils/Makefile index e6868c56f4..f2b25d2c36 100644 --- a/package/libs/elfutils/Makefile +++ b/package/libs/elfutils/Makefile @@ -7,12 +7,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=elfutils -PKG_VERSION:=0.179 +PKG_VERSION:=0.180 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://sourceware.org/$(PKG_NAME)/ftp/$(PKG_VERSION) -PKG_HASH:=25a545566cbacaa37ae6222e58f1c48ea4570f53ba991886e2f5ce96e22a23a2 +PKG_HASH:=b827b6e35c59d188ba97d7cf148fa8dc6f5c68eb6c5981888dfdbb758c0b569d PKG_MAINTAINER:=Luiz Angelo Daros de Luca PKG_LICENSE:=GPL-3.0-or-later diff --git a/package/libs/elfutils/patches/100-musl-compat.patch b/package/libs/elfutils/patches/100-musl-compat.patch index 374e832d3f..508ff9e946 100644 --- a/package/libs/elfutils/patches/100-musl-compat.patch +++ b/package/libs/elfutils/patches/100-musl-compat.patch @@ -24,7 +24,7 @@ https://sourceware.org/bugzilla/show_bug.cgi?id=21002 #include --- a/libdw/libdw_alloc.c +++ b/libdw/libdw_alloc.c -@@ -147,5 +147,5 @@ __attribute ((noreturn)) attribute_hidde +@@ -152,5 +152,5 @@ __attribute ((noreturn)) attribute_hidde __libdw_oom (void) { while (1) diff --git a/package/libs/elfutils/patches/110-no-cdefs.patch b/package/libs/elfutils/patches/110-no-cdefs.patch index a7216c141e..f95625a913 100644 --- a/package/libs/elfutils/patches/110-no-cdefs.patch +++ b/package/libs/elfutils/patches/110-no-cdefs.patch @@ -39,9 +39,9 @@ Signed-off-by: Rosen Penev /* Standard ELF types. */ -@@ -4007,6 +4007,8 @@ enum - #define R_NDS32_TLS_TPOFF 102 - #define R_NDS32_TLS_DESC 119 +@@ -4103,6 +4103,8 @@ enum + #define R_ARC_TLS_LE_S9 0x4a + #define R_ARC_TLS_LE_32 0x4b -__END_DECLS +#ifdef __cplusplus diff --git a/package/libs/libpcap/Makefile b/package/libs/libpcap/Makefile index e3633d1006..35ceb18c29 100644 --- a/package/libs/libpcap/Makefile +++ b/package/libs/libpcap/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=libpcap PKG_VERSION:=1.9.1 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.us.tcpdump.org/release/ \ @@ -18,7 +18,6 @@ PKG_HASH:=635237637c5b619bcceba91900666b64d56ecb7be63f298f601ec786ce087094 PKG_MAINTAINER:=Felix Fietkau -CMAKE_INSTALL:=1 PKG_ASLR_PIE_REGULAR:=1 PKG_BUILD_PARALLEL:=1 @@ -73,8 +72,11 @@ CMAKE_OPTIONS += $(if $(CONFIG_IPV6),-DINET6=ON,-DINET6=OFF) define Build/InstallDev $(call Build/InstallDev/cmake,$(1)) - $(SED) "s,/usr,$(STAGING_DIR)/usr,g" $(1)/usr/lib/pkgconfig/libpcap.pc - $(SED) "s,/usr,$(STAGING_DIR)/usr,g" $(1)/usr/bin/pcap-config + $(SED) \ + 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' \ + $(1)/usr/bin/pcap-config + $(INSTALL_DIR) $(2)/bin + $(LN) ../../usr/bin/pcap-config $(2)/bin/pcap-config endef define Package/libpcap/install diff --git a/package/libs/nettle/Makefile b/package/libs/nettle/Makefile index b9324e4793..b15ea0fa07 100644 --- a/package/libs/nettle/Makefile +++ b/package/libs/nettle/Makefile @@ -8,17 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=nettle -PKG_VERSION:=3.5.1 -PKG_RELEASE:=2 +PKG_VERSION:=3.6 +PKG_RELEASE:=1 PKG_USE_MIPS16:=0 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=@GNU/nettle -PKG_HASH:=75cca1998761b02e16f2db56da52992aef622bf55a3b45ec538bc2eedadc9419 +PKG_HASH:=d24c0d0f2abffbc8f4f34dcf114b0f131ec3774895f3555922fe2f40f3d5e3f1 -PKG_LICENSE:=GPL-2.0+ +PKG_LICENSE:=GPL-2.0-or-later PKG_LICENSE_FILES:=COPYING -PKG_BUILD_PARALLEL:=0 +PKG_BUILD_PARALLEL:=1 PKG_CONFIG_DEPENDS := CONFIG_LIBNETTLE_MINI @@ -30,7 +30,7 @@ define Package/libnettle TITLE:=GNU crypto library URL:=http://www.lysator.liu.se/~nisse/nettle/ DEPENDS+= +!LIBNETTLE_MINI:libgmp - ABI_VERSION:=7 + ABI_VERSION:=8 endef define Package/libnettle/config diff --git a/package/libs/pcre/Makefile b/package/libs/pcre/Makefile index bf3f733a5c..37d939da7f 100644 --- a/package/libs/pcre/Makefile +++ b/package/libs/pcre/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=pcre PKG_VERSION:=8.44 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=@SF/$(PKG_NAME) @@ -87,6 +87,7 @@ MAKE_FLAGS += \ define Build/InstallDev $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/pcre-config $(1)/usr/bin/ + $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/pcre-config $(INSTALL_DIR) $(2)/bin $(LN) $(STAGING_DIR)/usr/bin/pcre-config $(2)/bin diff --git a/package/libs/toolchain/Makefile b/package/libs/toolchain/Makefile index 6853d95997..52a4cda19f 100644 --- a/package/libs/toolchain/Makefile +++ b/package/libs/toolchain/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=toolchain -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=GPL-3.0-with-GCC-exception @@ -458,11 +458,6 @@ LIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a)) LIBGCC_MAP=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map)) LIBGCC_SO=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*)) -define Build/Compile/uClibc - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libuClibc-*.so \ - $(PKG_BUILD_DIR)/ -endef ifneq ($(LIBGCC_SO),) define Build/Compile/libgcc $(CP) $(LIBGCC_SO) $(PKG_BUILD_DIR)/ @@ -535,21 +530,6 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) done endef - define Package/uClibc/install - $(INSTALL_DIR) $(1)/lib - $(CP) \ - $(TOOLCHAIN_DIR)/lib/ld*-uClibc.so.* \ - $(TOOLCHAIN_DIR)/lib/ld*-uClibc-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libc.so.* \ - $(TOOLCHAIN_DIR)/lib/libuClibc-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - $(CP) \ - $(PKG_BUILD_DIR)/libuClibc-* \ - $(1)/lib/ - endef - LD_MUSL_NAME = $(notdir $(firstword $(wildcard $(TOOLCHAIN_DIR)/lib/libc.so*))) define Package/musl/install @@ -578,7 +558,7 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) define Package/libpthread/install $(INSTALL_DIR) $(1)/lib - ifneq ($(CONFIG_USE_MUSL)$(CONFIG_USE_UCLIBC),y) + ifneq ($(CONFIG_USE_MUSL),y) $(CP) \ $(TOOLCHAIN_DIR)/lib/libpthread.so.* \ $(TOOLCHAIN_DIR)/lib/libpthread-$(LIBC_SO_VERSION).so \ @@ -590,11 +570,6 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) $(INSTALL_DIR) $(1)/lib $(CP) \ $(TOOLCHAIN_DIR)/lib/libthread_db.so.* $(1)/lib - ifeq ($(CONFIG_USE_UCLIBC),y) - $(CP) \ - $(TOOLCHAIN_DIR)/lib/libthread_db-$(LIBC_SO_VERSION).so \ - $(1)/lib/ - endif endef define Package/libpthread/install_lib @@ -603,7 +578,7 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) define Package/librt/install $(INSTALL_DIR) $(1)/lib - ifneq ($(CONFIG_USE_MUSL)$(CONFIG_USE_UCLIBC),y) + ifneq ($(CONFIG_USE_MUSL),y) $(CP) \ $(TOOLCHAIN_DIR)/lib/librt.so.* \ $(TOOLCHAIN_DIR)/lib/librt-$(LIBC_SO_VERSION).so \ diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index f4ed841f78..4835507c5b 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -394,7 +394,6 @@ endef define Package/eapol-test TITLE:=802.1x authentication test utility SECTION:=net - SUBMENU:=WirelessAPD CATEGORY:=Network SUBMENU:=WirelessAPD VARIANT:=supplicant-full-internal diff --git a/package/network/utils/tcpdump/Makefile b/package/network/utils/tcpdump/Makefile index 3e4d9d2d73..f333cf98d2 100644 --- a/package/network/utils/tcpdump/Makefile +++ b/package/network/utils/tcpdump/Makefile @@ -9,20 +9,19 @@ include $(TOPDIR)/rules.mk PKG_NAME:=tcpdump PKG_VERSION:=4.9.3 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.us.tcpdump.org/release/ \ http://www.tcpdump.org/release/ PKG_HASH:=2cd47cb3d460b6ff75f4a9940f594317ad456cfbf2bd2c8e5151e16559db6410 -PKG_BUILD_PARALLEL:=1 - PKG_MAINTAINER:=Felix Fietkau PKG_LICENSE:=BSD-3-Clause PKG_CPE_ID:=cpe:/a:tcpdump:tcpdump PKG_INSTALL:=1 +PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk @@ -47,36 +46,18 @@ endef CONFIGURE_ARGS += \ --without-cap-ng \ - --without-crypto - -ifeq ($(CONFIG_IPV6),y) -CONFIGURE_ARGS += \ - --enable-ipv6 -endif + --without-crypto \ + $(call autoconf_bool,CONFIG_IPV6,ipv6) TARGET_CFLAGS += -ffunction-sections -fdata-sections TARGET_LDFLAGS += -Wl,--gc-sections -CONFIGURE_VARS += \ - BUILD_CC="$(TARGET_CC)" \ - HOSTCC="$(HOSTCC)" \ - td_cv_buggygetaddrinfo="no" \ - ac_cv_linux_vers=$(LINUX_VERSION) \ - ac_cv_header_rpc_rpcent_h=no \ - ac_cv_lib_rpc_main=no \ - ac_cv_path_PCAP_CONFIG="" - -MAKE_FLAGS := - ifeq ($(BUILD_VARIANT),mini) TARGET_CFLAGS += -DTCPDUMP_MINI CONFIGURE_ARGS += --disable-smb MAKE_FLAGS += TCPDUMP_MINI=1 endif -MAKE_FLAGS += \ - CCOPT="$(TARGET_CFLAGS)" INCLS="-I. $(TARGET_CPPFLAGS)" - define Package/tcpdump/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/tcpdump $(1)/usr/sbin/ diff --git a/package/network/utils/tcpdump/patches/002-remove_static_libpcap_check.patch b/package/network/utils/tcpdump/patches/002-remove_static_libpcap_check.patch deleted file mode 100644 index fdebfcc6d8..0000000000 --- a/package/network/utils/tcpdump/patches/002-remove_static_libpcap_check.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- a/configure -+++ b/configure -@@ -5395,37 +5395,6 @@ $as_echo "Using $pfopen" >&6; } - LIBS="$LIBS $pfopen" - fi - fi -- libpcap=FAIL -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local pcap library" >&5 --$as_echo_n "checking for local pcap library... " >&6; } -- --# Check whether --with-system-libpcap was given. --if test "${with_system_libpcap+set}" = set; then : -- withval=$with_system_libpcap; --fi -- -- if test "x$with_system_libpcap" != xyes ; then -- lastdir=FAIL -- places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \ -- egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT)?$'` -- places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \ -- egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT)?$'` -- for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do -- basedir=`echo $dir | sed -e 's/[ab][0-9]*$//' | \ -- sed -e 's/-PRE-GIT$//' ` -- if test $lastdir = $basedir ; then -- continue; -- fi -- lastdir=$dir -- if test -r $dir/libpcap.a ; then -- libpcap=$dir/libpcap.a -- d=$dir -- fi -- done -- fi -- if test $libpcap = FAIL ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 --$as_echo "not found" >&6; } - - # - # Look for pcap-config. -@@ -5581,51 +5550,6 @@ if test "x$ac_cv_lib_pcap_main" = xyes; - libpcap="-lpcap" - fi - -- if test $libpcap = FAIL ; then -- as_fn_error $? "see the INSTALL doc for more info" "$LINENO" 5 -- fi -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5 --$as_echo_n "checking for extraneous pcap header directories... " >&6; } -- if test \( ! -r /usr/local/include/pcap.h \) -a \ -- \( ! -r /usr/include/pcap.h \); then -- if test -r /usr/local/include/pcap/pcap.h; then -- d="/usr/local/include/pcap" -- elif test -r /usr/include/pcap/pcap.h; then -- d="/usr/include/pcap" -- fi -- fi -- if test -z "$d" ; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 --$as_echo "not found" >&6; } -- else -- V_INCLS="-I$d $V_INCLS" -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5 --$as_echo "found -- -I$d added" >&6; } -- fi -- fi -- else -- V_PCAPDEP=$libpcap -- places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \ -- egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` -- places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \ -- egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` -- pcapH=FAIL -- if test -r $d/pcap.h; then -- pcapH=$d -- else -- for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do -- if test -r $dir/pcap.h ; then -- pcapH=$dir -- fi -- done -- fi -- -- if test $pcapH = FAIL ; then -- as_fn_error $? "cannot find pcap.h: see INSTALL" "$LINENO" 5 -- fi -- V_INCLS="-I$pcapH $V_INCLS" -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libpcap" >&5 --$as_echo "$libpcap" >&6; } - # Extract the first word of "pcap-config", so it can be a program name with args. - set dummy pcap-config; ac_word=$2 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 diff --git a/package/zxlhhyccc/libpciaccess/Makefile b/package/zxlhhyccc/libpciaccess/Makefile deleted file mode 100644 index df351e90e6..0000000000 --- a/package/zxlhhyccc/libpciaccess/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (C) 2019 Lucian Cristian -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. - -include $(TOPDIR)/rules.mk - -PKG_NAME:=libpciaccess -PKG_VERSION:=0.14 -PKG_RELEASE:=1 - -PKG_SOURCE_URL:=https://www.x.org/releases/individual/lib/ -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_HASH:=3df543e12afd41fea8eac817e48cbfde5aed8817b81670a4e9e493bb2f5bf2a4 - -PKG_BUILD_PARALLEL:=1 -PKG_INSTALL:=1 - -PKG_MAINTAINER:= Lucian Cristian - -include $(INCLUDE_DIR)/package.mk - -define Package/libpciaccess - SECTION:=libs - CATEGORY:=Libraries - TITLE:=Generic PCI access library - URL:=https://xorg.freedesktop.org/ -endef - -TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed - -CONFIGURE_ARGS += \ - --prefix=/usr - -define Build/InstallDev - $(INSTALL_DIR) \ - $(1)/usr/include \ - $(1)/usr/lib - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/include/* \ - $(1)/usr/include/ - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/{pkgconfig,*.so*} \ - $(1)/usr/lib/ -endef - -define Package/libpciaccess/install - $(INSTALL_DIR) \ - $(1)/usr/lib - - $(CP) \ - $(PKG_INSTALL_DIR)/usr/lib/*.so* \ - $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,libpciaccess)) diff --git a/package/zxlhhyccc/libpciaccess/patches/0004-Don-t-include-sys-io.h-on-arm.patch b/package/zxlhhyccc/libpciaccess/patches/0004-Don-t-include-sys-io.h-on-arm.patch deleted file mode 100644 index f532858244..0000000000 --- a/package/zxlhhyccc/libpciaccess/patches/0004-Don-t-include-sys-io.h-on-arm.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b6df5202306bd71158b482f25ca2e6919645d4dd Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 4 Jun 2015 20:55:06 -0700 -Subject: [PATCH 4/4] Don't include sys/io.h on arm - -Signed-off-by: Khem Raj ---- -Upstream-Status: Pending - - src/linux_sysfs.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/linux_sysfs.c b/src/linux_sysfs.c -index 3f95e53..1e3aad3 100644 ---- a/src/linux_sysfs.c -+++ b/src/linux_sysfs.c -@@ -50,7 +50,7 @@ - #include - #include - --#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) -+#if defined(__i386__) || defined(__x86_64__) - #include - #else - #define inb(x) -1 --- -2.1.4 - diff --git a/package/zxlhhyccc/librouteros/Makefile b/package/zxlhhyccc/librouteros/Makefile deleted file mode 100644 index 2908de0774..0000000000 --- a/package/zxlhhyccc/librouteros/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=librouteros -PKG_SOURCE_DATE:=2018-07-19 -PKG_SOURCE_VERSION:=c485c777ffbbbd87c3d72d843af36ba016803cae -PKG_RELEASE:=1 - -PKG_MAINTAINER:=Sven Roederer -PKG_LICENSE:=ISC -PKG_LICENSE_FILES:=COPYING - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz -PKG_SOURCE_URL:=https://codeload.github.com/octo/librouteros/tar.gz/$(PKG_SOURCE_VERSION)? -PKG_HASH:=427e071fe270ff6c08e32a10e5beff2add4205e6c864b142f950efdb8d2245a4 -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION) - -PKG_FIXUP:=autoreconf -PKG_INSTALL:=1 -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/librouteros - TITLE:=A library that talks to MikroTik devices. - URL:=https://octo.github.io/librouteros/ - SECTION:=libs - CATEGORY:=Libraries -endef - -define Package/librouteros/description - librouteros is a library to communicate with RouterOS, the operating system of MikroTik's RouterBoards. - It uses the API port provided by those systems to connect and talk to the devices. librouteros is a - low-level library in that it abstracts the network protocol used but has next to no knowledge about the - commands and responses available -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(CP) $(PKG_INSTALL_DIR)/usr/include/routeros_*.h $(1)/usr/include/ - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/librouteros.{a,la,so*} $(1)/usr/lib/ -endef - -define Package/librouteros/install - $(INSTALL_DIR) $(1)/usr/lib - $(CP) $(PKG_INSTALL_DIR)/usr/lib/librouteros.so.* $(1)/usr/lib/ -endef - -$(eval $(call BuildPackage,librouteros)) diff --git a/scripts/functions.sh b/scripts/functions.sh index 9a7fcde627..ec0618c272 100644 --- a/scripts/functions.sh +++ b/scripts/functions.sh @@ -5,6 +5,19 @@ get_magic_word() { dd if=$1 bs=4 count=1 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' ' } +get_post_padding_word() { + local rootfs_length="$(stat -c%s "$1")" + [ "$rootfs_length" -ge 4 ] || return + rootfs_length=$((rootfs_length-4)) + + # the JFFS2 end marker must be on a 4K boundary (often 64K or 256K) + local unaligned_bytes=$((rootfs_length%4096)) + [ "$unaligned_bytes" = 0 ] || return + + # skip rootfs data except the potential EOF marker + dd if="$1" bs=1 skip="$rootfs_length" 2>/dev/null | od -A n -N 4 -t x1 | tr -d ' ' +} + get_fs_type() { local magic_word="$(get_magic_word "$1")" @@ -13,7 +26,16 @@ get_fs_type() { echo "ubifs" ;; "68737173") - echo "squashfs" + local post_padding_word="$(get_post_padding_word "$1")" + + case "$post_padding_word" in + "deadc0de") + echo "squashfs-jffs2" + ;; + *) + echo "squashfs" + ;; + esac ;; *) echo "unknown" diff --git a/scripts/mkhash.c b/scripts/mkhash.c index 3292433213..ed3d42d4c3 100644 --- a/scripts/mkhash.c +++ b/scripts/mkhash.c @@ -747,6 +747,7 @@ static int usage(const char *progname) fprintf(stderr, "Usage: %s [options] [...]\n" "Options:\n" " -n Print filename(s)\n" + " -N Suppress trailing newline\n" "\n" "Supported hash types:", progname); @@ -771,7 +772,8 @@ static struct hash_type *get_hash_type(const char *name) } -static int hash_file(struct hash_type *t, const char *filename, bool add_filename) +static int hash_file(struct hash_type *t, const char *filename, bool add_filename, + bool no_newline) { const char *str; @@ -801,9 +803,10 @@ static int hash_file(struct hash_type *t, const char *filename, bool add_filenam } if (add_filename) - printf("%s %s\n", str, filename ? filename : "-"); + printf("%s %s%s", str, filename ? filename : "-", + no_newline ? "" : "\n"); else - printf("%s\n", str); + printf("%s%s", str, no_newline ? "" : "\n"); return 0; } @@ -813,13 +816,16 @@ int main(int argc, char **argv) struct hash_type *t; const char *progname = argv[0]; int i, ch; - bool add_filename = false; + bool add_filename = false, no_newline = false; - while ((ch = getopt(argc, argv, "n")) != -1) { + while ((ch = getopt(argc, argv, "nN")) != -1) { switch (ch) { case 'n': add_filename = true; break; + case 'N': + no_newline = true; + break; default: return usage(progname); } @@ -836,10 +842,10 @@ int main(int argc, char **argv) return usage(progname); if (argc < 2) - return hash_file(t, NULL, add_filename); + return hash_file(t, NULL, add_filename, no_newline); for (i = 0; i < argc - 1; i++) { - int ret = hash_file(t, argv[1 + i], add_filename); + int ret = hash_file(t, argv[1 + i], add_filename, no_newline); if (ret) return ret; } diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network index 1d93ab84e1..2e9e148f10 100755 --- a/target/linux/ipq40xx/base-files/etc/board.d/02_network +++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network @@ -31,6 +31,8 @@ ipq40xx_setup_interfaces() asus,rt-acrh17|\ asus,rt-ac58u|\ avm,fritzbox-4040|\ + century,wr142ac|\ + century,wr142ac-nand|\ ezviz,cs-w3-wd1200g-eup|\ linksys,ea6350v3|\ linksys,ea8300|\ @@ -95,8 +97,6 @@ ipq40xx_setup_interfaces() ucidef_add_switch "switch0" \ "0t@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:lan" ;; - century,wr142ac|\ - century,wr142ac-nand|\ p2w,r619ac|\ zyxel,nbg6617) ucidef_add_switch "switch0" \ diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-r619ac.dts b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-r619ac.dts index c6f0d8e35f..982cc34a0c 100644 --- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-r619ac.dts +++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-r619ac.dts @@ -220,7 +220,9 @@ &pcie0 { status = "okay"; - perst-gpio = <&tlmm 4 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&pcie_pins>; + pinctrl-names = "default"; + perst-gpio = <&tlmm 4 GPIO_ACTIVE_LOW>; wake-gpio = <&tlmm 40 GPIO_ACTIVE_HIGH>; /* Free slot for use */ @@ -244,6 +246,15 @@ }; &tlmm { + pcie_pins: pcie_pinmux { + mux { + pins = "gpio2"; + function = "gpio"; + bias-pull-down; + output-low; + }; + }; + mdio_pins: mdio_pinmux { mux_1 { pins = "gpio6"; diff --git a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wr142ac.dtsi b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wr142ac.dtsi index 55ffda8663..ab3c67c2fe 100644 --- a/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wr142ac.dtsi +++ b/target/linux/ipq40xx/files/arch/arm/boot/dts/qcom-ipq4019-wr142ac.dtsi @@ -109,7 +109,7 @@ led_power: power { label = "green:power"; - gpios = <&tlmm 40 GPIO_ACTIVE_HIGH>; + gpios = <&tlmm 40 GPIO_ACTIVE_LOW>; }; usb { diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk index 0b4576818e..7d07ffe769 100644 --- a/target/linux/ramips/image/mt7621.mk +++ b/target/linux/ramips/image/mt7621.mk @@ -1190,12 +1190,13 @@ define Device/xiaomi-ac2100 KERNEL_SIZE := 4096k IMAGE_SIZE := 120320k UBINIZE_OPTS := -E 5 - IMAGES += kernel1.bin rootfs0.bin factory.bin + IMAGES += kernel1.bin rootfs0.bin factory.bin breed-factory.bin IMAGE/kernel1.bin := append-kernel IMAGE/rootfs0.bin := append-ubi | check-size IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata - IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \ - check-size + IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | check-size + IMAGE/breed-factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | \ + append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | check-size DEVICE_VENDOR := Xiaomi DEVICE_PACKAGES := kmod-mt7603e kmod-mt7615d luci-app-mtwifi \ uboot-envtools -wpad-openssl diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network index ea33cd68c7..4d9c9951a6 100755 --- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network @@ -14,7 +14,6 @@ ramips_setup_interfaces() ucidef_set_interfaces_lan_wan "lan" "wan" ;; asiarf,ap7621-nv1|\ - glinet,gl-mt1300|\ lenovo,newifi-d1|\ mikrotik,routerboard-m33g|\ xiaomi,mir3g|\ @@ -51,6 +50,9 @@ ramips_setup_interfaces() "0:lan" "1:lan" "2:lan" "4:wan" "6@eth0" ucidef_set_interface_lan "eth0.1 ra0 rai0" ;; + glinet,gl-mt1300) + ucidef_set_interfaces_lan_wan "lan1 lan2 ra0 rax0" "wan" + ;; gnubee,gb-pc1|\ gnubee,gb-pc2) ucidef_set_interface_lan "lan1 lan2" diff --git a/toolchain/Config.in b/toolchain/Config.in index cb557d4ad3..6dda9af92d 100644 --- a/toolchain/Config.in +++ b/toolchain/Config.in @@ -110,11 +110,6 @@ menuconfig EXTERNAL_TOOLCHAIN bool "glibc" select USE_GLIBC - config EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC - bool "uClibc" - select USE_UCLIBC - depends on !(aarch64 || aarch64_be) - config EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL bool "musl" select USE_MUSL @@ -125,7 +120,6 @@ menuconfig EXTERNAL_TOOLCHAIN string depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN default "glibc" if EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC - default "uclibc" if EXTERNAL_TOOLCHAIN_LIBC_USE_UCLIBC default "musl" if EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL config TOOLCHAIN_BIN_PATH @@ -237,7 +231,7 @@ comment "C Library" choice prompt "C Library implementation" if TOOLCHAINOPTS - default LIBC_USE_UCLIBC if arc + default LIBC_USE_GLIBC if arc default LIBC_USE_MUSL help Select the C library implementation. @@ -245,12 +239,6 @@ choice config LIBC_USE_GLIBC bool "Use glibc" select USE_GLIBC - depends on !arc - - config LIBC_USE_UCLIBC - select USE_UCLIBC - bool "Use uClibc" - depends on BROKEN || arc config LIBC_USE_MUSL select USE_MUSL @@ -259,7 +247,6 @@ choice endchoice -source "toolchain/uClibc/Config.in" source "toolchain/musl/Config.in" comment "Debuggers" @@ -273,9 +260,6 @@ config GDB Enable if you want to build the gdb. config USE_GLIBC - bool - -config USE_UCLIBC default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN && (arc) bool @@ -297,15 +281,12 @@ source "toolchain/gcc/Config.version" config LIBC string default "glibc" if USE_GLIBC - default "uClibc" if USE_UCLIBC default "musl" if USE_MUSL config TARGET_SUFFIX string default "gnueabi" if USE_GLIBC && (arm || armeb) default "gnu" if USE_GLIBC && !(arm || armeb) - default "uclibcgnueabi" if USE_UCLIBC && (arm || armeb) - default "uclibc" if USE_UCLIBC && !(arm || armeb) default "muslgnueabi" if USE_MUSL && (arm || armeb) default "musl" if USE_MUSL && !(arm || armeb) diff --git a/toolchain/Makefile b/toolchain/Makefile index 23a5529eed..5dccf8f829 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -30,9 +30,6 @@ curdir:=toolchain # subdirectories to descend into $(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),wrapper,kernel-headers binutils gcc/initial gcc/final $(LIBC) fortify-headers) $(if $(CONFIG_NASM),nasm) -ifdef CONFIG_USE_UCLIBC - $(curdir)/builddirs += $(LIBC)/utils -endif # builddir dependencies ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) diff --git a/toolchain/uClibc/Config.in b/toolchain/uClibc/Config.in deleted file mode 100644 index 3bcb0037e9..0000000000 --- a/toolchain/uClibc/Config.in +++ /dev/null @@ -1,6 +0,0 @@ -# Debug version. - -config UCLIBC_ENABLE_DEBUG - bool "Build with debug information" - depends on TOOLCHAINOPTS && USE_UCLIBC && !EXTERNAL_TOOLCHAIN - default n diff --git a/toolchain/uClibc/Makefile b/toolchain/uClibc/Makefile deleted file mode 100644 index 4764f2fa1d..0000000000 --- a/toolchain/uClibc/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -PATH_PREFIX=. - -include ./common.mk - -HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built -HOST_STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.uclibc_installed - -HOST_BUILD_PARALLEL:=1 - -define Host/SetToolchainInfo - $(SED) 's,^\(LIBC_TYPE\)=.*,\1=$(PKG_NAME),' $(TOOLCHAIN_DIR)/info.mk - $(SED) 's,^\(LIBC_URL\)=.*,\1=http://www.uclibc.org/,' $(TOOLCHAIN_DIR)/info.mk - $(SED) 's,^\(LIBC_VERSION\)=.*,\1=$(PKG_VERSION),' $(TOOLCHAIN_DIR)/info.mk - $(SED) 's,^\(LIBC_SO_VERSION\)=.*,\1=$(LIBC_SO_VERSION),' $(TOOLCHAIN_DIR)/info.mk -endef - -define Host/Compile - $(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(HOST_BUILD_DIR)/Rules.mak - $(UCLIBC_MAKE) PREFIX= all -endef - -define Host/Install - $(call Host/SetToolchainInfo) - $(UCLIBC_MAKE) PREFIX="$(TOOLCHAIN_DIR)/" install_runtime install_dev - $(CP) $(HOST_BUILD_DIR)/libc/libc_so.a $(TOOLCHAIN_DIR)/lib/ - ( cd $(TOOLCHAIN_DIR) ; \ - for d in lib usr/lib ; do \ - for f in libc.so libgcc_s.so ; do \ - if [ -f $$$$d/$$$$f -a ! -L $$$$d/$$$$f ] ; then \ - $(SED) 's,/usr/lib/,,g;s,/lib/,,g' $$$$d/$$$$f ; \ - fi \ - done \ - done \ - ) -endef - -$(eval $(call HostBuild)) diff --git a/toolchain/uClibc/common.mk b/toolchain/uClibc/common.mk deleted file mode 100644 index bb093b1dc7..0000000000 --- a/toolchain/uClibc/common.mk +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (C) 2006-2020 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/target.mk - -PKG_VERSION:=1.0.34 -PKG_RELEASE:=1 - -PKG_NAME:=uClibc-ng -PKG_SOURCE_URL = http://downloads.uclibc-ng.org/releases/$(PKG_VERSION)/ -PATCH_DIR:=$(PATH_PREFIX)/patches -CONFIG_DIR:=$(PATH_PREFIX)/config -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -LIBC_SO_VERSION:=$(PKG_VERSION) - -PKG_HASH:=e6776229eee8d3f5a1cd29fb4286630e3cb9e97dded4e8f4a3a9bb4fa8c0d5e3 - -HOST_BUILD_DIR:=$(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/toolchain-build.mk - -UCLIBC_TARGET_ARCH:=$(shell echo $(ARCH) | sed -e s'/-.*//' \ - -e 's/arc.*/arc/' \ - -e 's/i.86/i386/' \ - -e 's/sparc.*/sparc/' \ - -e 's/arm.*/arm/g' \ - -e 's/m68k.*/m68k/' \ - -e 's/ppc/powerpc/g' \ - -e 's/v850.*/v850/g' \ - -e 's/sh64/sh/' \ - -e 's/sh[234].*/sh/' \ - -e 's/mips.*/mips/' \ - -e 's/mipsel.*/mips/' \ -) - -GEN_CONFIG=$(SCRIPT_DIR)/kconfig.pl -n \ - $(if $(wildcard $(CONFIG_DIR)/common),'+' $(CONFIG_DIR)/common) \ - $(if $(CONFIG_UCLIBC_ENABLE_DEBUG),$(if $(wildcard $(CONFIG_DIR)/debug),'+' $(CONFIG_DIR)/debug)) \ - $(CONFIG_DIR)/$(ARCH)$(strip \ - $(if $(wildcard $(CONFIG_DIR)/$(ARCH).$(BOARD)),.$(BOARD), \ - $(if $(filter archs,$(subst ",,$(CONFIG_CPU_TYPE))),hs, \ - $(if $(CONFIG_MIPS64_ABI),.$(subst ",,$(CONFIG_MIPS64_ABI)), \ - $(if $(CONFIG_HAS_SPE_FPU),$(if $(wildcard $(CONFIG_DIR)/$(ARCH).e500),.e500)))))) - -CPU_CFLAGS = \ - -funsigned-char -fno-builtin -fno-asm \ - --std=gnu99 -ffunction-sections -fdata-sections \ - -Wno-unused-but-set-variable \ - $(TARGET_CFLAGS) -ggdb - -UCLIBC_MAKE = PATH='$(TOOLCHAIN_DIR)/initial/bin:$(TARGET_PATH)' $(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \ - $(TARGET_CONFIGURE_OPTS) \ - DEVEL_PREFIX=/ \ - RUNTIME_PREFIX=/ \ - HOSTCC="$(HOSTCC)" \ - CPU_CFLAGS="$(CPU_CFLAGS)" \ - ARCH="$(CONFIG_ARCH)" \ - LIBGCC="$(subst libgcc.a,libgcc_initial.a,$(shell $(TARGET_CC) -print-libgcc-file-name))" \ - DOSTRIP="" - -define Host/Prepare - $(call Host/Prepare/Default) - $(if $(strip $(QUILT)), \ - cd $(HOST_BUILD_DIR); \ - if $(QUILT_CMD) next >/dev/null 2>&1; then \ - $(QUILT_CMD) push -a; \ - fi - ) - ln -snf $(PKG_NAME)-$(PKG_VERSION) $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) -endef - -define Host/Configure - $(GEN_CONFIG) > $(HOST_BUILD_DIR)/.config.new - $(SED) 's,^KERNEL_HEADERS=.*,KERNEL_HEADERS=\"$(BUILD_DIR_TOOLCHAIN)/linux-dev/include\",g' \ - -e 's,^.*UCLIBC_HAS_FPU.*,UCLIBC_HAS_FPU=$(if $(CONFIG_SOFT_FLOAT),n,y),g' \ - -e 's,^.*UCLIBC_HAS_SOFT_FLOAT.*,UCLIBC_HAS_SOFT_FLOAT=$(if $(CONFIG_SOFT_FLOAT),y,n),g' \ - -e 's,^.*UCLIBC_HAS_LOCALE.*,UCLIBC_HAS_LOCALE=$(if $(CONFIG_BUILD_NLS),y,n),g' \ - -e 's,^.*UCLIBC_BUILD_ALL_LOCALE.*,UCLIBC_BUILD_ALL_LOCALE=$(if $(CONFIG_BUILD_NLS),y,n),g' \ - -e 's,^.*UCLIBC_HAS_SSP[^_].*,UCLIBC_HAS_SSP=$(if $(or $(CONFIG_PKG_CC_STACKPROTECTOR_REGULAR),$(CONFIG_PKG_CC_STACKPROTECTOR_STRONG)),y,n),g' \ - $(HOST_BUILD_DIR)/.config.new - cmp -s $(HOST_BUILD_DIR)/.config.new $(HOST_BUILD_DIR)/.config.last || { \ - cp $(HOST_BUILD_DIR)/.config.new $(HOST_BUILD_DIR)/.config && \ - $(MAKE) -C $(HOST_BUILD_DIR) olddefconfig KBUILD_HAVE_NLS= HOSTCFLAGS="-DKBUILD_NO_NLS" && \ - $(MAKE) -C $(HOST_BUILD_DIR)/extra/config conf KBUILD_HAVE_NLS= HOSTCFLAGS="-DKBUILD_NO_NLS" && \ - cp $(HOST_BUILD_DIR)/.config.new $(HOST_BUILD_DIR)/.config.last; \ - } -endef - -define Host/Clean - rm -rf \ - $(HOST_BUILD_DIR) \ - $(BUILD_DIR_TOOLCHAIN)/$(PKG_NAME) \ - $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev -endef diff --git a/toolchain/uClibc/config/arc b/toolchain/uClibc/config/arc deleted file mode 100644 index f92328b7ed..0000000000 --- a/toolchain/uClibc/config/arc +++ /dev/null @@ -1,8 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -TARGET_ARCH="arc" -TARGET_arc=y -CONFIG_ARC_PAGE_SIZE_8K=y -# CONFIG_ARC_PAGE_SIZE_16K is not set -# CONFIG_ARC_PAGE_SIZE_4K is not set diff --git a/toolchain/uClibc/config/archs b/toolchain/uClibc/config/archs deleted file mode 100644 index f92328b7ed..0000000000 --- a/toolchain/uClibc/config/archs +++ /dev/null @@ -1,8 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -TARGET_ARCH="arc" -TARGET_arc=y -CONFIG_ARC_PAGE_SIZE_8K=y -# CONFIG_ARC_PAGE_SIZE_16K is not set -# CONFIG_ARC_PAGE_SIZE_4K is not set diff --git a/toolchain/uClibc/config/arm b/toolchain/uClibc/config/arm deleted file mode 100644 index 9544f144d1..0000000000 --- a/toolchain/uClibc/config/arm +++ /dev/null @@ -1,7 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -TARGET_ARCH="arm" -TARGET_arm=y -CONFIG_ARM_EABI=y - diff --git a/toolchain/uClibc/config/armeb b/toolchain/uClibc/config/armeb deleted file mode 100644 index e329c7e369..0000000000 --- a/toolchain/uClibc/config/armeb +++ /dev/null @@ -1,7 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_WANTS_BIG_ENDIAN=y -TARGET_ARCH="arm" -TARGET_arm=y -CONFIG_ARM_EABI=y - diff --git a/toolchain/uClibc/config/common b/toolchain/uClibc/config/common deleted file mode 100644 index d88d5bf473..0000000000 --- a/toolchain/uClibc/config/common +++ /dev/null @@ -1,199 +0,0 @@ -# ARCH_ANY_ENDIAN is not set -ARCH_HAS_MMU=y -# ARCH_HAS_NO_LDSO is not set -# ARCH_HAS_NO_SHARED is not set -# ARCH_LITTLE_ENDIAN is not set -ARCH_USE_MMU=y -# ARCH_WANTS_BIG_ENDIAN is not set -# ARCH_WANTS_LITTLE_ENDIAN is not set -ASSUME_DEVPTS=y -CROSS_COMPILER_PREFIX="" -DEVEL_PREFIX="/usr/" -# DOASSERTS is not set -# DODEBUG is not set -# DODEBUG_PT is not set -DOPIC=y -DOSTRIP=y -DO_C99_MATH=y -# DO_XSI_MATH is not set -# EXTRA_WARNINGS is not set -FORCE_OPTIONS_FOR_ARCH=y -# FORCE_SHAREABLE_TEXT_SEGMENTS is not set -# HARDWIRED_ABSPATH is not set -# HAS_NO_THREADS is not set -HAVE_DOT_CONFIG=y -# HAVE_NO_PIC is not set -# HAVE_NO_SSP is not set -HAVE_SHARED=y -KERNEL_HEADERS="." -LDSO_BASE_FILENAME="ld.so" -LDSO_CACHE_SUPPORT=y -# LDSO_GNU_HASH_SUPPORT is not set -LDSO_LD_LIBRARY_PATH=y -LDSO_LDD_SUPPORT=y -# LDSO_PRELINK_SUPPORT is not set -# LDSO_PRELOAD_FILE_SUPPORT is not set -LDSO_PRELOAD_ENV_SUPPORT=y -LDSO_RUNPATH=y -LDSO_SAFE_RUNPATH=y -# LDSO_RUNPATH_OF_EXECUTABLE is not set -# LDSO_SEARCH_INTERP_PATH is not set -# LDSO_STANDALONE_SUPPORT is not set -# UCLIBC_HAS_BACKTRACE is not set -UCLIBC_HAS_THREADS_NATIVE=y -# MALLOC is not set -# MALLOC_SIMPLE is not set -MALLOC_STANDARD=y -MULTILIB_DIR="lib" -PTHREADS_DEBUG_SUPPORT=y -RUNTIME_PREFIX="/" -# SUPPORT_LD_DEBUG is not set -# SUPPORT_LD_DEBUG_EARLY is not set -TARGET_SUBARCH="" -# TARGET_alpha is not set -# TARGET_arc is not set -# TARGET_arm is not set -# TARGET_avr32 is not set -# TARGET_bfin is not set -# TARGET_c6x is not set -# TARGET_cris is not set -# TARGET_frv is not set -# TARGET_h8300 is not set -# TARGET_hppa is not set -# TARGET_i386 is not set -# TARGET_ia64 is not set -# TARGET_lm32 is not set -# TARGET_m68k is not set -# TARGET_metag is not set -# TARGET_microblaze is not set -# TARGET_mips is not set -# TARGET_nios is not set -# TARGET_nios2 is not set -# TARGET_or1k is not set -# TARGET_powerpc is not set -# TARGET_sh is not set -# TARGET_sparc is not set -# TARGET_x86_64 is not set -# TARGET_xtensa is not set -UCLIBC_BSD_SPECIFIC=y -UCLIBC_BUILD_NOEXECSTACK=y -# UCLIBC_BUILD_NOW is not set -# UCLIBC_BUILD_PIE is not set -UCLIBC_BUILD_RELRO=y -UCLIBC_CTOR_DTOR=y -UCLIBC_DYNAMIC_ATEXIT=y -UCLIBC_EXTRA_CFLAGS="" -UCLIBC_GRP_BUFFER_SIZE=256 -UCLIBC_HAS_ADVANCED_REALTIME=y -# UCLIBC_HAS_ARGP is not set -UCLIBC_HAS_BSD_ERR=y -# UCLIBC_HAS_BSD_RES_CLOSE is not set -# UCLIBC_HAS_COMPAT_RES_STATE is not set -UCLIBC_HAS_CRYPT=y -UCLIBC_HAS_CRYPT_IMPL=y -UCLIBC_HAS_CTYPE_CHECKED=y -# UCLIBC_HAS_CTYPE_ENFORCED is not set -UCLIBC_HAS_CTYPE_SIGNED=y -UCLIBC_HAS_CTYPE_TABLES=y -# UCLIBC_HAS_CTYPE_UNSAFE is not set -UCLIBC_HAS_EPOLL=y -UCLIBC_HAS_ERRNO_MESSAGES=y -# UCLIBC_HAS_EXTRA_COMPAT_RES_STATE is not set -# UCLIBC_HAS_FENV is not set -UCLIBC_HAS_FLOATS=y -UCLIBC_HAS_FNMATCH=y -# UCLIBC_HAS_FOPEN_CLOSEEXEC_MODE is not set -UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE=y -# UCLIBC_HAS_FOPEN_LARGEFILE_MODE is not set -# UCLIBC_HAS_FPU is not set -UCLIBC_HAS_FTS=y -# UCLIBC_HAS_FTW is not set -UCLIBC_HAS_GETPT=y -UCLIBC_HAS_GLIBC_CUSTOM_PRINTF=y -UCLIBC_HAS_GLIBC_CUSTOM_STREAMS=y -# UCLIBC_HAS_GLIBC_DIGIT_GROUPING is not set -UCLIBC_HAS_GLOB=y -UCLIBC_HAS_GNU_ERROR=y -UCLIBC_HAS_GNU_GETOPT=y -UCLIBC_HAS_GNU_GETSUBOPT=y -UCLIBC_HAS_GNU_GLOB=y -UCLIBC_HAS_HEXADECIMAL_FLOATS=y -UCLIBC_HAS_IPV4=y -UCLIBC_HAS_IPV6=y -UCLIBC_HAS_LFS=y -UCLIBC_HAS_LIBUTIL=y -# UCLIBC_HAS_LOCALE is not set -# UCLIBC_BUILD_ALL_LOCALE is not set -# UCLIBC_BUILD_MINIMAL_LOCALE is not set -UCLIBC_HAS_LONG_DOUBLE_MATH=y -UCLIBC_HAS_NETWORK_SUPPORT=y -UCLIBC_HAS_NFTW=y -# UCLIBC_HAS_OBSOLETE_BSD_SIGNAL is not set -# UCLIBC_HAS_OBSOLETE_SYSV_SIGNAL is not set -UCLIBC_HAS_PRINTF_M_SPEC=y -# UCLIBC_HAS_PROFILING is not set -UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y -UCLIBC_HAS_PTY=y -UCLIBC_HAS_REALTIME=y -UCLIBC_HAS_REGEX=y -UCLIBC_HAS_RESOLVER_SUPPORT=y -# UCLIBC_HAS_SHA256_CRYPT_IMPL is not set -# UCLIBC_HAS_SHA512_CRYPT_IMPL is not set -UCLIBC_HAS_SHADOW=y -UCLIBC_HAS_SIGNUM_MESSAGES=y -UCLIBC_HAS_SOCKET=y -UCLIBC_HAS_SOFT_FLOAT=y -# UCLIBC_HAS_SSP is not set -UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION=y -# UCLIBC_HAS_STDIO_BUFSIZ_1024 is not set -# UCLIBC_HAS_STDIO_BUFSIZ_2048 is not set -# UCLIBC_HAS_STDIO_BUFSIZ_256 is not set -UCLIBC_HAS_STDIO_BUFSIZ_4096=y -# UCLIBC_HAS_STDIO_BUFSIZ_512 is not set -# UCLIBC_HAS_STDIO_BUFSIZ_8192 is not set -# UCLIBC_HAS_STDIO_BUFSIZ_NONE is not set -# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4 is not set -# UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8 is not set -UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE=y -UCLIBC_HAS_STDIO_GETC_MACRO=y -UCLIBC_HAS_STDIO_PUTC_MACRO=y -# UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT is not set -UCLIBC_HAS_STRING_ARCH_OPT=y -UCLIBC_HAS_STRING_GENERIC_OPT=y -# UCLIBC_HAS_STUBS is not set -UCLIBC_HAS_SYSLOG=y -# UCLIBC_HAS_SYS_ERRLIST is not set -# UCLIBC_HAS_SYS_SIGLIST is not set -UCLIBC_HAS_THREADS=y -UCLIBC_HAS_TM_EXTENSIONS=y -UCLIBC_HAS_TZ_CACHING=y -UCLIBC_HAS_TZ_FILE=y -UCLIBC_HAS_TZ_FILE_READ_MANY=y -UCLIBC_HAS_UTMPX=y -UCLIBC_HAS_UTMP=y -UCLIBC_HAS_WCHAR=y -UCLIBC_HAS_WORDEXP=y -UCLIBC_HAS_XATTR=y -# UCLIBC_HAS_XLOCALE is not set -UCLIBC_HAS___PROGNAME=y -UCLIBC_LINUX_SPECIFIC=y -# UCLIBC_MALLOC_DEBUGGING is not set -# UCLIBC_NTP_LEGACY is not set -# USE_OLD_VFPRINTF is not set -UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS=9 -UCLIBC_PWD_BUFFER_SIZE=256 -# UCLIBC_STATIC_LDCONFIG is not set -# UCLIBC_STRICT_HEADERS is not set -UCLIBC_SUPPORT_AI_ADDRCONFIG=y -UCLIBC_SUSV3_LEGACY=y -# UCLIBC_SUSV3_LEGACY_MACROS is not set -UCLIBC_SUSV4_LEGACY=y -# UCLIBC_SV4_DEPRECATED is not set -UCLIBC_TZ_FILE_PATH="/etc/TZ" -# UCLIBC_FALLBACK_TO_ETC_LOCALTIME is not set -UCLIBC_USE_NETLINK=y -# UNIX98PTY_ONLY is not set -WARNINGS="-Wall" -# UCLIBC_SUSV2_LEGACY is not set -# UCLIBC_HAS_CONTEXT_FUNCS is not set -UCLIBC_HAS_GETOPT_LONG=y diff --git a/toolchain/uClibc/config/debug b/toolchain/uClibc/config/debug deleted file mode 100644 index b366e66e39..0000000000 --- a/toolchain/uClibc/config/debug +++ /dev/null @@ -1,6 +0,0 @@ -DODEBUG=y -DODEBUG_PT=y -PTHREADS_DEBUG_SUPPORT=y -SUPPORT_LD_DEBUG=y -SUPPORT_LD_DEBUG_EARLY=y -UCLIBC_MALLOC_DEBUGGING=y diff --git a/toolchain/uClibc/config/i386 b/toolchain/uClibc/config/i386 deleted file mode 100644 index cddb709630..0000000000 --- a/toolchain/uClibc/config/i386 +++ /dev/null @@ -1,8 +0,0 @@ -ARCH_LITTLE_ENDIAN=y -# CONFIG_386 is not set -CONFIG_486=y -# CONFIG_586 is not set -# CONFIG_686 is not set -TARGET_ARCH="i386" -TARGET_i386=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/i686 b/toolchain/uClibc/config/i686 deleted file mode 100644 index 8a25f41e23..0000000000 --- a/toolchain/uClibc/config/i686 +++ /dev/null @@ -1,8 +0,0 @@ -ARCH_LITTLE_ENDIAN=y -# CONFIG_386 is not set -# CONFIG_486 is not set -# CONFIG_586 is not set -CONFIG_686=y -TARGET_ARCH="i386" -TARGET_i386=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/m68k b/toolchain/uClibc/config/m68k deleted file mode 100644 index 0675bb9080..0000000000 --- a/toolchain/uClibc/config/m68k +++ /dev/null @@ -1,5 +0,0 @@ -ARCH_BIG_ENDIAN=y -TARGET_ARCH="m68k" -TARGET_SUBARCH="" -TARGET_m68k=y -# UCLIBC_HAS_THREADS_NATIVE is not set diff --git a/toolchain/uClibc/config/mips b/toolchain/uClibc/config/mips deleted file mode 100644 index c8f71f03c9..0000000000 --- a/toolchain/uClibc/config/mips +++ /dev/null @@ -1,10 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_WANTS_BIG_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -# CONFIG_MIPS_N64_ABI is not set -CONFIG_MIPS_O32_ABI=y -TARGET_ARCH="mips" -TARGET_mips=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64 b/toolchain/uClibc/config/mips64 deleted file mode 100644 index 453293def3..0000000000 --- a/toolchain/uClibc/config/mips64 +++ /dev/null @@ -1,10 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_WANTS_BIG_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -CONFIG_MIPS_N64_ABI=y -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64.32 b/toolchain/uClibc/config/mips64.32 deleted file mode 100644 index 4e98968633..0000000000 --- a/toolchain/uClibc/config/mips64.32 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_WANTS_BIG_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -# CONFIG_MIPS_N64_ABI is not set -CONFIG_MIPS_O32_ABI=y -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64.64 b/toolchain/uClibc/config/mips64.64 deleted file mode 100644 index bf4ecca704..0000000000 --- a/toolchain/uClibc/config/mips64.64 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_WANTS_BIG_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -CONFIG_MIPS_N64_ABI=y -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64.n32 b/toolchain/uClibc/config/mips64.n32 deleted file mode 100644 index c26ecec4c2..0000000000 --- a/toolchain/uClibc/config/mips64.n32 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_BIG_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_WANTS_BIG_ENDIAN=y -CONFIG_MIPS_N32_ABI=y -# CONFIG_MIPS_N64_ABI is not set -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64el b/toolchain/uClibc/config/mips64el deleted file mode 100644 index 98d9bb4569..0000000000 --- a/toolchain/uClibc/config/mips64el +++ /dev/null @@ -1,10 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -CONFIG_MIPS_N64_ABI=y -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64el.32 b/toolchain/uClibc/config/mips64el.32 deleted file mode 100644 index 03ab17c24f..0000000000 --- a/toolchain/uClibc/config/mips64el.32 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -# CONFIG_MIPS_N64_ABI is not set -CONFIG_MIPS_O32_ABI=y -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64el.64 b/toolchain/uClibc/config/mips64el.64 deleted file mode 100644 index 884640c756..0000000000 --- a/toolchain/uClibc/config/mips64el.64 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -CONFIG_MIPS_N64_ABI=y -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mips64el.n32 b/toolchain/uClibc/config/mips64el.n32 deleted file mode 100644 index 9a8bb3d3fb..0000000000 --- a/toolchain/uClibc/config/mips64el.n32 +++ /dev/null @@ -1,11 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -CONFIG_MIPS_N32_ABI=y -# CONFIG_MIPS_N64_ABI is not set -# CONFIG_MIPS_O32_ABI is not set -TARGET_ARCH="mips" -TARGET_mips=y -TARGET_SUBARCH="mips64" -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mipsel b/toolchain/uClibc/config/mipsel deleted file mode 100644 index 2a79c16bdb..0000000000 --- a/toolchain/uClibc/config/mipsel +++ /dev/null @@ -1,10 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -# CONFIG_MIPS_N64_ABI is not set -CONFIG_MIPS_O32_ABI=y -TARGET_ARCH="mips" -TARGET_mips=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/mipsel.cobalt b/toolchain/uClibc/config/mipsel.cobalt deleted file mode 100644 index 2a79c16bdb..0000000000 --- a/toolchain/uClibc/config/mipsel.cobalt +++ /dev/null @@ -1,10 +0,0 @@ -ARCH_ANY_ENDIAN=y -ARCH_CFLAGS="-mno-split-addresses" -ARCH_LITTLE_ENDIAN=y -ARCH_WANTS_LITTLE_ENDIAN=y -# CONFIG_MIPS_N32_ABI is not set -# CONFIG_MIPS_N64_ABI is not set -CONFIG_MIPS_O32_ABI=y -TARGET_ARCH="mips" -TARGET_mips=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/config/powerpc b/toolchain/uClibc/config/powerpc deleted file mode 100644 index 5b1292d12e..0000000000 --- a/toolchain/uClibc/config/powerpc +++ /dev/null @@ -1,6 +0,0 @@ -ARCH_BIG_ENDIAN=y -CONFIG_CLASSIC=y -# CONFIG_E500 is not set -TARGET_ARCH="powerpc" -TARGET_SUBARCH="classic" -TARGET_powerpc=y diff --git a/toolchain/uClibc/config/powerpc.e500 b/toolchain/uClibc/config/powerpc.e500 deleted file mode 100644 index a835c3d5e7..0000000000 --- a/toolchain/uClibc/config/powerpc.e500 +++ /dev/null @@ -1,6 +0,0 @@ -ARCH_BIG_ENDIAN=y -# CONFIG_CLASSIC is not set -CONFIG_E500=y -TARGET_ARCH="powerpc" -TARGET_SUBARCH="classic" -TARGET_powerpc=y diff --git a/toolchain/uClibc/config/sparc b/toolchain/uClibc/config/sparc deleted file mode 100644 index 3630b24a7e..0000000000 --- a/toolchain/uClibc/config/sparc +++ /dev/null @@ -1,6 +0,0 @@ -ARCH_BIG_ENDIAN=y -# CONFIG_SPARC_V7 is not set -# CONFIG_SPARC_V8 is not set -TARGET_ARCH="sparc" -TARGET_sparc=y -UCLIBC_HAS_LONG_DOUBLE_MATH=y diff --git a/toolchain/uClibc/config/sparc.leon b/toolchain/uClibc/config/sparc.leon deleted file mode 100644 index 3deb5148d9..0000000000 --- a/toolchain/uClibc/config/sparc.leon +++ /dev/null @@ -1,6 +0,0 @@ -ARCH_BIG_ENDIAN=y -# CONFIG_SPARC_V7 is not set -CONFIG_SPARC_V8=y -TARGET_ARCH="sparc" -TARGET_sparc=y -UCLIBC_HAS_LONG_DOUBLE_MATH=y diff --git a/toolchain/uClibc/config/x86_64 b/toolchain/uClibc/config/x86_64 deleted file mode 100644 index a13d659ba1..0000000000 --- a/toolchain/uClibc/config/x86_64 +++ /dev/null @@ -1,5 +0,0 @@ -ARCH_LITTLE_ENDIAN=y -TARGET_ARCH="x86_64" -TARGET_x86_64=y -UCLIBC_BSD_SPECIFIC=y -UCLIBC_HAS_FPU=y diff --git a/toolchain/uClibc/headers/Makefile b/toolchain/uClibc/headers/Makefile deleted file mode 100644 index abd3620d33..0000000000 --- a/toolchain/uClibc/headers/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -PATH_PREFIX:=.. - -include ../common.mk - -HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.headers_built -HOST_STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.uclibc_headers_installed - -define Host/Compile - -endef - -define Host/Install - PATH='$(TARGET_PATH)' $(MAKE) -C $(HOST_BUILD_DIR) \ - PREFIX="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/" \ - DEVEL_PREFIX=/ \ - RUNTIME_PREFIX="$(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/" \ - HOSTCC="$(HOSTCC)" \ - CC="$(TARGET_CC)" \ - CPU_CFLAGS="$(TARGET_CFLAGS)" \ - ARCH="$(CONFIG_ARCH)" \ - pregen \ - install_headers - $(CP) $(BUILD_DIR_TOOLCHAIN)/linux-dev/* $(BUILD_DIR_TOOLCHAIN)/$(LIBC)-dev/ -endef - -$(eval $(call HostBuild)) - diff --git a/toolchain/uClibc/utils/Makefile b/toolchain/uClibc/utils/Makefile deleted file mode 100644 index 83100d70c1..0000000000 --- a/toolchain/uClibc/utils/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -PATH_PREFIX=.. - -include ../common.mk - -HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.utils_built -HOST_STAMP_INSTALLED:=$(TOOLCHAIN_DIR)/stamp/.uclibc_utils_installed - -define Host/Compile - $(SED) 's,^CROSS=.*,CROSS=$(TARGET_CROSS),g' $(HOST_BUILD_DIR)/Rules.mak - $(UCLIBC_MAKE) PREFIX= utils -endef - -define Host/Install - $(INSTALL_DIR) $(TOOLCHAIN_DIR)/bin - $(INSTALL_BIN) \ - $(HOST_BUILD_DIR)/utils/ldd \ - $(TOOLCHAIN_DIR)/bin/ - $(INSTALL_DIR) $(TOOLCHAIN_DIR)/sbin - $(INSTALL_BIN) \ - $(HOST_BUILD_DIR)/utils/ldconfig \ - $(TOOLCHAIN_DIR)/sbin/ -endef - -$(eval $(call HostBuild))