From patchwork Thu Mar 12 21:05:42 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Takuya ASADA X-Patchwork-Id: 4002 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 0A4815A5D; Thu, 12 Mar 2015 22:05:59 +0100 (CET) Received: from mail-pd0-f173.google.com (mail-pd0-f173.google.com [209.85.192.173]) by dpdk.org (Postfix) with ESMTP id 367E35A08 for ; Thu, 12 Mar 2015 22:05:57 +0100 (CET) Received: by pdjy10 with SMTP id y10so22991330pdj.8 for ; Thu, 12 Mar 2015 14:05:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=2e45c8e6ExODnZ9bYP4en90YK/J68Q92orRUzMHXFvI=; b=gVQ/yfhJdb7w3cnE2ZeZuc6xwOjKJypnw/l4EcWHo/s2qbwzXZXk5VvskkVU5Pk3JJ +2izPqDD0qSPVTVrN9WyNxDuYJlzOYD6HP/pl46X3Q/MysneGJH6sNDZmWcY6CWr1P8f MK9T++SaMhKCFTv0u4+9g6UTP0QN9hyvysLbiJn100MiZgczRmiD5aQG71eU2JNUtSKD sIJTtiRIMnqgeQgY3fxfv8riuXFuwxMQXfyw+JxvxAcTGgBI8urcF5Dt13Bk+xrUwasc Fyfj2MMxjcXpnRZABrVuQ2C3BDKbaHkAibKZ5RMN+XX40Vl6GAonc06Ph5kAKG0BiSzR Ou9g== X-Gm-Message-State: ALoCoQnU939G90dFhzFJTg+E+PoDWQwxjbFQKmZtEJXnRNr+Kp5pNnw1WO+b/D3j616li/0oSYVk X-Received: by 10.70.130.37 with SMTP id ob5mr48820029pdb.54.1426194356391; Thu, 12 Mar 2015 14:05:56 -0700 (PDT) Received: from localhost (7c295ef2.i-revonet.jp. [124.41.94.242]) by mx.google.com with ESMTPSA id c8sm25354pds.5.2015.03.12.14.05.55 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Mar 2015 14:05:55 -0700 (PDT) From: Takuya ASADA To: dev@dpdk.org Date: Fri, 13 Mar 2015 06:05:42 +0900 Message-Id: <1426194348-4406-2-git-send-email-syuu@cloudius-systems.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1426194348-4406-1-git-send-email-syuu@cloudius-systems.com> References: <1426194348-4406-1-git-send-email-syuu@cloudius-systems.com> Subject: [dpdk-dev] [RFC PATCH 1/7] mk: support compiling C++ code X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Since OSv is written in C++, we need to write OSv EAL in C++. To do so, we need to compile .cc files by $(CXX). This patch does not contain diff for clang and icc, but OSv EAL does not supported these toolchain, this is enough for now. Signed-off-by: Takuya ASADA --- mk/internal/rte.compile-pre.mk | 41 ++++++++++++++++++++++++++++++++++++++--- mk/target/generic/rte.vars.mk | 4 ++++ mk/toolchain/gcc/rte.vars.mk | 5 ++++- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/mk/internal/rte.compile-pre.mk b/mk/internal/rte.compile-pre.mk index b9bff4a..142f996 100644 --- a/mk/internal/rte.compile-pre.mk +++ b/mk/internal/rte.compile-pre.mk @@ -37,7 +37,7 @@ SRCS-all := $(SRCS-y) $(SRCS-n) $(SRCS-) # convert source to obj file src2obj = $(strip $(patsubst %.c,%.o,\ - $(patsubst %.S,%_s.o,$(1)))) + $(patsubst %.S,%_s.o,$(patsubst %.cc,%.o,$(1))))) # add a dot in front of the file name dotfile = $(strip $(foreach f,$(1),\ @@ -46,12 +46,12 @@ dotfile = $(strip $(foreach f,$(1),\ # convert source/obj files into dot-dep filename (does not # include .S files) src2dep = $(strip $(call dotfile,$(patsubst %.c,%.o.d, \ - $(patsubst %.S,,$(1))))) + $(patsubst %.S,,$(patsubst %.cc,%.o.d,$(1)))))) obj2dep = $(strip $(call dotfile,$(patsubst %.o,%.o.d,$(1)))) # convert source/obj files into dot-cmd filename src2cmd = $(strip $(call dotfile,$(patsubst %.c,%.o.cmd, \ - $(patsubst %.S,%_s.o.cmd,$(1))))) + $(patsubst %.S,%_s.o.cmd,$(patsubst %.cc,%.o.cmd,$(1)))))) obj2cmd = $(strip $(call dotfile,$(patsubst %.o,%.o.cmd,$(1)))) OBJS-y := $(call src2obj,$(SRCS-y)) @@ -78,11 +78,19 @@ C_TO_O = $(HOSTCC) -Wp,-MD,$(call obj2dep,$(@)).tmp $(HOST_CFLAGS) \ $(CFLAGS_$(@)) $(HOST_EXTRA_CFLAGS) -o $@ -c $< C_TO_O_STR = $(subst ','\'',$(C_TO_O)) #'# fix syntax highlight C_TO_O_DISP = $(if $(V),"$(C_TO_O_STR)"," HOSTCC $(@)") +CXX_TO_O = $(HOSTCXX) -Wp,-MD,$(call obj2dep,$(@)).tmp $(HOST_CXXFLAGS) \ + $(CXXFLAGS_$(@)) $(HOST_EXTRA_CXXFLAGS) -o $@ -c $< +CXX_TO_O_STR = $(subst ','\'',$(CXX_TO_O)) #'# fix syntax highlight +CXX_TO_O_DISP = $(if $(V),"$(CXX_TO_O_STR)"," HOSTCXX $(@)") else C_TO_O = $(CC) -Wp,-MD,$(call obj2dep,$(@)).tmp $(CFLAGS) \ $(CFLAGS_$(@)) $(EXTRA_CFLAGS) -o $@ -c $< C_TO_O_STR = $(subst ','\'',$(C_TO_O)) #'# fix syntax highlight C_TO_O_DISP = $(if $(V),"$(C_TO_O_STR)"," CC $(@)") +CXX_TO_O = $(CXX) -Wp,-MD,$(call obj2dep,$(@)).tmp $(CXXFLAGS) \ + $(CXXFLAGS_$(@)) $(EXTRA_CXXFLAGS) -o $@ -c $< +CXX_TO_O_STR = $(subst ','\'',$(CXX_TO_O)) #'# fix syntax highlight +CXX_TO_O_DISP = $(if $(V),"$(CXX_TO_O_STR)"," CXX $(@)") endif C_TO_O_CMD = 'cmd_$@ = $(C_TO_O_STR)' C_TO_O_DO = @set -e; \ @@ -91,6 +99,13 @@ C_TO_O_DO = @set -e; \ echo $(C_TO_O_CMD) > $(call obj2cmd,$(@)) && \ sed 's,'$@':,dep_'$@' =,' $(call obj2dep,$(@)).tmp > $(call obj2dep,$(@)) && \ rm -f $(call obj2dep,$(@)).tmp +CXX_TO_O_CMD = 'cmd_$@ = $(CXX_TO_O_STR)' +CXX_TO_O_DO = @set -e; \ + echo $(CXX_TO_O_DISP); \ + $(CXX_TO_O) && \ + echo $(CXX_TO_O_CMD) > $(call obj2cmd,$(@)) && \ + sed 's,'$@':,dep_'$@' =,' $(call obj2dep,$(@)).tmp > $(call obj2dep,$(@)) && \ + rm -f $(call obj2dep,$(@)).tmp # return an empty string if string are equal compare = $(strip $(subst $(1),,$(2)) $(subst $(2),,$(1))) @@ -136,6 +151,26 @@ boolean = $(if $1,1,0) $(depfile_missing),\ $(depfile_newer)),\ $(C_TO_O_DO)) +# +# Compile .cc file if needed +# Note: dep_$$@ is from the .d file and DEP_$$@ can be specified by +# user (by default it is empty) +# +.SECONDEXPANSION: +%.o: %.cc $$(wildcard $$(dep_$$@)) $$(DEP_$$(@)) FORCE + @[ -d $(dir $@) ] || mkdir -p $(dir $@) + $(if $(D),\ + @echo -n "$< -> $@ " ; \ + echo -n "file_missing=$(call boolean,$(file_missing)) " ; \ + echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(CXX_TO_O))) " ; \ + echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \ + echo "depfile_newer=$(call boolean,$(depfile_newer))") + $(if $(or \ + $(file_missing),\ + $(call cmdline_changed,$(CXX_TO_O)),\ + $(depfile_missing),\ + $(depfile_newer)),\ + $(CXX_TO_O_DO)) # command to assemble a .S file to generate an object ifeq ($(USE_HOST),1) diff --git a/mk/target/generic/rte.vars.mk b/mk/target/generic/rte.vars.mk index 53650c3..47d845b 100644 --- a/mk/target/generic/rte.vars.mk +++ b/mk/target/generic/rte.vars.mk @@ -146,7 +146,11 @@ endif LDFLAGS += -L$(RTE_SDK_BIN)/lib endif +# copy CFLAGS to CXXFLAGS +CXXFLAGS := $(CFLAGS) + export CFLAGS export LDFLAGS +export CXXFLAGS endif diff --git a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk index 88f235c..4bdf2eb 100644 --- a/mk/toolchain/gcc/rte.vars.mk +++ b/mk/toolchain/gcc/rte.vars.mk @@ -39,6 +39,7 @@ # CC = $(CROSS)gcc +CXX = $(CROSS)g++ KERNELCC = $(CROSS)gcc CPP = $(CROSS)cpp # for now, we don't use as but nasm. @@ -54,8 +55,10 @@ GCOV = $(CROSS)gcov ifeq ("$(origin CC)", "command line") HOSTCC = $(CC) +HOSTCXX = $(CXX) else HOSTCC = gcc +HOSTCXX = gxx endif HOSTAS = as @@ -80,5 +83,5 @@ WERROR_FLAGS += -Wundef -Wwrite-strings # process cpu flags include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.toolchain-compat.mk -export CC AS AR LD OBJCOPY OBJDUMP STRIP READELF +export CC CXX AS AR LD OBJCOPY OBJDUMP STRIP READELF export TOOLCHAIN_CFLAGS TOOLCHAIN_LDFLAGS TOOLCHAIN_ASFLAGS