mk: shared libraries
Allow to build shared libraries (.so) instead of static ones (.a). Signed-off-by: Intel
This commit is contained in:
parent
6da94b7a92
commit
e25e4d7ef1
@ -150,7 +150,15 @@ static void rdtsc_prof_init(struct rdtsc_prof *p, const char *name)
|
||||
|
||||
static inline void rdtsc_prof_start(struct rdtsc_prof *p)
|
||||
{
|
||||
#ifdef __PIC__
|
||||
asm volatile (
|
||||
"mov %%ebx, %%edi\n"
|
||||
"cpuid\n"
|
||||
"xchgl %%ebx, %%edi;\n"
|
||||
: : : "%eax", "%edi", "%ecx", "%edx" );
|
||||
#else
|
||||
asm( "cpuid" : : : "%eax", "%ebx", "%ecx", "%edx" );
|
||||
#endif
|
||||
p->clk_start = rte_rdtsc();
|
||||
}
|
||||
|
||||
|
@ -73,6 +73,11 @@ CONFIG_RTE_TOOLCHAIN_GCC=y
|
||||
#
|
||||
CONFIG_RTE_FORCE_INTRINSICS=n
|
||||
|
||||
#
|
||||
# Compile to share library
|
||||
#
|
||||
CONFIG_RTE_BUILD_SHARED_LIB=n
|
||||
|
||||
#
|
||||
#
|
||||
# Compile libc directory
|
||||
|
@ -54,4 +54,5 @@ ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
|
||||
DIRS-$(CONFIG_RTE_LIBRTE_KNI) += librte_kni
|
||||
endif
|
||||
|
||||
include $(RTE_SDK)/mk/rte.sharelib.mk
|
||||
include $(RTE_SDK)/mk/rte.subdir.mk
|
||||
|
@ -190,17 +190,33 @@ rte_cpu_get_features(struct cpuid_parameters_t params)
|
||||
{
|
||||
int eax, ebx, ecx, edx; /* registers */
|
||||
|
||||
asm volatile ("cpuid"
|
||||
/* output */
|
||||
: "=a" (eax),
|
||||
"=b" (ebx),
|
||||
"=c" (ecx),
|
||||
"=d" (edx)
|
||||
/* input */
|
||||
: "a" (params.eax),
|
||||
"b" (params.ebx),
|
||||
"c" (params.ecx),
|
||||
"d" (params.edx));
|
||||
#ifndef __PIC__
|
||||
asm volatile ("cpuid"
|
||||
/* output */
|
||||
: "=a" (eax),
|
||||
"=b" (ebx),
|
||||
"=c" (ecx),
|
||||
"=d" (edx)
|
||||
/* input */
|
||||
: "a" (params.eax),
|
||||
"b" (params.ebx),
|
||||
"c" (params.ecx),
|
||||
"d" (params.edx));
|
||||
#else
|
||||
asm volatile (
|
||||
"mov %%ebx, %%edi\n"
|
||||
"cpuid\n"
|
||||
"xchgl %%ebx, %%edi;\n"
|
||||
: "=a" (eax),
|
||||
"=D" (ebx),
|
||||
"=c" (ecx),
|
||||
"=d" (edx)
|
||||
/* input */
|
||||
: "a" (params.eax),
|
||||
"D" (params.ebx),
|
||||
"c" (params.ecx),
|
||||
"d" (params.edx));
|
||||
#endif
|
||||
|
||||
switch (params.return_register) {
|
||||
case REG_EAX:
|
||||
|
@ -83,17 +83,33 @@ rte_atomic64_cmpset(volatile uint64_t *dst, uint64_t exp, uint64_t src)
|
||||
_exp.u64 = exp;
|
||||
_src.u64 = src;
|
||||
|
||||
#ifndef __PIC__
|
||||
asm volatile (
|
||||
MPLOCKED
|
||||
"cmpxchg8b (%[dst]);"
|
||||
"setz %[res];"
|
||||
: [res] "=a" (res) /* result in eax */
|
||||
: [dst] "S" (dst), /* esi */
|
||||
"b" (_src.l32), /* ebx */
|
||||
"c" (_src.h32), /* ecx */
|
||||
"a" (_exp.l32), /* eax */
|
||||
"d" (_exp.h32) /* edx */
|
||||
: "memory" ); /* no-clobber list */
|
||||
#else
|
||||
asm volatile (
|
||||
"mov %%ebx, %%edi\n"
|
||||
MPLOCKED
|
||||
"cmpxchg8b (%[dst]);"
|
||||
"setz %[res];"
|
||||
"xchgl %%ebx, %%edi;\n"
|
||||
: [res] "=a" (res) /* result in eax */
|
||||
: [dst] "S" (dst), /* esi */
|
||||
"b" (_src.l32), /* ebx */
|
||||
"D" (_src.l32), /* ebx */
|
||||
"c" (_src.h32), /* ecx */
|
||||
"a" (_exp.l32), /* eax */
|
||||
"d" (_exp.h32) /* edx */
|
||||
: "memory" ); /* no-clobber list */
|
||||
#endif
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -39,12 +39,20 @@
|
||||
#
|
||||
# examples for RTE_EXEC_ENV: linuxapp, baremetal
|
||||
#
|
||||
|
||||
ifeq ($(RTE_BUILD_SHARED_LIB),y)
|
||||
EXECENV_CFLAGS = -pthread -fPIC
|
||||
else
|
||||
EXECENV_CFLAGS = -pthread
|
||||
endif
|
||||
|
||||
EXECENV_LDFLAGS =
|
||||
EXECENV_LDLIBS = -lrt -lm
|
||||
EXECENV_ASFLAGS =
|
||||
|
||||
ifeq ($(RTE_BUILD_SHARED_LIB),y)
|
||||
EXECENV_LDLIBS += -lgcc_s
|
||||
endif
|
||||
|
||||
# force applications to link with gcc/icc instead of using ld
|
||||
LINK_USING_CC := 1
|
||||
|
||||
|
@ -38,6 +38,10 @@ include $(RTE_SDK)/mk/internal/rte.depdirs-pre.mk
|
||||
# VPATH contains at least SRCDIR
|
||||
VPATH += $(SRCDIR)
|
||||
|
||||
ifeq ($(RTE_BUILD_SHARED_LIB),y)
|
||||
LIB := $(patsubst %.a,%.so,$(LIB))
|
||||
endif
|
||||
|
||||
_BUILD = $(LIB)
|
||||
_INSTALL = $(INSTALL-FILES-y) $(SYMLINK-FILES-y) $(RTE_OUTPUT)/lib/$(LIB)
|
||||
_CLEAN = doclean
|
||||
@ -64,25 +68,50 @@ O_TO_A_DO = @set -e; \
|
||||
$(O_TO_A) && \
|
||||
echo $(O_TO_A_CMD) > $(call exe2cmd,$(@))
|
||||
|
||||
O_TO_S = $(LD) $(CPU_LDFLAGS) -z muldefs -share $(OBJS-y) -o $(LIB)
|
||||
O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
|
||||
O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)"," LD $(@)")
|
||||
O_TO_S_DO = @set -e; \
|
||||
echo $(O_TO_S_DISP); \
|
||||
$(O_TO_S) && \
|
||||
echo $(O_TO_S_CMD) > $(call exe2cmd,$(@))
|
||||
|
||||
-include .$(LIB).cmd
|
||||
|
||||
#
|
||||
# Archive objects in .a file if needed
|
||||
#
|
||||
ifeq ($(RTE_BUILD_SHARED_LIB),y)
|
||||
$(LIB): $(OBJS-y) $(DEP_$(LIB)) 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,$(O_TO_A_STR))) " ; \
|
||||
echo -n "cmdline_changed=$(call boolean,$(call cmdline_changed,$(O_TO_S_STR))) " ; \
|
||||
echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
|
||||
echo "depfile_newer=$(call boolean,$(depfile_newer)) ")
|
||||
$(if $(or \
|
||||
$(file_missing),\
|
||||
$(call cmdline_changed,$(O_TO_A_STR)),\
|
||||
$(call cmdline_changed,$(O_TO_S_STR)),\
|
||||
$(depfile_missing),\
|
||||
$(depfile_newer)),\
|
||||
$(O_TO_A_DO))
|
||||
$(O_TO_S_DO))
|
||||
else
|
||||
$(LIB): $(OBJS-y) $(DEP_$(LIB)) 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,$(O_TO_A_STR))) " ; \
|
||||
echo -n "depfile_missing=$(call boolean,$(depfile_missing)) " ; \
|
||||
echo "depfile_newer=$(call boolean,$(depfile_newer)) ")
|
||||
$(if $(or \
|
||||
$(file_missing),\
|
||||
$(call cmdline_changed,$(O_TO_A_STR)),\
|
||||
$(depfile_missing),\
|
||||
$(depfile_newer)),\
|
||||
$(O_TO_A_DO))
|
||||
endif
|
||||
|
||||
#
|
||||
# install lib in $(RTE_OUTPUT)/lib
|
||||
|
@ -63,6 +63,10 @@ ifneq ($(BUILDING_RTE_SDK),)
|
||||
RTE_TOOLCHAIN := $(CONFIG_RTE_TOOLCHAIN:"%"=%)
|
||||
RTE_TARGET := $(RTE_ARCH)-$(RTE_MACHINE)-$(RTE_EXEC_ENV)-$(RTE_TOOLCHAIN)
|
||||
RTE_SDK_BIN := $(RTE_OUTPUT)
|
||||
RTE_BUILD_SHARED_LIB := $(CONFIG_RTE_BUILD_SHARED_LIB:"%"=%)
|
||||
ifeq ($(RTE_BUILD_SHARED_LIB),)
|
||||
RTE_BUILD_SHARED_LIB := n
|
||||
endif
|
||||
endif
|
||||
|
||||
# RTE_TARGET is deducted from config when we are building the SDK.
|
||||
|
Loading…
Reference in New Issue
Block a user