initial import
This commit is contained in:
commit
a57db559e9
112
FindRAGEL.cmake
Normal file
112
FindRAGEL.cmake
Normal file
@ -0,0 +1,112 @@
|
||||
# - Find Ragel executable and provides macros to generate custom build rules
|
||||
# The module defines the following variables:
|
||||
#
|
||||
# RAGEL_EXECUTABLE - path to the bison program
|
||||
# RAGEL_VERSION - version of bison
|
||||
# RAGEL_FOUND - true if the program was found
|
||||
#
|
||||
# If ragel is found, the module defines the macros:
|
||||
#
|
||||
# RAGEL_TARGET(<Name> <RagelInp> <CodeOutput>
|
||||
# [COMPILE_FLAGS <string>])
|
||||
#
|
||||
# which will create a custom rule to generate a state machine. <RagelInp> is
|
||||
# the path to a Ragel file. <CodeOutput> is the name of the source file
|
||||
# generated by ragel. If COMPILE_FLAGS option is specified, the next
|
||||
# parameter is added in the bison command line.
|
||||
#
|
||||
# The macro defines a set of variables:
|
||||
# RAGEL_${Name}_DEFINED - true is the macro ran successfully
|
||||
# RAGEL_${Name}_INPUT - The input source file, an alias for <RagelInp>
|
||||
# RAGEL_${Name}_OUTPUT_SOURCE - The source file generated by ragel
|
||||
# RAGEL_${Name}_OUTPUT_HEADER - The header file generated by ragel
|
||||
# RAGEL_${Name}_OUTPUTS - The sources files generated by ragel
|
||||
# RAGEL_${Name}_COMPILE_FLAGS - Options used in the ragel command line
|
||||
#
|
||||
# ====================================================================
|
||||
# Example:
|
||||
#
|
||||
# find_package(RAGEL) # or e.g.: find_package(RAGEL 6.6 REQUIRED)
|
||||
# RAGEL_TARGET(MyMachine machine.rl ${CMAKE_CURRENT_BINARY_DIR}/machine.cc)
|
||||
# add_executable(Foo main.cc ${RAGEL_MyMachine_OUTPUTS})
|
||||
# ====================================================================
|
||||
|
||||
# 2014-02-09, Georg Sauthoff <mail@georg.so>
|
||||
#
|
||||
# I don't think that these few lines are even copyrightable material,
|
||||
# but I am fine with using the BSD/MIT/GPL license on it ...
|
||||
#
|
||||
# I've used following references:
|
||||
# http://www.cmake.org/cmake/help/v2.8.12/cmake.html
|
||||
# /usr/share/cmake/Modules/FindFLEX.cmake
|
||||
# /usr/share/cmake/Modules/FindBISON.cmake
|
||||
|
||||
# uses some features which are not available in 2.6
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
find_program(RAGEL_EXECUTABLE NAMES ragel DOC "path to the ragel executable")
|
||||
mark_as_advanced(RAGEL_EXECUTABLE)
|
||||
|
||||
if(RAGEL_EXECUTABLE)
|
||||
|
||||
execute_process(COMMAND ${RAGEL_EXECUTABLE} --version
|
||||
OUTPUT_VARIABLE RAGEL_version_output
|
||||
ERROR_VARIABLE RAGEL_version_error
|
||||
RESULT_VARIABLE RAGEL_version_result
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
if(${RAGEL_version_result} EQUAL 0)
|
||||
string(REGEX REPLACE "^Ragel State Machine Compiler version ([^ ]+) .*$"
|
||||
"\\1"
|
||||
RAGEL_VERSION "${RAGEL_version_output}")
|
||||
else()
|
||||
message(SEND_ERROR
|
||||
"Command \"${RAGEL_EXECUTABLE} --version\" failed with output:
|
||||
${RAGEL_version_error}")
|
||||
endif()
|
||||
|
||||
#============================================================
|
||||
# RAGEL_TARGET (public macro)
|
||||
#============================================================
|
||||
#
|
||||
macro(RAGEL_TARGET Name Input Output)
|
||||
set(RAGEL_TARGET_usage
|
||||
"RAGEL_TARGET(<Name> <Input> <Output> [COMPILE_FLAGS <string>]")
|
||||
if(${ARGC} GREATER 3)
|
||||
if(${ARGC} EQUAL 5)
|
||||
if("${ARGV3}" STREQUAL "COMPILE_FLAGS")
|
||||
set(RAGEL_EXECUTABLE_opts "${ARGV4}")
|
||||
separate_arguments(RAGEL_EXECUTABLE_opts)
|
||||
else()
|
||||
message(SEND_ERROR ${RAGEL_TARGET_usage})
|
||||
endif()
|
||||
else()
|
||||
message(SEND_ERROR ${RAGEL_TARGET_usage})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
get_filename_component(Dir "${Output}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY ${Dir})
|
||||
|
||||
add_custom_command(OUTPUT ${Output}
|
||||
COMMAND ${RAGEL_EXECUTABLE}
|
||||
ARGS ${RAGEL_EXECUTABLE_opts} -o${Output} ${Input}
|
||||
DEPENDS ${Input}
|
||||
COMMENT
|
||||
"[RAGEL][${Name}] Compiling state machine with Ragel ${RAGEL_VERSION}"
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
set(RAGEL_${Name}_DEFINED TRUE)
|
||||
set(RAGEL_${Name}_OUTPUTS ${Output})
|
||||
set(RAGEL_${Name}_INPUT ${Input})
|
||||
set(RAGEL_${Name}_COMPILE_FLAGS ${RAGEL_EXECUTABLE_opts})
|
||||
endmacro()
|
||||
|
||||
endif()
|
||||
|
||||
# use this include when module file is located under /usr/share/cmake/Modules
|
||||
#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
||||
# use this include when module file is located in build tree
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RAGEL REQUIRED_VARS RAGEL_EXECUTABLE
|
||||
VERSION_VAR RAGEL_VERSION)
|
21
canonical_host.cmake
Normal file
21
canonical_host.cmake
Normal file
@ -0,0 +1,21 @@
|
||||
macro (canonical_host)
|
||||
if (NOT __test_canonical_host)
|
||||
message (STATUS "checking the host CPU")
|
||||
|
||||
execute_process (
|
||||
COMMAND ${CMAKE_CXX_COMPILER} -dumpmachine
|
||||
RESULT_VARIABLE __canonical_host_result
|
||||
OUTPUT_VARIABLE __canonical_host_output
|
||||
)
|
||||
|
||||
if (${__canonical_host_result})
|
||||
message (FATAL_ERROR "unable to query for canonical host")
|
||||
endif (${__canonical_host_result})
|
||||
|
||||
string(REGEX MATCH "^([^-\]+)" HOST_CPU ${__canonical_host_output})
|
||||
|
||||
message (STATUS "checking the host CPU - found '${HOST_CPU}'")
|
||||
endif (NOT __test_canonical_host)
|
||||
|
||||
set (__test_canonical_host 1 INTERNAL)
|
||||
endmacro (canonical_host)
|
11
compile_flag.cmake
Normal file
11
compile_flag.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
macro (append_compile_flag _flag)
|
||||
string (MAKE_C_IDENTIFIER ${_flag} _name)
|
||||
|
||||
if (NOT __append_compile_flag_${_name})
|
||||
check_cxx_compiler_flag (${_flag} __append_compile_flag_${_name})
|
||||
if (__append_compile_flag_${_name})
|
||||
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flag}")
|
||||
set (__append_compile_flag_${_name} 1 INTERNAL)
|
||||
endif ()
|
||||
endif ()
|
||||
endmacro(append_compile_flag)
|
25
link_flag.cmake
Normal file
25
link_flag.cmake
Normal file
@ -0,0 +1,25 @@
|
||||
macro(check_link_flag variable flag)
|
||||
message (STATUS "checking linker flag ${flag}")
|
||||
|
||||
set (__check_linker_flag_old "${CMAKE_EXE_LINKER_FLAGS}" INTERNAL)
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${flag}")
|
||||
|
||||
try_compile (test_check_linker_flag
|
||||
"${CMAKE_BINARY_DIR}/CMakeTmp"
|
||||
SOURCES "${CMAKE_SOURCE_DIR}/cmake/test_link_flag.cpp")
|
||||
if (test_check_linker_flag)
|
||||
message (STATUS "checking linker flag ${flag} - found")
|
||||
set (${variable} 1)
|
||||
else(test_check_linker_flag)
|
||||
message (STATUS "checking linker flag ${flag} - not found")
|
||||
set (${variable} 0)
|
||||
endif(test_check_linker_flag)
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(append_link_flag flag)
|
||||
check_link_flag (__test_link_flag_${flag} ${flag})
|
||||
if (__test_link_flag_${flag})
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${__append_link_flag_old}")
|
||||
endif()
|
||||
endmacro()
|
25
nc_cxx.cmake
Normal file
25
nc_cxx.cmake
Normal file
@ -0,0 +1,25 @@
|
||||
include (compile_flag)
|
||||
include (test_restrict)
|
||||
|
||||
|
||||
###############################################################################
|
||||
append_compile_flag (-std=c++1z)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# find the gcc experimental filesystem library and append to libs if needed
|
||||
find_library(STDCXXFS NAMES stdc++fs)
|
||||
if (STDCXXFS)
|
||||
set(LIBS ${LIBS} ${STDCXXFS})
|
||||
endif (STDCXXFS)
|
||||
|
||||
|
||||
###############################################################################
|
||||
test_restrict(RESTRICT_KEYWORD)
|
||||
add_definitions("-Drestrict=${RESTRICT_KEYWORD}")
|
||||
|
||||
|
||||
###############################################################################
|
||||
append_compile_flag("-pipe")
|
||||
append_compile_flag("-fno-deduce-init-list")
|
||||
append_compile_flag("-fvisibility=hidden")
|
121
nc_optimisation.cmake
Normal file
121
nc_optimisation.cmake
Normal file
@ -0,0 +1,121 @@
|
||||
include (compile_flag)
|
||||
include (link_flag)
|
||||
include (canonical_host)
|
||||
|
||||
|
||||
###############################################################################
|
||||
option(ENABLE_LTO "enable link-time optimisation" OFF)
|
||||
|
||||
|
||||
##-----------------------------------------------------------------------------
|
||||
if (ENABLE_LTO)
|
||||
append_compile_flag("-flto")
|
||||
append_compile_flag("-fno-fat-lto-objects")
|
||||
append_link_flag("-fuse-linker-plugin")
|
||||
append_compile_flags("-fdevirtualize-at-ltrans")
|
||||
endif (ENABLE_LTO)
|
||||
|
||||
|
||||
###############################################################################
|
||||
option(ENABLE_FRAMEPOINTER "retain the framepointer even if optimising" OFF)
|
||||
|
||||
|
||||
##-----------------------------------------------------------------------------
|
||||
if (ENABLE_FRAMEPOINTER)
|
||||
append_compile_flags("-fno-omit-frame-pointer")
|
||||
endif (ENABLE_FRAMEPOINTER)
|
||||
|
||||
|
||||
###############################################################################
|
||||
canonical_host()
|
||||
|
||||
|
||||
##-----------------------------------------------------------------------------
|
||||
if (${HOST_CPU} STREQUAL "x86_64")
|
||||
append_compile_flag(-mtune=generic)
|
||||
append_compile_flag(-msse)
|
||||
append_compile_flag(-msse2)
|
||||
append_compile_flag(-msahf)
|
||||
elseif (${HOST_CPU} STREQUAL "i686")
|
||||
append_compile_flag(-march=prescott)
|
||||
append_compile_flag(-mtune=generic)
|
||||
append_compile_flag(-mcmov)
|
||||
append_compile_flag(-mfpmath=sse)
|
||||
else ()
|
||||
message (FATAL_ERROR "unknown HOST_CPU '${HOST_CPU}'")
|
||||
endif ()
|
||||
|
||||
|
||||
###############################################################################
|
||||
if (CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||
else()
|
||||
append_compile_flag(-ftree-vectorize)
|
||||
|
||||
# clang vectorisation
|
||||
append_compile_flag(-fvectorize)
|
||||
append_compile_flag(-fslp-vectorize)
|
||||
append_compile_flag(-fslp-vectorize-aggressive)
|
||||
|
||||
# loop hosting/distribution
|
||||
append_compile_flag(-floop-nest-optimize)
|
||||
|
||||
append_compile_flag(-ftree-loop-distribution)
|
||||
append_compile_flag(-ftree-loop-distribute-patterns)
|
||||
append_compile_flag(-ftree-loop-im)
|
||||
append_compile_flag(-ftree-loop-if-convert-stores)
|
||||
|
||||
append_compile_flag(-fivopts)
|
||||
|
||||
append_compile_flag(-funsafe-loop-optimizations)
|
||||
append_compile_flag(-floop-interchange)
|
||||
|
||||
append_compile_flag(-fpredictive-commoning)
|
||||
append_compile_flag(-funswitch-loops)
|
||||
|
||||
# options that require substantial time/memory
|
||||
# GCC: ipa-pta can produce broken code when using LTO
|
||||
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu" ||
|
||||
# test "x$enable_lto" != "xyes"], [
|
||||
# AX_APPEND_COMPILE_FLAGS([-fipa-pta])
|
||||
#])
|
||||
|
||||
# safety removal for performance
|
||||
append_compile_flag(-fno-stack-protector)
|
||||
endif()
|
||||
|
||||
|
||||
###############################################################################
|
||||
if (CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||
else ()
|
||||
append_compile_flag(-fdevirtualize)
|
||||
append_compile_flag(-fdevirtualize-speculatively)
|
||||
|
||||
check_link_flag(TEST_GC_SECTIONS, "-Wl,--gc-sections")
|
||||
if (TEST_LD_GC_SECTIONS)
|
||||
append_compile_flag(-fdata-sections)
|
||||
append_compile_flag(-ffunction-sections)
|
||||
append_link_flag("-Wl,--gc-sections")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
###############################################################################
|
||||
if (CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||
add_definitions(-DENABLE_DEBUGGING)
|
||||
add_definitions(-D_GLIBCXX_DEBUG)
|
||||
|
||||
append_compile_flag(-O0)
|
||||
append_compile_flag(-Werror)
|
||||
# this was protected for xmingw32, find out why
|
||||
append_compile_flag(-fstack-protector)
|
||||
else ()
|
||||
append_compile_flag(-O2)
|
||||
append_compile_flag(-fno-rtti)
|
||||
add_definitions(-DNO_RTTI)
|
||||
add_definitions(-DNDEBUG)
|
||||
endif ()
|
||||
|
||||
|
||||
###############################################################################
|
||||
append_compile_flag(-g)
|
||||
append_compile_flag(-ggdb)
|
31
nc_platform.cmake
Normal file
31
nc_platform.cmake
Normal file
@ -0,0 +1,31 @@
|
||||
include (compile_flag)
|
||||
include (link_flag)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# attempt to detect platforms that aren't super common
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set(LINUX 1)
|
||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||
set(FREEBSD 1)
|
||||
else()
|
||||
message (FATAL_ERROR "unknown platform")
|
||||
endif()
|
||||
|
||||
|
||||
###############################################################################
|
||||
# apply useful, non-obvious, default settings for each platform
|
||||
if (WINDOWS)
|
||||
add_definitions("-DWIN32_LEAN_AND_MEAN")
|
||||
endif(WINDOWS)
|
||||
|
||||
if (FREEBSD)
|
||||
append_compile_flag("-I/usr/local/include")
|
||||
append_link_flag("-L/usr/local/lib")
|
||||
endif (FREEBSD)
|
||||
|
||||
|
||||
###############################################################################
|
||||
# general platform assistance settings
|
||||
append_link_flag("-fno-common")
|
||||
append_link_flag("-fno-nonansi-builtins")
|
87
nc_warnings.cmake
Normal file
87
nc_warnings.cmake
Normal file
@ -0,0 +1,87 @@
|
||||
include (compile_flag)
|
||||
|
||||
append_compile_flag(-Wall)
|
||||
append_compile_flag(-Wextra)
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# General warnings
|
||||
append_compile_flag(-Wbool-compare)
|
||||
append_compile_flag(-Wcast-align)
|
||||
append_compile_flag(-Wcast-qual)
|
||||
append_compile_flag(-Wdisabled-optimization)
|
||||
append_compile_flag(-Wfloat-conversion)
|
||||
append_compile_flag(-Wfloat-equal)
|
||||
append_compile_flag(-Wno-aggressive-loop-optimizations)
|
||||
append_compile_flag(-Wnoexcept)
|
||||
append_compile_flag(-Wnon-virtual-dtor)
|
||||
append_compile_flag(-Wno-parentheses)
|
||||
append_compile_flag(-Wpointer-arith)
|
||||
append_compile_flag(-Wredundant-decls)
|
||||
append_compile_flag(-Wshadow)
|
||||
append_compile_flag(-Wsign-compare)
|
||||
append_compile_flag(-Wsign-promo)
|
||||
append_compile_flag(-Wstrict-aliasing)
|
||||
append_compile_flag(-Wstrict-overflow)
|
||||
append_compile_flag(-Wtype-limits)
|
||||
append_compile_flag(-Wunsafe-loop-optimizations)
|
||||
append_compile_flag(-Wunused-but-set-variable)
|
||||
append_compile_flag(-Wunused-parameter)
|
||||
append_compile_flag(-Wpessimizing-move)
|
||||
append_compile_flag(-Wswitch-enum)
|
||||
|
||||
# gcc-6.1.0 warnings
|
||||
append_compile_flag(-Wshift-negative-value)
|
||||
append_compile_flag(-Wnull-dereference)
|
||||
append_compile_flag(-Wduplicated-cond)
|
||||
|
||||
# useless-cast isn't usable on gcc-6.1 due to spurious warnings
|
||||
# see gcc#70844
|
||||
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu" || test "x$ax_cv_cxx_compiler_version" != "x6.1.0"], [
|
||||
append_compile_flag(-Wuseless-cast)
|
||||
#])
|
||||
|
||||
# clang 3.7.1 warnings
|
||||
append_compile_flag(-Wshorten-64-to-32)
|
||||
append_compile_flag(-Wdeprecated)
|
||||
append_compile_flag(-Wcovered-switch-default)
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Required extensions
|
||||
#AX_APPEND_COMPILE_FLAGS([-Wgnu-flexible-array-union-member], [], [-Werror])
|
||||
#AX_APPEND_COMPILE_FLAGS([-Wno-c99-extensions], [], [-Werror])
|
||||
#AX_APPEND_COMPILE_FLAGS([-Wno-vla-extension], [], [-Werror])
|
||||
append_compile_flag(-Wno-vla)
|
||||
append_compile_flag(-Wno-multichar)
|
||||
|
||||
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu"], [
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-c99-extensions], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-flexible-array-extensions], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-conditional-omitted-operand], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-empty-struct], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-flexible-array-union-member], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-gnu-zero-variadic-macro-arguments], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-vla-extension], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-zero-length-array], [], [-Werror])
|
||||
#])
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Excessive warnings
|
||||
append_compile_flag(-Wno-missing-braces)
|
||||
|
||||
#AS_IF([test "x$ax_cv_cxx_compiler_vendor" != "xgnu"], [
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-nested-anon-types], [], [-Werror])
|
||||
# AX_APPEND_COMPILE_FLAGS([-Wno-unused-const-variable], [], [-Werror])
|
||||
#])
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
option (ADVISORY "enable advisory warnings")
|
||||
|
||||
if (ADVISORY)
|
||||
append_compile_flag(-Winline)
|
||||
append_compile_flag(-Wsuggest-final-types)
|
||||
append_compile_flag(-Wsuggest-final-methods)
|
||||
append_compile_flag(-Wsuggest-override)
|
||||
append_compile_flag(-Wweak-vtables)
|
||||
append_compile_flag(-Wpadded)
|
||||
endif()
|
||||
|
39
search_libs.cmake
Normal file
39
search_libs.cmake
Normal file
@ -0,0 +1,39 @@
|
||||
# search a list of libraries for a given (C linkage) _symbol. returns the
|
||||
# required library in _variable, and defines HAVE_SYMBOL if it was found.
|
||||
macro(search_libs _variable _symbol)
|
||||
message (STATUS "searching for ${_symbol}")
|
||||
|
||||
try_compile(
|
||||
__search_libs_${_symbol}
|
||||
"${CMAKE_BINARY_DIR}/CMakeTmp"
|
||||
SOURCES "${CMAKE_SOURCE_DIR}/cmake/search_libs.cpp"
|
||||
COMPILE_DEFINITIONS "-DSYMBOL=${_symbol}")
|
||||
|
||||
if (NOT __search_libs_${_symbol})
|
||||
foreach (lib ${ARGN})
|
||||
if (NOT __search_libs_${_symbol}_last)
|
||||
message (STATUS "searching for ${_symbol} in ${lib}")
|
||||
try_compile(
|
||||
__search_libs_${_symbol}
|
||||
"${CMAKE_BINARY_DIR}/CMakeTmp"
|
||||
SOURCES "${CMAKE_SOURCE_DIR}/cmake/search_libs.cpp"
|
||||
LINK_LIBRARIES "-l${lib}"
|
||||
COMPILE_DEFINITIONS "-DSYMBOL=${_symbol}")
|
||||
set (__search_libs_${_symbol}_last ${lib})
|
||||
endif ()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if (__search_libs_${_symbol})
|
||||
if (__search_libs_${_symbol}_last)
|
||||
message (STATUS "searching for ${_symbol} - found (in ${__search_libs_${_symbol}_last})")
|
||||
else ()
|
||||
message (STATUS "searching for ${_symbol} - found")
|
||||
endif ()
|
||||
set (${_variable} __search_libs_${_symbol}_last)
|
||||
string (TOUPPER ${_symbol} upper_symbol)
|
||||
set (HAVE_${upper_symbol} 1)
|
||||
else ()
|
||||
message (STATUS "searching for ${_symbol} - not found")
|
||||
endif ()
|
||||
endmacro()
|
13
search_libs.cpp
Normal file
13
search_libs.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
extern "C" {
|
||||
extern void SYMBOL (void);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
SYMBOL ();
|
||||
}
|
1
test_link_flag.cpp
Normal file
1
test_link_flag.cpp
Normal file
@ -0,0 +1 @@
|
||||
int main (int argc, char **argv) { (void)argc; (void)argv; return 0; }
|
24
test_restrict.cmake
Normal file
24
test_restrict.cmake
Normal file
@ -0,0 +1,24 @@
|
||||
cmake_minimum_required(VERSION 3.7.1)
|
||||
|
||||
macro(test_restrict VARIABLE)
|
||||
if (NOT DEFINED TEST_${VARIABLE})
|
||||
message (STATUS "checking for restrict keyword")
|
||||
FOREACH(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict")
|
||||
IF (NOT TEST_${VARIABLE})
|
||||
TRY_COMPILE(
|
||||
TEST_${VARIABLE}
|
||||
"${CMAKE_BINARY_DIR}/CMakeTmp"
|
||||
SOURCES "${CMAKE_SOURCE_DIR}/cmake/test_restrict.cpp"
|
||||
COMPILE_DEFINITIONS "-DKEYWORD=${KEYWORD}")
|
||||
set(__test_restrict_last ${KEYWORD})
|
||||
ENDIF (NOT TEST_${VARIABLE})
|
||||
endforeach(KEYWORD)
|
||||
|
||||
if (TEST_${VARIABLE})
|
||||
message (STATUS "checking for restrict keyword - ${__test_restrict_last}")
|
||||
set(${VARIABLE} ${__test_restrict_last} CACHE INTERNAL "restrict keyword" FORCE)
|
||||
else (TEST_${VARIABLE})
|
||||
message (STATUS "checking for restrict keyword - not found")
|
||||
endif(TEST_${VARIABLE})
|
||||
endif(NOT DEFINED TEST_${VARIABLE})
|
||||
endmacro(test_restrict)
|
15
test_restrict.cpp
Normal file
15
test_restrict.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
typedef int * int_ptr;
|
||||
int foo (int_ptr KEYWORD ip) {
|
||||
return ip[0];
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv){
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
|
||||
int s[1];
|
||||
int * KEYWORD t = s;
|
||||
t[0] = 0;
|
||||
return foo(t);
|
||||
}
|
Loading…
Reference in New Issue
Block a user