Commit af17c1d4 authored by Nick Connolly's avatar Nick Connolly Committed by Tomasz Zawadzki
Browse files

mk: adjust options for mingw cross compilation



Check compiler target triplet for the strings 'windows' or 'mingw'
and set OS to Windows. If found, adjust basic parameters:

Set EXEEXT to indicate executables have .exe suffix.
Exclude 'relro' and 'now' flags which are not recognised on Windows.
Exclude 'noexecstack' flag which is not recognised on Windows.
Exclude -pthread flag because Windows doesn't have POSIX threads.
Include libssp.a to support stack-protector and _FORTIFY_SOURCE.

Signed-off-by: default avatarNick Connolly <nick.connolly@mayadata.io>
Change-Id: I94a45d3123ebc81f5529006fa07b05da897e5866
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6574


Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
parent b3139d71
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -69,10 +69,17 @@ endif
ifneq ($(filter freebsd%,$(TARGET_TRIPLET_WORDS)),)
OS = FreeBSD
endif
ifneq ($(filter mingw% windows%,$(TARGET_TRIPLET_WORDS)),)
OS = Windows
endif

TARGET_ARCHITECTURE ?= $(CONFIG_ARCH)
TARGET_MACHINE := $(firstword $(TARGET_TRIPLET_WORDS))

ifeq ($(OS),Windows)
EXEEXT = .exe
endif

COMMON_CFLAGS = -g $(C_OPT) -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wmissing-declarations -fno-strict-aliasing -I$(SPDK_ROOT_DIR)/include

ifneq ($(filter powerpc% ppc%,$(TARGET_MACHINE)),)
@@ -127,11 +134,15 @@ COMMON_CFLAGS += -fno-common

# Enable full RELRO - no lazy relocation (resolve everything at load time).
# This allows the GOT to be made read-only early in the loading process.
ifneq ($(OS),Windows)
LDFLAGS += -Wl,-z,relro,-z,now
endif

# Make the stack non-executable.
# This is the default in most environments, but it doesn't hurt to set it explicitly.
ifneq ($(OS),Windows)
LDFLAGS += -Wl,-z,noexecstack
endif

# Specify the linker to use
ifneq ($(LD_TYPE),)
@@ -253,8 +264,10 @@ ifneq (, $(SPDK_GIT_COMMIT))
COMMON_CFLAGS += -DSPDK_GIT_COMMIT=$(SPDK_GIT_COMMIT)
endif

ifneq ($(OS),Windows)
COMMON_CFLAGS += -pthread
LDFLAGS += -pthread
endif

CFLAGS   += $(COMMON_CFLAGS) -Wno-pointer-sign -Wstrict-prototypes -Wold-style-definition -std=gnu99
CXXFLAGS += $(COMMON_CFLAGS)
@@ -267,6 +280,11 @@ ifneq ($(CONFIG_NVME_CUSE)$(CONFIG_FUSE),nn)
SYS_LIBS += -lfuse3
endif

ifeq ($(OS).$(CC_TYPE),Windows.gcc)
# Include libssp.a for stack-protector and _FORTIFY_SOURCE
SYS_LIBS += -l:libssp.a
endif

MAKEFLAGS += --no-print-directory

C_SRCS += $(C_SRCS-y)