############################################################################# # Software Testing Automation Framework (STAF) # # (C) Copyright IBM Corp. 2001 # # # # This software is licensed under the Eclipse Public License (EPL) V1.0. # ############################################################################# ######################### # Setup C/C++ variables # ######################### CC_CC := g++ CC_C := g++ -x c ifeq ($(OS_NAME),macosx) CC_MK_SHARED_LIB := g++ -dynamiclib else CC_MK_SHARED_LIB := g++ -shared endif GCC_VERSION := $(word 3,$(shell g++ --version)) GCC_MAJOR_VERSION := $(word 1,$(subst ., ,$(GCC_VERSION))) ifeq ($(BUILD_TYPE),retail) CC_BUILD_TYPE_FLAGS = $(CC_OPTIMIZE) -DNDEBUG else CC_BUILD_TYPE_FLAGS = $(CC_DEBUG) endif # Check if the operating system is Linux PPC64 Little Endian (LE) and if so, # set LINK_OBJS_FIRST = 1 if the gcc version is >= 4.6 ifeq ($(OS_NAME),linux-ppc64le) LINK_OBJS_FIRST := $(shell echo `gcc -dumpversion | cut -f1-2 -d.` \>= 4.6 | sed -e 's/\./*100+/g' | bc) else LINK_OBJS_FIRST := 0 endif CC_DEBUG := -g CC_OPTIMIZE := -O2 CC_FPIC := -fPIC CC_STL_PTHREADS := -D_PTHREADS CC_SHAREDLIBNAMEFLAGS = -DSTAF_SHARED_LIB_PREFIX=$(OS_SHARED_LIB_PREFIX) \ -DSTAF_SHARED_LIB_SUFFIX=$(OS_SHARED_LIB_SUFFIX) ifeq ($(OS_NAME),solaris) ifeq ($(BUILD_ARCH),SPARC64) CC_ARCHFLAGS = -m64 endif ifeq ($(BUILD_ARCH),x64-64) CC_ARCHFLAGS = -m64 endif else ifeq ($(OS_NAME),macosx) ifdef BUILD_ARCH ifeq ($(BUILD_ARCH),universal) CC_ARCHFLAGS = -arch i386 -arch x86_64 CC_DEPEND_IT = touch $@ CC_DEPEND_IT_C = touch $@ else CC_ARCHFLAGS = -arch $(BUILD_ARCH) endif endif endif endif CC_COMMONFLAGS = $(OS_COMMONFLAGS) $(COMMONFLAGS) $(CC_FPIC)\ $(CC_BUILD_TYPE_FLAGS) $(CC_SHAREDLIBNAMEFLAGS)\ $(CC_STL_PTHREADS) -DSTAF_NATIVE_COMPILER\ $(CC_ARCHFLAGS) CC_CFLAGS = $(CC_COMMONFLAGS) $(CFLAGS) CC_LINKFLAGS = $(CC_COMMONFLAGS) $(LINKFLAGS) CC_SHARED_LIB_LINKFLAGS = $(CC_COMMONFLAGS) $(LINKFLAGS) ifeq ($(GCC_MAJOR_VERSION),2) CC_SHARED_LIB_LINKFLAGS += -Wl,-Bsymbolic endif # CC_LINKFLAGS += -Wl,-rpath,$(ROOT_SOFTWARE)/lib CC_LINKFLAGS += -Wl,-rpath,$(ROOT_SOFTWARE)/lib64 CC_LINKFLAGS += -Wl,-rpath,$(INSTALL_PATH)/lib CC_LINKFLAGS += -Wl,-rpath,$(INSTALL_PATH)/lib/perl58 CC_LINKFLAGS += -Wl,--dynamic-linker=$(ROOT_SOFTWARE)/lib/ld-linux-x86-64.so.2 CC_SHARED_LIB_LINKFLAGS += -Wl,-rpath,$(ROOT_SOFTWARE)/lib CC_SHARED_LIB_LINKFLAGS += -Wl,-rpath,$(ROOT_SOFTWARE)/lib64 CC_SHARED_LIB_LINKFLAGS += -Wl,-rpath,$(INSTALL_PATH)/lib CC_SHARED_LIB_LINKFLAGS += -Wl,-rpath,$(INSTALL_PATH)/lib/perl58 CC_SHARED_LIB_LINKFLAGS += -Wl,--dynamic-linker=$(ROOT_SOFTWARE)/lib/ld-linux-x86-64.so.2 # ########################################## # Set commands needed by master makefile # ########################################## CC_DEPEND_IT ?= cd $(@D); $(CC_CC) -MM $(CC_CFLAGS) $(ALL_INCLUDEDIR_LIST) \ $< | sed -e 's@\(.*\)\.o:@$(@D)/\1.o $(@D)/\1.d:@' >$@ CC_DEPEND_IT_C ?= cd $(@D); $(CC_C) -MM $(CC_CFLAGS) $(ALL_INCLUDEDIR_LIST) \ $< | sed -e 's@\(.*\)\.o:@$(@D)/\1.o $(@D)/\1.d:@' >$@ CC_COMPILE_IT = $(CC_CC) -c -o $@ $(CC_CFLAGS) $(ALL_INCLUDEDIR_LIST) $< CC_COMPILE_IT_C = $(CC_C) -c -o $@ $(CC_CFLAGS) $(ALL_INCLUDEDIR_LIST) $< CC_LINK_IT = $(CC_CC) -o $@ $(CC_LINKFLAGS) $(ALL_INCLUDEDIR_LIST)\ $(ALL_LIBDIR_LIST) $(OBJS) $(ALL_LIB_LIST) CC_SHARED_LIB_IT = $(CC_MK_SHARED_LIB) -o $@ $(CC_SHARED_LIB_LINKFLAGS) \ $(ALL_INCLUDEDIR_LIST) $(ALL_LIBDIR_LIST) # On Linux PPC64 LE, when the gcc version >= 4.6, we need to change the link # order to prevent "java.lang.UnsatisfiedLinkError: JSTAFSH" due to undefined # symbols when using STAF Java Support (see Bug #1518 and Feature #743). # Note: This causes an issue linking STAF Python support so it needs to be # investigated further to see if there's a way to fix that as well. ifeq ($(LINK_OBJS_FIRST),1) CC_SHARED_LIB_IT += $(OBJS) $(ALL_LIB_LIST) else CC_SHARED_LIB_IT += $(ALL_LIB_LIST) $(OBJS) endif