--- nono/configure.ac 2026/04/29 17:05:22 1.1.1.14 +++ nono/configure.ac 2026/04/29 17:05:34 1.1.1.16 @@ -69,6 +69,8 @@ ADD_CC_WARN_IF(-Wshadow-local) if test x"${cc_has_Wshadow_local}" != xyes; then ADD_CC_WARN_IF(-Wshadow) fi +ADD_CC_WARN_IF(-Wstring-conversion) +ADD_CC_WARN_IF(-Wtype-limits) AC_LANG_POP([C]) AC_SUBST([WARNFLAGS_C]) @@ -88,8 +90,8 @@ AC_DEFUN([ADD_CXX_WARN_IF],[ ]) ADD_CXX_WARN_IF(-Wcast-qual) ADD_CXX_WARN_IF(-Wextra-semi) -ADD_CXX_WARN_IF(-Winconsistent-missing-override) ADD_CXX_WARN_IF(-Winconsistent-missing-destructor-override) +ADD_CXX_WARN_IF(-Winconsistent-missing-override) ADD_CXX_WARN_IF(-Wlogical-op) ADD_CXX_WARN_IF(-Wmissing-prototypes) ADD_CXX_WARN_IF(-Wmissing-variable-declarations) @@ -98,19 +100,21 @@ ADD_CXX_WARN_IF(-Wshadow-local) if test x"${cxx_has_Wshadow_local}" != xyes; then ADD_CXX_WARN_IF(-Wshadow) fi +ADD_CXX_WARN_IF(-Wstring-conversion) +ADD_CXX_WARN_IF(-Wsuggest-destructor-override) ADD_CXX_WARN_IF(-Wsuggest-override) +ADD_CXX_WARN_IF(-Wtype-limits) ADD_CXX_WARN_IF(-Wvla-extension) AC_SUBST([WARNFLAGS_CXX]) -# CPU が AVX2 をサポートしているか。 -# (OS がレジスタの退避などをサポートしているかとかはたぶん知る方法がない) +# コンパイラが AVX2 をサポートしているか。 AC_ARG_ENABLE([avx2], [AS_HELP_STRING([--disable-avx2], [disable avx2 support])], [], [enable_avx2=yes]) AS_IF([test x"${enable_avx2}" != x"no"], [ - AC_MSG_CHECKING(for AVX2) + AC_MSG_CHECKING(whether the compiler supports AVX2) if test x"${host_cpu}" = x"x86_64"; then if test x"${host_cpu}" = x"${build_cpu}"; then old_CXXFLAGS="${CXXFLAGS}" @@ -138,6 +142,37 @@ AS_IF([test x"${enable_avx2}" != x"no"], ], [ ]) +# コンパイラが NEON をサポートしているか。 +AC_ARG_ENABLE([neon], + [AS_HELP_STRING([--disable-neon], [disable NEON support])], + [], + [enable_neon=yes]) + +AS_IF([test x"${enable_neon}" != x"no"], [ + AC_MSG_CHECKING(whether the compiler supports NEON) + if test x"${host_cpu}" = x"aarch64"; then + if test x"${host_cpu}" = x"${build_cpu}"; then + old_CXXFLAGS="${CXXFLAGS}" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + uint8x16_t v; + ])], [ + have_neon=yes + ]) + CXXFLAGS="${old_CXXFLAGS}" + fi + fi + if test x"${have_neon}" = x"yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_NEON]) + AC_SUBST(HOST_HAS_NEON, yes) + else + AC_MSG_RESULT([no]) + fi +], [ +]) + # Checks for libraries. # Checks for header files. @@ -147,6 +182,8 @@ AC_CHECK_HEADERS([byteswap.h]) AC_CHECK_HEADERS([endian.h]) AC_CHECK_HEADERS([kqueue/sys/event.h]) AC_CHECK_HEADERS([pthread_np.h]) +AC_CHECK_HEADERS([sched.h]) +AC_CHECK_HEADERS([sys/cpuset.h]) AC_CHECK_HEADERS([sys/endian.h]) AC_CHECK_HEADERS([sys/event.h]) AC_CHECK_HEADERS([net/bpf.h]) @@ -178,6 +215,55 @@ AC_CHECK_HEADER_STDBOOL #AC_TYPE_UINT64_T #AC_TYPE_UINT8_T +AC_MSG_CHECKING(for cpuset_t) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ]], [[ + cpuset_t set; + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CPUSET_T) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for cpuset_t *) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ]], [[ + cpuset_t *set; + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CPUSET_T_P) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for cpu_set_t) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + cpu_set_t set; + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_CPU_SET_T) + ], [ + AC_MSG_RESULT(no) + ]) + + +# __builtin + AC_MSG_CHECKING(for __builtin_assume) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ @@ -189,6 +275,39 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for __builtin_bitreverse8) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_bitreverse8(1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_BITREVERSE8) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for __builtin_bitreverse16) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_bitreverse16(1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_BITREVERSE16) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for __builtin_bitreverse32) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_bitreverse32(1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_BITREVERSE32) + ], [ + AC_MSG_RESULT(no) + ]) + AC_MSG_CHECKING(for __builtin_bswap16) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ @@ -232,6 +351,28 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for __builtin_rotateleft32) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_rotateleft32(1, 1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_ROTATELEFT32) + ], [ + AC_MSG_RESULT(no) + ]) + +AC_MSG_CHECKING(for __builtin_rotateright32) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], + [[ + return __builtin_rotateright32(1, 1); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE___BUILTIN_ROTATERIGHT32) + ], [ + AC_MSG_RESULT(no) + ]) + AC_MSG_CHECKING(for __builtin_unreachable) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ __builtin_unreachable(); @@ -473,6 +614,142 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ AC_MSG_RESULT([no]) ]) +AC_MSG_CHECKING(for CPU_COUNT) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ], [ + #if defined(HAVE_CPUSET_T) + cpuset_t set; + #elif defined(HAVE_CPU_SET_T) + cpu_set_t set; + #endif + CPU_COUNT(&set); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPU_COUNT]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for CPU_ISSET) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ], [ + #if defined(HAVE_CPUSET_T) + cpuset_t set; + #elif defined(HAVE_CPU_SET_T) + cpu_set_t set; + #endif + CPU_ISSET(0, &set); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPU_ISSET]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for CPU_SET) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ], [ + #if defined(HAVE_CPUSET_T) + cpuset_t set; + #elif defined(HAVE_CPU_SET_T) + cpu_set_t set; + #endif + CPU_SET(0, &set); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPU_SET]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for CPU_ZERO) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #if defined(HAVE_SCHED_H) + #include + #endif + #if defined(HAVE_SYS_CPUSET_H) + #include + #endif + ], [ + #if defined(HAVE_CPUSET_T) + cpuset_t set; + #elif defined(HAVE_CPU_SET_T) + cpu_set_t set; + #endif + CPU_ZERO(&set); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPU_ZERO]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for cpuset_create) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + cpuset_create(); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPUSET_CREATE]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for cpuset_isset) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + cpuset_isset(0, NULL); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPUSET_ISSET]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for cpuset_set) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + cpuset_set(0, NULL); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPUSET_SET]) + ], [ + AC_MSG_RESULT([no]) + ]) + +AC_MSG_CHECKING(for cpuset_size) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + #include + ], [ + cpuset_size(NULL); + ])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CPUSET_SIZE]) + ], [ + AC_MSG_RESULT([no]) + ]) + AC_MSG_CHECKING(for statfs) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #include @@ -615,6 +892,22 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ AC_MSG_RESULT(no) ]) +AC_MSG_CHECKING(for pthread_setaffinity_np) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #if defined(HAVE_PTHREAD_NP_H) + #include + #endif + ]], [[ + pthread_setaffinity_np(pthread_self(), 0, NULL); + ]])], [ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_PTHREAD_SETAFFINITY_NP) + ], [ + AC_MSG_RESULT(no) + ]) + + # # Network # @@ -736,6 +1029,32 @@ AC_CHECK_LIB(z, gzclose, *** If use use Ubuntu, sudo apt install zlib1g-dev])] ) +# libslirp +AC_ARG_WITH([libslirp], + [AS_HELP_STRING([--without-libslirp], + [disable usermode network (using SLIRP)])], + [], + [with_libslirp=yes]) + +AS_IF([test "x$with_libslirp" != "xno"], [ + CHECK_LIB([libslirp], [-lslirp], [ + #include + ], [ + slirp_version_string(); + ]) + if test x"${has_libslirp}" = x"yes"; then + AC_DEFINE([HAVE_HOSTNET_SLIRP]) + AC_SUBST([HOSTNET_SLIRP], [yes]) + else + AC_MSG_ERROR([*** libslirp is not found. +*** If use use pkgsrc, install net/libslirp. +*** If you use Ubuntu, sudo apt install libslirp-dev. +*** Or specify --without-libslirp (it disables hostnet-driver=usermode).]) + fi +], [ + AC_SUBST([HOSTNET_SLIRP], [no]) +]) + # wxWidgets AC_ARG_WITH([gui], [AS_HELP_STRING([--without-gui], [disable GUI support])], @@ -799,20 +1118,28 @@ AS_IF([test "x$with_gui" != xno], [ # nono 本体のチェックはここまで。 nono_CPPFLAGS=${CPPFLAGS} -nono_LIBS=${LIBS} +case "${host_os}" in + netbsd*) + # どうしたもんかこれ。 + nono_LIBS=[`echo ${LIBS} | sed -e 's/-L\([^ ]*\) /-L\1 -Wl,-R,\1 /'`] + ;; + *) + nono_LIBS=${LIBS} + ;; +esac AC_SUBST([NONO_CPPFLAGS], [${nono_CPPFLAGS}]) AC_SUBST([NONO_LIBS], [${nono_LIBS}]) # iconv は util/ でのみ必要。 CPPFLAGS= LIBS= -CHECK_LIB([iconv], [-liconv], [ +CHECK_LIB([libiconv], [-liconv], [ #include ], [ iconv_open("", ""); ]) -if test x"${has_iconv}" = x"yes"; then +if test x"${has_libiconv}" = x"yes"; then AC_MSG_CHECKING(whether iconv needs const) old_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${CPPFLAGS} -Werror" @@ -839,6 +1166,7 @@ AC_CONFIG_FILES([Makefile.cfg host/Makefile wx/Makefile util/mkcgrom/Makefile + util/ttfext/Makefile util/viewcgrom/Makefile ]) AC_CONFIG_HEADERS([config-nono.h])