1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
|
# dynamips - configure options
# - DYNAMIPS_ARCH
# - DYNAMIPS_CODE
# - BUILD_NVRAM_EXPORT
# - BUILD_UDP_SEND (default OFF)
# - BUILD_UDP_RECV (default OFF)
# - ENABLE_LARGEFILE
# - ENABLE_LINUX_ETH
# - ENABLE_GEN_ETH
# - ENABLE_IPV6
# accumulators:
# - DYNAMIPS_FLAGS
# - DYNAMIPS_DEFINITIONS
# - DYNAMIPS_INCLUDES
# - DYNAMIPS_LIBRARIES
# XXX assumes utils.cmake and dependencies.cmake were included
message ( STATUS "configure - BEGIN" )
# DYNAMIPS_VERSION
set ( DYNAMIPS_VERSION "\"${DYNAMIPS_VERSION_TRAIN}${DYNAMIPS_VERSION_SUB}\"" )
list ( APPEND DYNAMIPS_DEFINITIONS "-DDYNAMIPS_VERSION=${DYNAMIPS_VERSION}" )
message ( STATUS "DYNAMIPS_VERSION=${DYNAMIPS_VERSION}" )
# Target architecture: (set in dependencies file)
# - Use "x86" to build for x86 (32-bit)
# - Use "amd64" to build for x86_64 (64-bit)
# - Use "nojit" to build for other architectures (no recompilation)
set ( JIT_ARCH "\"${DYNAMIPS_ARCH}\"" )
set ( JIT_CPU "CPU_${DYNAMIPS_ARCH}" )
set ( MIPS64_ARCH_INC_FILE "\"mips64_${DYNAMIPS_ARCH}_trans.h\"" )
set ( PPC32_ARCH_INC_FILE "\"ppc32_${DYNAMIPS_ARCH}_trans.h\"" )
list ( APPEND DYNAMIPS_DEFINITIONS "-DJIT_ARCH=${JIT_ARCH}" "-DJIT_CPU=${JIT_CPU}"
"-DMIPS64_ARCH_INC_FILE=${MIPS64_ARCH_INC_FILE}"
"-DPPC32_ARCH_INC_FILE=${PPC32_ARCH_INC_FILE}" )
if ( APPLE AND "amd64" STREQUAL "${DYNAMIPS_ARCH}" )
list ( APPEND DYNAMIPS_DEFINITIONS "-DMAC64HACK" )
endif()
print_variables ( DYNAMIPS_ARCH )
# Target code:
# - "stable"
# - "unstable"
# - "both" (stable + unstable)
# - "none"
if ( APPLE )
set ( _default "unstable" )
else ()
set ( _default "stable" )
endif ()
set ( DYNAMIPS_CODE "${_default}" CACHE STRING "Target code (stable;unstable;both;none)" )
set_property ( CACHE DYNAMIPS_ARCH PROPERTY STRINGS "stable" "unstable" "both" "none" )
if ( NOT DYNAMIPS_CODE )
set ( DYNAMIPS_CODE "${_default}" )
endif ()
if ( "stable" STREQUAL DYNAMIPS_CODE )
set ( BUILD_DYNAMIPS_STABLE ON )
set ( BUILD_DYNAMIPS_UNSTABLE OFF )
elseif ( "unstable" STREQUAL DYNAMIPS_CODE )
set ( BUILD_DYNAMIPS_STABLE OFF )
set ( BUILD_DYNAMIPS_UNSTABLE ON )
elseif ( "both" STREQUAL DYNAMIPS_CODE )
set ( BUILD_DYNAMIPS_STABLE ON )
set ( BUILD_DYNAMIPS_UNSTABLE ON )
elseif ( "none" STREQUAL DYNAMIPS_CODE )
set ( BUILD_DYNAMIPS_STABLE OFF )
set ( BUILD_DYNAMIPS_UNSTABLE OFF )
else ()
message ( FATAL_ERROR "unknown target code DYNAMIPS_CODE=${DYNAMIPS_CODE} (stable;unstable;both;none)" )
endif ()
print_variables ( DYNAMIPS_CODE BUILD_DYNAMIPS_STABLE BUILD_DYNAMIPS_UNSTABLE )
# Rename target (auto;stable;unstable;<empty>)
# XXX should auto or not renaming be the default?
set ( DYNAMIPS_RENAME "auto" CACHE STRING "which executable is renamed to dynamips (auto;stable;unstable;<empty>)" )
set_property ( CACHE DYNAMIPS_RENAME PROPERTY STRINGS "auto" "stable" "unstable" )
set ( DYNAMIPS_RENAME_TARGET )
if ( "auto" STREQUAL DYNAMIPS_RENAME )
foreach ( _target "${DYNAMIPS_CODE}" "stable" "unstable" )
string ( TOUPPER "BUILD_DYNAMIPS_${_target}" _var )
if ( ${_var} )
set ( DYNAMIPS_RENAME_TARGET "dynamips_${DYNAMIPS_ARCH}_${_target}" )
break ()
endif ()
endforeach ()
elseif ( "stable" STREQUAL DYNAMIPS_RENAME OR "unstable" STREQUAL DYNAMIPS_RENAME )
set ( DYNAMIPS_RENAME_TARGET "dynamips_${DYNAMIPS_ARCH}_${DYNAMIPS_RENAME}" )
elseif ( DYNAMIPS_RENAME )
message ( FATAL_ERROR "unknown rename target DYNAMIPS_RENAME=${DYNAMIPS_RENAME} (auto;stable;unstable;<empty>)" )
endif ()
print_variables ( DYNAMIPS_RENAME DYNAMIPS_RENAME_TARGET )
# other executables
option ( BUILD_NVRAM_EXPORT "build the nvram_export executable" ON )
option ( BUILD_UDP_SEND "build the udp_send executable" OFF )
option ( BUILD_UDP_RECV "build the udp_recv executable" OFF )
print_variables ( BUILD_NVRAM_EXPORT BUILD_UDP_SEND BUILD_UDP_RECV )
# ENABLE_LARGEFILE
if ( LIBELF_LARGEFILE )
option ( ENABLE_LARGEFILE "compile with large file support" ON )
endif ()
if ( ENABLE_LARGEFILE )
list ( APPEND DYNAMIPS_DEFINITIONS "-D_FILE_OFFSET_BITS=64"
"-D_LARGEFILE_SOURCE" "-D_LARGEFILE64_SOURCE" )
endif ( ENABLE_LARGEFILE )
# ENABLE_LINUX_ETH
if ( "Linux" STREQUAL "${CMAKE_SYSTEM_NAME}" )
option ( ENABLE_LINUX_ETH "Linux ethernet support with RAW sockets (linux_eth)" ON )
print_variables ( ENABLE_LINUX_ETH )
endif ()
if ( ENABLE_LINUX_ETH )
list ( APPEND DYNAMIPS_DEFINITIONS "-DLINUX_ETH" )
endif ()
# ENABLE_GEN_ETH
if ( HAVE_PCAP )
option ( ENABLE_GEN_ETH "Generic Ethernet support with libpcap/winpcap (gen_eth)" ON )
print_variables ( ENABLE_GEN_ETH )
endif ()
if ( ENABLE_GEN_ETH )
list ( APPEND DYNAMIPS_DEFINITIONS "-DGEN_ETH" )
list ( APPEND DYNAMIPS_LIBRARIES ${PCAP_LIBRARIES} )
endif ()
# ENABLE_IPV6
if ( HAVE_IPV6 )
option ( ENABLE_IPV6 "IPv6 support (RFC 2553)" ON )
print_variables ( ENABLE_IPV6 )
endif ()
if ( ENABLE_IPV6 )
list ( APPEND DYNAMIPS_DEFINITIONS "-DHAS_RFC2553=1" )
else ()
list ( APPEND DYNAMIPS_DEFINITIONS "-DHAS_RFC2553=0" )
endif ()
# target system
if ( "SunOS" STREQUAL "${CMAKE_SYSTEM_NAME}" )
list ( APPEND DYNAMIPS_DEFINITIONS "-DSUNOS" "-DINADDR_NONE=0xFFFFFFFF" )
endif ()
if ( CYGWIN )
list ( APPEND DYNAMIPS_DEFINITIONS "-DCYGWIN" )
endif ()
if ( "CYGWIN" STREQUAL "${CMAKE_SYSTEM_NAME}" )
# XXX maybe keep it as CYGWIN?
set ( OSNAME "Windows" )
elseif ( CMAKE_SYSTEM_NAME )
set ( OSNAME "${CMAKE_SYSTEM_NAME}" )
else ()
print_variables ( CMAKE_SYSTEM CMAKE_SYSTEM_NAME CMAKE_SYSTEM_PROCESSOR
CMAKE_SYSTEM_VERSION )
message ( WARNING "missing system name" )
set ( OSNAME "unknown" )
endif ()
list ( APPEND DYNAMIPS_DEFINITIONS "-DOSNAME=${OSNAME}" )
# final setup
include ( GNUInstallDirs )
set ( CMAKE_C_FLAGS )
foreach ( _flag ${DYNAMIPS_FLAGS} )
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flag}" )
endforeach ()
string ( STRIP "${CMAKE_C_FLAGS}" CMAKE_C_FLAGS )
add_definitions ( ${DYNAMIPS_DEFINITIONS} )
include_directories ( ${DYNAMIPS_INCLUDES} )
print_variables ( DYNAMIPS_FLAGS DYNAMIPS_DEFINITIONS DYNAMIPS_INCLUDES DYNAMIPS_LIBRARIES )
# summary
macro ( print_summary )
message ( "Summary:" )
message ( " CMAKE_INSTALL_PREFIX : ${CMAKE_INSTALL_PREFIX}" )
message ( " DYNAMIPS_ARCH : ${DYNAMIPS_ARCH}" )
message ( " DYNAMIPS_CODE : ${DYNAMIPS_CODE}" )
if ( DYNAMIPS_RENAME_TARGET )
set ( _rename "${DYNAMIPS_RENAME_TARGET} -> dynamips" )
else ()
set ( _rename "don't rename" )
endif ()
message ( " DYNAMIPS_RENAME : ${_rename} (${DYNAMIPS_RENAME})" )
message ( " BUILD_NVRAM_EXPORT : ${BUILD_NVRAM_EXPORT}" )
message ( " BUILD_UDP_SEND : ${BUILD_UDP_SEND}" )
message ( " BUILD_UDP_RECV : ${BUILD_UDP_RECV}" )
if ( DEFINED ENABLE_LARGEFILE )
set ( _largefile "ENABLE_LARGEFILE=${ENABLE_LARGEFILE}" )
else ()
set ( _largefile "libelf is incompatible" )
endif ()
message ( " Large File support : ${_largefile}" )
if ( DEFINED ENABLE_LINUX_ETH )
set ( _linux_eth "ENABLE_LINUX_ETH=${ENABLE_LINUX_ETH}" )
else ()
set ( _linux_eth "no, not Linux" )
endif ()
message ( " Linux Ethernet (RAW sockets) : ${_linux_eth} (linux_eth)" )
if ( DEFINED ENABLE_GEN_ETH )
set ( _gen_eth "ENABLE_GEN_ETH=${ENABLE_GEN_ETH}" )
else ()
set ( _gen_eth "libpcap/winpcap not found" )
endif ()
message ( " Generic Ethernet (libpcap/WinPcap) : ${_gen_eth} (gen_eth)" )
if ( DEFINED ENABLE_IPV6 )
set ( _ipv6 "ENABLE_IPV6=${ENABLE_IPV6}" )
else ()
set ( _ipv6 "no, missing headers or functions" )
endif ()
message ( " IPv6 support (RFC 2553) : ${_ipv6}" )
endmacro ( print_summary )
message ( STATUS "configure - END" )
|