Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 2 additions & 24 deletions cmake/dep-link.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -351,35 +351,13 @@ if (WITH_NETWORK)
list(APPEND NETWORK_PKG_STATUS "NAT(SLiRP)")
endif (WITH_SLIRP)

if (WITH_VMNET AND APPLE)
# CMAKE_OSX_DEPLOYMENT_TARGET is attractive, but not set by default.
# See what we're using, either by default or what the user has set.
check_c_source_compiles(
"
#include <Availability.h>
#if TARGET_OS_OSX && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
#error macOS too old
#endif
int main(int argc, char **argv) { return 0; }
" TARGETING_MACOS_10_10)
if (NOT TARGETING_MACOS_10_10)
message(FATAL_ERROR "vmnet.framework requires targeting macOS 10.10 or newer")
endif()

# vmnet requires blocks for its callback parameter, even in vanilla C.
# This is only supported in clang, not by GCC. It's default in clang,
# but we should be clear about it. Do a feature instead of compiler
# check anyways though, in case GCC does add it eventually.
check_c_compiler_flag(-fblocks HAVE_C_BLOCKS)
if (NOT HAVE_C_BLOCKS)
message(FATAL_ERROR "vmnet.framework requires blocks support in the C compiler")
endif()
if (WITH_VMNET AND VMNET_FOUND)
target_compile_options(simh_network INTERFACE -fblocks)

target_link_libraries(simh_network INTERFACE "-framework vmnet")
target_compile_definitions(simh_network INTERFACE HAVE_VMNET_NETWORK)
list(APPEND NETWORK_PKG_STATUS "macOS vmnet.framework")
endif(WITH_VMNET AND APPLE)
endif(WITH_VMNET AND VMNET_FOUND)

## Finally, set the network runtime
if (NOT network_runtime)
Expand Down
29 changes: 29 additions & 0 deletions cmake/dep-locate.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,35 @@ if (WITH_NETWORK)
find_package(VDE)
endif ()

if (WITH_VMNET AND APPLE)
# CMAKE_OSX_DEPLOYMENT_TARGET is attractive, but not set by default.
# See what we're using, either by default or what the user has set.
check_c_source_compiles(
"
#include <Availability.h>
#if TARGET_OS_OSX && __MAC_OS_X_VERSION_MIN_REQUIRED < 101000
#error macOS too old
#endif
int main(int argc, char **argv) { return 0; }
" TARGETING_MACOS_10_10)
if (NOT TARGETING_MACOS_10_10)
message(WARNING "vmnet.framework requires targeting macOS 10.10 or newer, skipping support")
endif()

# vmnet requires blocks for its callback parameter, even in vanilla C.
# This is only supported in clang, not by GCC. It's default in clang,
# but we should be clear about it. Do a feature instead of compiler
# check anyways though, in case GCC does add it eventually.
check_c_compiler_flag(-fblocks HAVE_C_BLOCKS)
if (NOT HAVE_C_BLOCKS)
message(WARNING "vmnet.framework requires blocks support in the C compiler, skipping support")
endif()

if (TARGETING_MACOS_10_10 AND HAVE_C_BLOCKS)
set(VMNET_FOUND TRUE)
endif()
endif()

## pcap is special: Headers only and dynamically loaded.
if (WITH_PCAP)
find_package(PCAP)
Expand Down
19 changes: 14 additions & 5 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1063,12 +1063,21 @@ ifeq (${WIN32},) #*nix Environments (&& cygwin)
NETWORK_CCDEFS += -DUSE_NETWORK
endif
endif
# XXX: Check for the target version of macOS, check for -fblocks
# XXX: Check for the target version of macOS
ifeq (Darwin,$(OSTYPE))
# Provide support for macOS vmnet.framework (requires 10.10)
NETWORK_CCDEFS += -fblocks -DHAVE_VMNET_NETWORK
NETWORK_LAN_FEATURES += vmnet.framework
NETWORK_LDFLAGS += -framework vmnet
# Check if blocks are supported
CC_HELP_OUTPUT_CMD = ${CC} --help 2>&1
CC_HELP_OUTPUT = $(shell $(CC_HELP_OUTPUT_CMD))
ifneq (,$(findstring -fblocks,$(CC_HELP_OUTPUT)))
# Provide support for macOS vmnet.framework (requires 10.10)
NETWORK_CCDEFS += -fblocks -DHAVE_VMNET_NETWORK
NETWORK_LAN_FEATURES += vmnet.framework
NETWORK_LDFLAGS += -framework vmnet
else
$(info *** Warning ***)
$(info *** Warning *** No blocks support in the compiler, vmnet.framework will be skipped)
$(info *** Warning ***)
endif
endif
ifeq (slirp,$(shell if ${TEST} -e slirp_glue/sim_slirp.c; then echo slirp; fi))
NETWORK_CCDEFS += -Islirp -Islirp_glue -Islirp_glue/qemu -DHAVE_SLIRP_NETWORK -DUSE_SIMH_SLIRP_DEBUG slirp/*.c slirp_glue/*.c
Expand Down