From 09d3e6327d0bb223e597d2d73473a32f9bd1d30a Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Mon, 17 Apr 2023 06:30:08 +0300 Subject: [PATCH] cmake: LibraryNaming: greatly speedup common configurations --- cmake/LibraryNaming.cmake | 118 ++++++++++++++++++++++++-------------- 1 file changed, 75 insertions(+), 43 deletions(-) diff --git a/cmake/LibraryNaming.cmake b/cmake/LibraryNaming.cmake index 3c2b8968..5c444e23 100644 --- a/cmake/LibraryNaming.cmake +++ b/cmake/LibraryNaming.cmake @@ -1,49 +1,81 @@ include(CheckSymbolExists) -# generated(see comments in public/build.h) -# cat build.h | grep '^#undef XASH' | awk '{ print "check_symbol_exists(" $2 " \"build.h\" " $2 ")" }' +macro(check_build_target symbol) + check_symbol_exists(${symbol} "build.h" ${symbol}) +endmacro() + +macro(check_group_build_target symbol group) + if(NOT ${group}) + check_build_target(${symbol}) + if(${symbol}) + set(${group} TRUE) + endif() + else() + set(${symbol} FALSE) + endif() +endmacro() + +# So there is a problem: +# 1. Number of these symbols only grows, as we support more and more ports +# 2. CMake was written by morons and can't check these symbols in parallel +# 3. MSVC is very slow at everything (startup, parsing, generating error) + +# Solution: group these symbols and set variable if one of them was found +# this way we can reorder to reorder them by most common configurations +# but we can't generate this list anymore! ... OR IS IT ??? + +# Well, after reordering positions in engine's buildenums.h, we can partially autogenerate this list! +# echo "check_build_target(XASH_64BIT)" +# grep "#define PLATFORM" buildenums.h | cut -d' ' -f 2 | cut -d_ -f 2- | awk '{ print "check_group_build_target(XASH_" $1 " XASH_PLATFORM)" }' +# grep "#define ARCHITECTURE" buildenums.h | cut -d' ' -f 2 | cut -d_ -f 2- | awk '{ print "check_group_build_target(XASH_" $1 " XASH_ARCHITECTURE)" +# grep "#define ENDIAN" buildenums.h | cut -d' ' -f 2 | cut -d_ -f 2- | awk '{ print "check_group_build_target(XASH_" $1 "_ENDIAN XASH_ENDIANNESS)"}' +# echo "if(XASH_ARM)" +# grep '^#undef XASH' build.h | grep "XASH_ARM[v_]" | awk '{ print "check_build_target(" $2 ")"}' +# echo "endif()" +# echo "if(XASH_RISCV)" +# grep '^#undef XASH' build.h | grep "XASH_RISCV_" | awk '{ print "check_build_target(" $2 ")"}' +# echo "endif()" + set(CMAKE_REQUIRED_INCLUDES "${PROJECT_SOURCE_DIR}/public/") -check_symbol_exists(XASH_64BIT "build.h" XASH_64BIT) -check_symbol_exists(XASH_AMD64 "build.h" XASH_AMD64) -check_symbol_exists(XASH_ANDROID "build.h" XASH_ANDROID) -check_symbol_exists(XASH_APPLE "build.h" XASH_APPLE) -check_symbol_exists(XASH_ARM "build.h" XASH_ARM) -check_symbol_exists(XASH_ARM_HARDFP "build.h" XASH_ARM_HARDFP) -check_symbol_exists(XASH_ARM_SOFTFP "build.h" XASH_ARM_SOFTFP) -check_symbol_exists(XASH_ARMv4 "build.h" XASH_ARMv4) -check_symbol_exists(XASH_ARMv5 "build.h" XASH_ARMv5) -check_symbol_exists(XASH_ARMv6 "build.h" XASH_ARMv6) -check_symbol_exists(XASH_ARMv7 "build.h" XASH_ARMv7) -check_symbol_exists(XASH_ARMv8 "build.h" XASH_ARMv8) -check_symbol_exists(XASH_BIG_ENDIAN "build.h" XASH_BIG_ENDIAN) -check_symbol_exists(XASH_BSD "build.h" XASH_BSD) -check_symbol_exists(XASH_DOS4GW "build.h" XASH_DOS4GW) -check_symbol_exists(XASH_E2K "build.h" XASH_E2K) -check_symbol_exists(XASH_EMSCRIPTEN "build.h" XASH_EMSCRIPTEN) -check_symbol_exists(XASH_FREEBSD "build.h" XASH_FREEBSD) -check_symbol_exists(XASH_HAIKU "build.h" XASH_HAIKU) -check_symbol_exists(XASH_IOS "build.h" XASH_IOS) -check_symbol_exists(XASH_JS "build.h" XASH_JS) -check_symbol_exists(XASH_LINUX "build.h" XASH_LINUX) -check_symbol_exists(XASH_LITTLE_ENDIAN "build.h" XASH_LITTLE_ENDIAN) -check_symbol_exists(XASH_MINGW "build.h" XASH_MINGW) -check_symbol_exists(XASH_MIPS "build.h" XASH_MIPS) -check_symbol_exists(XASH_PPC "build.h" XASH_PPC) -check_symbol_exists(XASH_MOBILE_PLATFORM "build.h" XASH_MOBILE_PLATFORM) -check_symbol_exists(XASH_MSVC "build.h" XASH_MSVC) -check_symbol_exists(XASH_NETBSD "build.h" XASH_NETBSD) -check_symbol_exists(XASH_OPENBSD "build.h" XASH_OPENBSD) -check_symbol_exists(XASH_POSIX "build.h" XASH_POSIX) -check_symbol_exists(XASH_RISCV "build.h" XASH_RISCV) -check_symbol_exists(XASH_RISCV_DOUBLEFP "build.h" XASH_RISCV_DOUBLEFP) -check_symbol_exists(XASH_RISCV_SINGLEFP "build.h" XASH_RISCV_SINGLEFP) -check_symbol_exists(XASH_RISCV_SOFTFP "build.h" XASH_RISCV_SOFTFP) -check_symbol_exists(XASH_SERENITY "build.h" XASH_SERENITY) -check_symbol_exists(XASH_WIN32 "build.h" XASH_WIN32) -check_symbol_exists(XASH_WIN64 "build.h" XASH_WIN64) -check_symbol_exists(XASH_X86 "build.h" XASH_X86) -check_symbol_exists(XASH_NSWITCH "build.h" XASH_NSWITCH) -check_symbol_exists(XASH_PSVITA "build.h" XASH_PSVITA) +check_build_target(XASH_64BIT) +check_group_build_target(XASH_WIN32 XASH_PLATFORM) +check_group_build_target(XASH_LINUX XASH_PLATFORM) +check_group_build_target(XASH_FREEBSD XASH_PLATFORM) +check_group_build_target(XASH_ANDROID XASH_PLATFORM) +check_group_build_target(XASH_APPLE XASH_PLATFORM) +check_group_build_target(XASH_NETBSD XASH_PLATFORM) +check_group_build_target(XASH_OPENBSD XASH_PLATFORM) +check_group_build_target(XASH_EMSCRIPTEN XASH_PLATFORM) +check_group_build_target(XASH_DOS4GW XASH_PLATFORM) +check_group_build_target(XASH_HAIKU XASH_PLATFORM) +check_group_build_target(XASH_SERENITY XASH_PLATFORM) +check_group_build_target(XASH_IRIX XASH_PLATFORM) +check_group_build_target(XASH_NSWITCH XASH_PLATFORM) +check_group_build_target(XASH_PSVITA XASH_PLATFORM) +check_group_build_target(XASH_LINUX_UNKNOWN XASH_PLATFORM) +check_group_build_target(XASH_X86 XASH_ARCHITECTURE) +check_group_build_target(XASH_AMD64 XASH_ARCHITECTURE) +check_group_build_target(XASH_ARM XASH_ARCHITECTURE) +check_group_build_target(XASH_MIPS XASH_ARCHITECTURE) +check_group_build_target(XASH_JS XASH_ARCHITECTURE) +check_group_build_target(XASH_E2K XASH_ARCHITECTURE) +check_group_build_target(XASH_RISCV XASH_ARCHITECTURE) +check_group_build_target(XASH_LITTLE_ENDIAN XASH_ENDIANNESS) +check_group_build_target(XASH_BIG_ENDIAN XASH_ENDIANNESS) +if(XASH_ARM) +check_build_target(XASH_ARM_HARDFP) +check_build_target(XASH_ARM_SOFTFP) +check_build_target(XASH_ARMv4) +check_build_target(XASH_ARMv5) +check_build_target(XASH_ARMv6) +check_build_target(XASH_ARMv7) +check_build_target(XASH_ARMv8) +endif() +if(XASH_RISCV) +check_build_target(XASH_RISCV_DOUBLEFP) +check_build_target(XASH_RISCV_SINGLEFP) +check_build_target(XASH_RISCV_SOFTFP) +endif() unset(CMAKE_REQUIRED_INCLUDES) # engine/common/build.c