1 1.1 christos dnl SPDX-License-Identifier: LGPL-2.1-only 2 1.1 christos dnl 3 1.1 christos dnl Copyright (C) 2021 EfficiOS, Inc. 4 1.1 christos dnl 5 1.1 christos dnl Process this file with autoconf to produce a configure script. 6 1.1 christos 7 1.1 christos # Project version information 8 1.1 christos m4_define([urcu_version_major], [0]) 9 1.1 christos m4_define([urcu_version_minor], [15]) 10 1.1 christos m4_define([urcu_version_patch], [0]) 11 1.1 christos m4_define([urcu_version_dev_stage], []) 12 1.1 christos m4_define([urcu_version], urcu_version_major[.]urcu_version_minor[.]urcu_version_patch[]urcu_version_dev_stage) 13 1.1 christos 14 1.1 christos # Library version information of "liburcu" 15 1.1 christos # Following the numbering scheme proposed by libtool for the library version 16 1.1 christos # http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html 17 1.1 christos m4_define([urcu_lib_version_current], [9]) 18 1.1 christos m4_define([urcu_lib_version_revision], [0]) 19 1.1 christos m4_define([urcu_lib_version_age], [1]) 20 1.1 christos m4_define([urcu_lib_version], urcu_lib_version_current[:]urcu_lib_version_revision[:]urcu_lib_version_age) 21 1.1 christos 22 1.1 christos 23 1.1 christos ## ## 24 1.1 christos ## Autoconf base setup ## 25 1.1 christos ## ## 26 1.1 christos 27 1.1 christos AC_PREREQ([2.69]) 28 1.1 christos AC_INIT([userspace-rcu],[urcu_version],[mathieu dot desnoyers at efficios dot com],[],[http://liburcu.org/]) 29 1.1 christos 30 1.1 christos AC_CONFIG_HEADERS([include/config.h include/urcu/config.h]) 31 1.1 christos AC_CONFIG_AUX_DIR([config]) 32 1.1 christos AC_CONFIG_MACRO_DIR([m4]) 33 1.1 christos 34 1.1 christos AC_CANONICAL_TARGET 35 1.1 christos AC_CANONICAL_HOST 36 1.1 christos 37 1.1 christos 38 1.1 christos ## ## 39 1.1 christos ## Automake base setup ## 40 1.1 christos ## ## 41 1.1 christos 42 1.1 christos AM_INIT_AUTOMAKE([1.12 foreign dist-bzip2 no-dist-gzip nostdinc -Wall -Wno-portability -Werror]) 43 1.1 christos AM_MAINTAINER_MODE([enable]) 44 1.1 christos 45 1.1 christos # Enable silent rules by default 46 1.1 christos AM_SILENT_RULES([yes]) 47 1.1 christos 48 1.1 christos 49 1.1 christos ## ## 50 1.1 christos ## OS and Arch specific defaults ## 51 1.1 christos ## ## 52 1.1 christos 53 1.1 christos AS_CASE([$host], 54 1.1 christos [*-cygwin* | *-msys*], [LT_NO_UNDEFINED="-no-undefined"] 55 1.1 christos ) 56 1.1 christos 57 1.1 christos 58 1.1 christos ## ## 59 1.1 christos ## C compiler checks ## 60 1.1 christos ## ## 61 1.1 christos 62 1.1 christos # Choose the C compiler 63 1.1 christos AC_PROG_CC 64 1.1 christos # AC_PROG_CC_STDC was merged in AC_PROG_CC in autoconf 2.70 65 1.1 christos m4_version_prereq([2.70], [], [AC_PROG_CC_STDC]) 66 1.1 christos 67 1.1 christos # Make sure the C compiler supports C99 68 1.1 christos AS_IF([test "$ac_cv_prog_cc_c99" = "no"], [AC_MSG_ERROR([The compiler does not support C99])]) 69 1.1 christos 70 1.1 christos # Enable available system extensions and LFS support 71 1.1 christos AC_USE_SYSTEM_EXTENSIONS 72 1.1 christos AC_SYS_LARGEFILE 73 1.1 christos 74 1.1 christos # Check if the selected C compiler supports atomic builtins 75 1.1 christos AE_CC_ATOMIC_BUILTINS 76 1.1 christos 77 1.1 christos 78 1.1 christos ## ## 79 1.1 christos ## C++ compiler checks ## 80 1.1 christos ## ## 81 1.1 christos 82 1.1 christos # Require a C++11 compiler without GNU extensions (-std=c++11) 83 1.1 christos AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory]) 84 1.1 christos 85 1.1 christos # Make sure the C compiler supports __attribute__ 86 1.1 christos AX_C___ATTRIBUTE__ 87 1.1 christos AS_IF([test "x$ax_cv___attribute__" != "xyes"], 88 1.1 christos [AC_MSG_ERROR([The compiler does not support __attribute__ extensions])]) 89 1.1 christos 90 1.1 christos # Make sure we have pthread support 91 1.1 christos AX_PTHREAD([], [AC_MSG_ERROR([Could not configure pthread support])]) 92 1.1 christos 93 1.1 christos # Checks for typedefs, structures, and compiler characteristics. 94 1.1 christos AC_C_INLINE 95 1.1 christos AC_C_TYPEOF 96 1.1 christos AC_TYPE_INT32_T 97 1.1 christos AC_TYPE_PID_T 98 1.1 christos AC_TYPE_SIZE_T 99 1.1 christos AC_TYPE_SSIZE_T 100 1.1 christos AC_TYPE_UINT16_T 101 1.1 christos AC_TYPE_UINT32_T 102 1.1 christos AC_TYPE_UINT64_T 103 1.1 christos AC_TYPE_UINT8_T 104 1.1 christos 105 1.1 christos # Detect warning flags supported by the C compiler and append them to 106 1.1 christos # WARN_CFLAGS. 107 1.1 christos m4_define([WARN_FLAGS_LIST], [ dnl 108 1.1 christos -Wall dnl 109 1.1 christos -Wextra dnl 110 1.1 christos -Wmissing-prototypes dnl 111 1.1 christos -Wmissing-declarations dnl 112 1.1 christos -Wnull-dereference dnl 113 1.1 christos -Wundef dnl 114 1.1 christos -Wshadow dnl 115 1.1 christos -Wjump-misses-init dnl 116 1.1 christos -Wsuggest-attribute=format dnl 117 1.1 christos -Wtautological-constant-out-of-range-compare dnl 118 1.1 christos -Wnested-externs dnl 119 1.1 christos -Wwrite-strings dnl 120 1.1 christos -Wformat=2 dnl 121 1.1 christos -Wstrict-aliasing dnl 122 1.1 christos -Wmissing-noreturn dnl 123 1.1 christos -Winit-self dnl 124 1.1 christos -Wduplicated-cond dnl 125 1.1 christos -Wduplicated-branches dnl 126 1.1 christos -Wlogical-op dnl 127 1.1 christos dnl 128 1.1 christos dnl-Wredundant-decls dnl 129 1.1 christos -Wno-null-dereference dnl 130 1.1 christos ]) 131 1.1 christos 132 1.1 christos # Pass -Werror as an extra flag during the test: this is needed to make the 133 1.1 christos # -Wunknown-warning-option diagnostic fatal with clang. 134 1.1 christos AC_LANG_PUSH([C]) 135 1.1 christos AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CFLAGS], [-Werror]) 136 1.1 christos AC_LANG_POP([C]) 137 1.1 christos 138 1.1 christos AC_LANG_PUSH([C++]) 139 1.1 christos AX_APPEND_COMPILE_FLAGS([WARN_FLAGS_LIST], [WARN_CXXFLAGS], [-Werror]) 140 1.1 christos AC_LANG_POP([C++]) 141 1.1 christos 142 1.1 christos AE_IF_FEATURE_ENABLED([Werror], [WARN_CFLAGS="${WARN_CFLAGS} -Werror"]) 143 1.1 christos AE_IF_FEATURE_ENABLED([Werror], [WARN_CXXFLAGS="${WARN_CXXFLAGS} -Werror"]) 144 1.1 christos 145 1.1 christos 146 1.1 christos ## ## 147 1.1 christos ## Header checks ## 148 1.1 christos ## ## 149 1.1 christos 150 1.1 christos AC_HEADER_STDBOOL 151 1.1 christos AC_CHECK_HEADERS([ \ 152 1.1 christos limits.h \ 153 1.1 christos stddef.h \ 154 1.1 christos sys/param.h \ 155 1.1 christos sys/time.h \ 156 1.1 christos ]) 157 1.1 christos 158 1.1 christos 159 1.1 christos ## ## 160 1.1 christos ## Programs checks ## 161 1.1 christos ## ## 162 1.1 christos 163 1.1 christos AC_PROG_AWK 164 1.1 christos AC_PROG_GREP 165 1.1 christos AC_PROG_MAKE_SET 166 1.1 christos AC_CHECK_PROGS(NPROC, [nproc gnproc]) 167 1.1 christos AC_CHECK_PROGS(GETCONF, [getconf]) 168 1.1 christos AC_CHECK_PROGS(TIME, [time]) 169 1.1 christos 170 1.1 christos # Initialize and configure libtool 171 1.1 christos LT_INIT 172 1.1 christos 173 1.1 christos 174 1.1 christos ## ## 175 1.1 christos ## Library checks ## 176 1.1 christos ## ## 177 1.1 christos 178 1.1 christos # Checks for library functions. 179 1.1 christos AC_FUNC_MMAP 180 1.1 christos AC_FUNC_FORK 181 1.1 christos AC_CHECK_FUNCS([ \ 182 1.1 christos atexit \ 183 1.1 christos getcpuid \ 184 1.1 christos gettid \ 185 1.1 christos gettimeofday \ 186 1.1 christos memeset \ 187 1.1 christos memset \ 188 1.1 christos munmap \ 189 1.1 christos rand_r \ 190 1.1 christos sched_getcpu \ 191 1.1 christos sched_setaffinity \ 192 1.1 christos strerror \ 193 1.1 christos strtoul \ 194 1.1 christos sysconf \ 195 1.1 christos ]) 196 1.1 christos 197 1.1 christos # AC_FUNC_MALLOC causes problems when cross-compiling. 198 1.1 christos #AC_FUNC_MALLOC 199 1.1 christos 200 1.1 christos # Search for clock_gettime() in -lrt 201 1.1 christos AC_SEARCH_LIBS([clock_gettime], [rt], [ 202 1.1 christos AC_DEFINE([CONFIG_RCU_HAVE_CLOCK_GETTIME], [1], [clock_gettime() is detected.]) 203 1.1 christos ]) 204 1.1 christos 205 1.1 christos 206 1.1 christos ## ## 207 1.1 christos ## Optional features selection ## 208 1.1 christos ## ## 209 1.1 christos 210 1.1 christos # Allow to fallback to FIXME if the membarrier syscall is unavailable on the 211 1.1 christos # running kernel, when disabled, abort if the syscall is unavailable. Applies 212 1.1 christos # to default and bulletproof flavors. 213 1.1 christos # Enabled by default 214 1.1 christos AE_FEATURE_DEFAULT_ENABLE 215 1.1 christos AE_FEATURE([sys-membarrier-fallback], [Abort if sys-membarrier is needed but not available rather than using a fallback.]) 216 1.1 christos 217 1.1 christos # Use compiler Thread Local Storage, when disabled use pthread_getspecific() to emulate TLS. 218 1.1 christos # Enabled by default 219 1.1 christos AE_FEATURE_DEFAULT_ENABLE 220 1.1 christos AE_FEATURE([compiler-tls], [Use pthread_getspecific() to emulate Thread Local Storage (TLS) variables.]) 221 1.1 christos 222 1.1 christos # smp-support configure option 223 1.1 christos # Enabled by default 224 1.1 christos AE_FEATURE_DEFAULT_ENABLE 225 1.1 christos AE_FEATURE([smp-support], [Disable SMP support. Warning: only use this on uniprocessor systems.]) 226 1.1 christos 227 1.1 christos # RCU debugging option 228 1.1 christos # Disabled by default 229 1.1 christos AE_FEATURE_DEFAULT_DISABLE 230 1.1 christos AE_FEATURE([rcu-debug], [Enable internal debugging self-checks. Introduces a performance penalty.]) 231 1.1 christos 232 1.1 christos # rculfhash iterator debugging 233 1.1 christos # Disabled by default 234 1.1 christos AE_FEATURE_DEFAULT_DISABLE 235 1.1 christos AE_FEATURE([cds-lfht-iter-debug], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.]) 236 1.1 christos 237 1.1 christos # Use compiler atomic builtins, when disabled use our legacy uatomic implementation. 238 1.1 christos # Disabled by default 239 1.1 christos AE_FEATURE_DEFAULT_DISABLE 240 1.1 christos AE_FEATURE([compiler-atomic-builtins], [Enable the use of compiler atomic builtins.]) 241 1.1 christos 242 1.1 christos # emit legacy memory barriers 243 1.1 christos # Enable by default 244 1.1 christos AE_FEATURE_DEFAULT_ENABLE 245 1.1 christos AE_FEATURE([legacy-mb], [Disable legacy memory barriers.]) 246 1.1 christos 247 1.1 christos # When given, add -Werror to WARN_CFLAGS and WARN_CXXFLAGS. 248 1.1 christos # Disabled by default 249 1.1 christos AE_FEATURE_DEFAULT_DISABLE 250 1.1 christos AE_FEATURE([Werror],[Treat compiler warnings as errors.]) 251 1.1 christos 252 1.1 christos ## ## 253 1.1 christos ## Set defines for optional features conditionnals in the source code ## 254 1.1 christos ## ## 255 1.1 christos 256 1.1 christos AE_IF_FEATURE_DISABLED([sys-membarrier-fallback], [ 257 1.1 christos AC_DEFINE([CONFIG_RCU_FORCE_SYS_MEMBARRIER], [1], [Require the operating system to support the membarrier system call for default and bulletproof flavors.]) 258 1.1 christos ]) 259 1.1 christos 260 1.1 christos AE_IF_FEATURE_ENABLED([compiler-tls], [ 261 1.1 christos AC_DEFINE([CONFIG_RCU_TLS], [1], [Use compiler provided Thread Local Storage.]) 262 1.1 christos ]) 263 1.1 christos 264 1.1 christos AE_IF_FEATURE_ENABLED([smp-support], [ 265 1.1 christos AC_DEFINE([CONFIG_RCU_SMP], [1], [Enable SMP support. With SMP support enabled, uniprocessors are also supported. With SMP support disabled, UP systems work fine, but the behavior of SMP systems is undefined.]) 266 1.1 christos ]) 267 1.1 christos 268 1.1 christos AE_IF_FEATURE_ENABLED([rcu-debug], [ 269 1.1 christos AC_DEFINE([CONFIG_RCU_DEBUG], [1], [Enable internal debugging self-checks. Introduces a performance penalty.]) 270 1.1 christos ]) 271 1.1 christos 272 1.1 christos AE_IF_FEATURE_ENABLED([cds-lfht-iter-debug], [ 273 1.1 christos AC_DEFINE([CONFIG_CDS_LFHT_ITER_DEBUG], [1], [Enable extra debugging checks for lock-free hash table iterator traversal. Alters the rculfhash ABI. Make sure to compile both library and application with matching configuration.]) 274 1.1 christos ]) 275 1.1 christos 276 1.1 christos AE_IF_FEATURE_ENABLED([compiler-atomic-builtins], [ 277 1.1 christos AC_DEFINE([CONFIG_RCU_USE_ATOMIC_BUILTINS], [1], [Use compiler atomic builtins.]) 278 1.1 christos ]) 279 1.1 christos 280 1.1 christos AE_IF_FEATURE_ENABLED([legacy-mb], [ 281 1.1 christos AC_DEFINE([CONFIG_RCU_EMIT_LEGACY_MB], [1], [Emit legacy memory barriers that were documented in the APIs.]) 282 1.1 christos ]) 283 1.1 christos 284 1.1 christos ## ## 285 1.1 christos ## Set automake variables for optional feature conditionnals in Makefile.am ## 286 1.1 christos ## ## 287 1.1 christos 288 1.1 christos # Building the examples requires the shared libraries to be enabled 289 1.1 christos AM_CONDITIONAL([ENABLE_EXAMPLES], AE_IS_FEATURE_ENABLED([shared])) 290 1.1 christos 291 1.1 christos 292 1.1 christos ## ## 293 1.1 christos ## Check for optional features dependencies ## 294 1.1 christos ## ## 295 1.1 christos 296 1.1 christos 297 1.1 christos AE_IF_FEATURE_ENABLED([compiler-atomic-builtins], [ 298 1.1 christos AS_IF([test "x$ae_cv_cc_atomic_builtins" != xyes], [ 299 1.1 christos AC_MSG_ERROR([The compiler does not support atomic builtins.]) 300 1.1 christos ]) 301 1.1 christos ]) 302 1.1 christos 303 1.1 christos ## ## 304 1.1 christos ## Substitute variables for use in Makefile.am ## 305 1.1 christos ## ## 306 1.1 christos 307 1.1 christos # Library versions for libtool 308 1.1 christos AC_SUBST([URCU_LIBRARY_VERSION], [urcu_lib_version]) 309 1.1 christos 310 1.1 christos AC_SUBST(LT_NO_UNDEFINED) 311 1.1 christos 312 1.1 christos # The order in which the include folders are searched is important. 313 1.1 christos # The top_builddir should always be searched first in the event that a build 314 1.1 christos # time generated file is included. 315 1.1 christos AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_srcdir)/include -include config.h" 316 1.1 christos AC_SUBST(AM_CPPFLAGS) 317 1.1 christos 318 1.1 christos AM_CFLAGS="$WARN_CFLAGS $PTHREAD_CFLAGS" 319 1.1 christos AC_SUBST(AM_CFLAGS) 320 1.1 christos 321 1.1 christos AM_CXXFLAGS="$WARN_CXXFLAGS $PTHREAD_CFLAGS" 322 1.1 christos AC_SUBST(AM_CXXFLAGS) 323 1.1 christos 324 1.1 christos 325 1.1 christos ## ## 326 1.1 christos ## Output files generated by configure ## 327 1.1 christos ## ## 328 1.1 christos 329 1.1 christos AC_CONFIG_FILES([ 330 1.1 christos Makefile 331 1.1 christos doc/Makefile 332 1.1 christos doc/examples/Makefile 333 1.1 christos extras/Makefile 334 1.1 christos include/Makefile 335 1.1 christos src/Makefile 336 1.1 christos tests/Makefile 337 1.1 christos tests/common/Makefile 338 1.1 christos tests/unit/Makefile 339 1.1 christos tests/benchmark/Makefile 340 1.1 christos tests/regression/Makefile 341 1.1 christos tests/utils/Makefile 342 1.1 christos src/liburcu.pc 343 1.1 christos src/liburcu-bp.pc 344 1.1 christos src/liburcu-cds.pc 345 1.1 christos src/liburcu-qsbr.pc 346 1.1 christos src/liburcu-mb.pc 347 1.1 christos src/liburcu-memb.pc 348 1.1 christos ]) 349 1.1 christos 350 1.1 christos AC_CONFIG_FILES([tests/utils/env.sh],[chmod +x tests/utils/env.sh]) 351 1.1 christos 352 1.1 christos 353 1.1 christos AC_OUTPUT 354 1.1 christos 355 1.1 christos # 356 1.1 christos # Mini-report on what will be built. 357 1.1 christos # 358 1.1 christos 359 1.1 christos AE_PPRINT_INIT 360 1.1 christos AE_PPRINT_SET_INDENT(1) 361 1.1 christos AE_PPRINT_SET_TS(38) 362 1.1 christos 363 1.1 christos AS_ECHO 364 1.1 christos AS_ECHO("${AE_PPRINT_COLOR_BLDBLU}Userspace-RCU $PACKAGE_VERSION${AE_PPRINT_COLOR_RST}") 365 1.1 christos AS_ECHO 366 1.1 christos 367 1.1 christos AE_PPRINT_SUBTITLE([Features]) 368 1.1 christos 369 1.1 christos AE_PPRINT_PROP_STRING([Target architecture], $host_cpu) 370 1.1 christos 371 1.1 christos # SMP support enabled/disabled 372 1.1 christos AE_IS_FEATURE_ENABLED([smp-support]) && value=1 || value=0 373 1.1 christos AE_PPRINT_PROP_BOOL([SMP support], $value) 374 1.1 christos 375 1.1 christos # TLS 376 1.1 christos AE_IS_FEATURE_ENABLED([compiler-tls]) && value="compiler TLS" || value="pthread_getspecific()" 377 1.1 christos AE_PPRINT_PROP_STRING([Thread Local Storage (TLS)], [$value]) 378 1.1 christos 379 1.1 christos # clock_gettime() available 380 1.1 christos test "x$ac_cv_search_function_clock_gettime" != "xno" && value=1 || value=0 381 1.1 christos AE_PPRINT_PROP_BOOL([clock_gettime()], $value) 382 1.1 christos 383 1.1 christos # Require membarrier 384 1.1 christos AE_IS_FEATURE_ENABLED([sys-membarrier-fallback]) && value=0 || value=1 385 1.1 christos AE_PPRINT_PROP_BOOL([Require membarrier], $value) 386 1.1 christos 387 1.1 christos # RCU debug enabled/disabled 388 1.1 christos AE_IS_FEATURE_ENABLED([rcu-debug]) && value=1 || value=0 389 1.1 christos AE_PPRINT_PROP_BOOL([Internal debugging], $value) 390 1.1 christos 391 1.1 christos # rculfhash iterator debug enabled/disabled 392 1.1 christos AE_IS_FEATURE_ENABLED([cds-lfht-iter-debug]) && value=1 || value=0 393 1.1 christos AE_PPRINT_PROP_BOOL([Lock-free HT iterator debugging], $value) 394 1.1 christos 395 1.1 christos AE_PPRINT_PROP_BOOL([Multi-flavor support], 1) 396 1.1 christos 397 1.1 christos # atomic builtins enabled/disabled 398 1.1 christos AE_IS_FEATURE_ENABLED([compiler-atomic-builtins]) && value=1 || value=0 399 1.1 christos AE_PPRINT_PROP_BOOL([Use compiler atomic builtins], $value) 400 1.1 christos 401 1.1 christos # legacy memory barriers 402 1.1 christos AE_IS_FEATURE_ENABLED([legacy-mb]) && value=1 || value=0 403 1.1 christos AE_PPRINT_PROP_BOOL([Emit legacy memory barriers], $value) 404 1.1 christos 405 1.1 christos report_bindir="`eval eval echo $bindir`" 406 1.1 christos report_libdir="`eval eval echo $libdir`" 407 1.1 christos 408 1.1 christos # Print the bindir and libdir this 'make install' will install into. 409 1.1 christos AS_ECHO 410 1.1 christos AE_PPRINT_SUBTITLE([Install directories]) 411 1.1 christos AE_PPRINT_PROP_STRING([Binaries], [$report_bindir]) 412 1.1 christos AE_PPRINT_PROP_STRING([Libraries], [$report_libdir]) 413 1.1 christos 414