Fix XLC flags with LLVM front-end

pull/748/head
Jeffrey Walton 2018-11-14 20:01:05 -05:00
parent 5b9b9b8d08
commit 7bd02896a0
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
1 changed files with 111 additions and 163 deletions

View File

@ -593,184 +593,132 @@ endif
ifneq ($(IS_PPC32)$(IS_PPC64),00) ifneq ($(IS_PPC32)$(IS_PPC64),00)
ifeq ($(DETECT_FEATURES),1) ifeq ($(DETECT_FEATURES),1)
# GCC and some compatibles ifeq ($(XLC_COMPILER),1)
ifneq ($(GCC_COMPILER)$(CLANG_COMPILER),00) POWER9_FLAG = -qarch=pwr9 -qaltivec
POWER8_FLAG = -qarch=pwr8 -qaltivec
TPROG = TestPrograms/test_ppc_power8.cxx POWER7_FLAG = -qarch=pwr7 -qaltivec
TOPT = -mcpu=power8 -maltivec POWER6_FLAG = -qarch=pwr6 -qaltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT)) POWER5_FLAG = -qarch=pwr5 -qaltivec
ifeq ($(HAVE_OPT),0) POWER4_FLAG = -qarch=pwr4 -qaltivec
POWER8_FLAG = -mcpu=power8 -maltivec else
AES_FLAG = $(POWER8_FLAG) POWER9_FLAG = -mcpu=power9 -maltivec
BLAKE2B_FLAG = $(POWER8_FLAG) POWER8_FLAG = -mcpu=power8 -maltivec
BLAKE2S_FLAG = $(POWER8_FLAG) POWER7_FLAG = -mcpu=power7 -maltivec
CHACHA_FLAG = $(POWER8_FLAG) POWER6_FLAG = -mcpu=power6 -maltivec
GCM_FLAG = $(POWER8_FLAG) POWER5_FLAG = -mcpu=power5 -maltivec
SHA_FLAG = $(POWER8_FLAG) POWER4_FLAG = -mcpu=power4 -maltivec
SM4_FLAG = $(POWER8_FLAG)
SIMON64_FLAG = $(POWER8_FLAG)
SIMON128_FLAG = $(POWER8_FLAG)
SPECK64_FLAG = $(POWER8_FLAG)
SPECK128_FLAG = $(POWER8_FLAG)
endif
TPROG = TestPrograms/test_ppc_power7.cxx
TOPT = -mcpu=power7 -maltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
POWER7_FLAG = -mcpu=power7 -maltivec
ARIA_FLAG = $(POWER7_FLAG)
BLAKE2S_FLAG = $(POWER7_FLAG)
CHACHA_FLAG = $(POWER7_FLAG)
CHAM_FLAG = $(POWER7_FLAG)
LEA_FLAG = $(POWER7_FLAG)
SIMECK_FLAG = $(POWER7_FLAG)
SIMON64_FLAG = $(POWER7_FLAG)
SPECK64_FLAG = $(POWER7_FLAG)
endif
TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = -mcpu=power4 -maltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -mcpu=power4 -maltivec
else
TOPT = -mcpu=power5 -maltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -mcpu=power5 -maltivec
else
TOPT = -mcpu=power6 -maltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -mcpu=power6 -maltivec
endif
endif
endif
# Drop SIMON64 and SPECK64 to Power4 if Power7 not available
ifeq ($(SIMON64_FLAG)$(SPECK64_FLAG),)
SIMON64_FLAG = $(ALTIVEC_FLAG)
SPECK64_FLAG = $(ALTIVEC_FLAG)
endif
# Drop ChaCha to Power4 if Power7 and Power8 not available
ifeq ($(CHACHA_FLAG),)
CHACHA_FLAG = $(ALTIVEC_FLAG)
endif
# GCC and some compatibles
endif endif
# IBM XL C/C++ # XLC with LLVM front-ends failed to define XLC defines.
ifeq ($(XLC_COMPILER),1) ifeq ($(findstring -qxlcompatmacros,$(CXXFLAGS)),)
# LLVM front-ends only provide POWER8 and need special options to
# get XLC defines. The POWER8 really jambs us up for ppc_simd.cpp
# which needs ALTIVEC/POWER4. We have similar problems with POWER7.
ifeq ($(findstring -qxlcompatmacros,$(CXXFLAGS)),)
TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = -qxlcompatmacros
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
CXXFLAGS += -qxlcompatmacros
endif
endif
TPROG = TestPrograms/test_ppc_power8.cxx
TOPT = -qarch=pwr8 -qaltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
POWER8_FLAG = -qarch=pwr8 -qaltivec
AES_FLAG = $(POWER8_FLAG)
BLAKE2B_FLAG = $(POWER8_FLAG)
BLAKE2S_FLAG = $(POWER8_FLAG)
CHACHA_FLAG = $(POWER8_FLAG)
GCM_FLAG = $(POWER8_FLAG)
SHA_FLAG = $(POWER8_FLAG)
SM4_FLAG = $(POWER8_FLAG)
SIMON64_FLAG = $(POWER8_FLAG)
SIMON128_FLAG = $(POWER8_FLAG)
SPECK64_FLAG = $(POWER8_FLAG)
SPECK128_FLAG = $(POWER8_FLAG)
endif
TPROG = TestPrograms/test_ppc_power7.cxx
TOPT = -qarch=pwr7 -qaltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
POWER7_FLAG = -qarch=pwr7 -qaltivec
ARIA_FLAG = $(POWER7_FLAG)
BLAKE2S_FLAG = $(POWER7_FLAG)
CHACHA_FLAG = $(POWER7_FLAG)
CHAM_FLAG = $(POWER7_FLAG)
LEA_FLAG = $(POWER7_FLAG)
SIMECK_FLAG = $(POWER7_FLAG)
SIMON64_FLAG = $(POWER7_FLAG)
SPECK64_FLAG = $(POWER7_FLAG)
endif
TPROG = TestPrograms/test_ppc_altivec.cxx TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = -qarch=pwr4 -qaltivec TOPT = -qxlcompatmacros
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT)) HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0) ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -qarch=pwr4 -qaltivec CXXFLAGS += -qxlcompatmacros
else
TOPT = -qarch=pwr5 -qaltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -qarch=pwr5 -qaltivec
else
TOPT = -qarch=pwr6 -qaltivec
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = -qarch=pwr6 -qaltivec
endif
endif
endif endif
endif
# LLVM front-end to XLC only provide Power8. It really jambs TPROG = TestPrograms/test_ppc_power8.cxx
# us up for ppc_simd.cpp which needs ALTIVEC/POWER4. We have TOPT = $(POWER9_FLAG)
# similar problems with POWER7. HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifneq ($(POWER8_FLAG),) ifeq ($(HAVE_OPT),0)
ifeq ($(POWER7_FLAG),) ALTIVEC_FLAG = $(POWER9_FLAG)
POWER7_FLAG = $(POWER8_FLAG) AES_FLAG = $(POWER9_FLAG)
ARIA_FLAG = $(POWER8_FLAG) BLAKE2B_FLAG = $(POWER9_FLAG)
BLAKE2B_FLAG = $(POWER8_FLAG) BLAKE2S_FLAG = $(POWER9_FLAG)
BLAKE2S_FLAG = $(POWER8_FLAG) CHACHA_FLAG = $(POWER9_FLAG)
CHACHA_FLAG = $(POWER8_FLAG) GCM_FLAG = $(POWER9_FLAG)
CHAM_FLAG = $(POWER8_FLAG) SHA_FLAG = $(POWER9_FLAG)
LEA_FLAG = $(POWER8_FLAG) SM4_FLAG = $(POWER9_FLAG)
SIMECK_FLAG = $(POWER8_FLAG) SIMON64_FLAG = $(POWER9_FLAG)
SIMON64_FLAG = $(POWER8_FLAG) SIMON128_FLAG = $(POWER9_FLAG)
SIMON128_FLAG = $(POWER8_FLAG) SPECK64_FLAG = $(POWER9_FLAG)
SPECK64_FLAG = $(POWER8_FLAG) SPECK128_FLAG = $(POWER9_FLAG)
SPECK128_FLAG = $(POWER8_FLAG) else
endif POWER9_FLAG =
ifeq ($(ALTIVEC_FLAG),) endif
ALTIVEC_FLAG = $(POWER8_FLAG)
endif
endif
# Drop SIMON64 and SPECK64 to Power4 if Power7 not available TPROG = TestPrograms/test_ppc_power8.cxx
ifeq ($(SIMON64_FLAG)$(SPECK64_FLAG),) TOPT = $(POWER8_FLAG)
SIMON64_FLAG = $(ALTIVEC_FLAG) HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
SPECK64_FLAG = $(ALTIVEC_FLAG) ifeq ($(HAVE_OPT),0)
endif ALTIVEC_FLAG = $(POWER8_FLAG)
AES_FLAG = $(POWER8_FLAG)
BLAKE2B_FLAG = $(POWER8_FLAG)
BLAKE2S_FLAG = $(POWER8_FLAG)
CHACHA_FLAG = $(POWER8_FLAG)
GCM_FLAG = $(POWER8_FLAG)
SHA_FLAG = $(POWER8_FLAG)
SM4_FLAG = $(POWER8_FLAG)
SIMON64_FLAG = $(POWER8_FLAG)
SIMON128_FLAG = $(POWER8_FLAG)
SPECK64_FLAG = $(POWER8_FLAG)
SPECK128_FLAG = $(POWER8_FLAG)
else
POWER8_FLAG =
endif
# Drop ChaCha to Power4 if Power7 and Power8 not available TPROG = TestPrograms/test_ppc_power7.cxx
ifeq ($(CHACHA_FLAG),) TOPT = $(POWER7_FLAG)
CHACHA_FLAG = $(ALTIVEC_FLAG) HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
endif ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = $(POWER7_FLAG)
ARIA_FLAG = $(POWER7_FLAG)
BLAKE2S_FLAG = $(POWER7_FLAG)
CHACHA_FLAG = $(POWER7_FLAG)
CHAM_FLAG = $(POWER7_FLAG)
LEA_FLAG = $(POWER7_FLAG)
SIMECK_FLAG = $(POWER7_FLAG)
SIMON64_FLAG = $(POWER7_FLAG)
SPECK64_FLAG = $(POWER7_FLAG)
else
POWER7_FLAG =
endif
# IBM XL C/C++ TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = $(POWER6_FLAG)
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = $(POWER6_FLAG)
else
POWER6_FLAG =
endif
TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = $(POWER5_FLAG)
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = $(POWER5_FLAG)
else
POWER5_FLAG =
endif
TPROG = TestPrograms/test_ppc_altivec.cxx
TOPT = $(POWER4_FLAG)
HAVE_OPT = $(shell $(CXX) $(CXXFLAGS) $(ZOPT) $(TOPT) $(TPROG) -o $(TOUT) 2>&1 | $(GREP) -i -c -E $(BAD_RESULT))
ifeq ($(HAVE_OPT),0)
ALTIVEC_FLAG = $(POWER4_FLAG)
else
POWER4_FLAG =
endif
# Drop SIMON64 and SPECK64 to Power4 if Power7 not available
ifeq ($(SIMON64_FLAG)$(SPECK64_FLAG)$(ALTIVEC_FLAG),$(ALTIVEC_FLAG))
SIMON64_FLAG = $(ALTIVEC_FLAG)
SPECK64_FLAG = $(ALTIVEC_FLAG)
endif
# Drop ChaCha to Power4 if Power7 and Power8 not available
ifeq ($(CHACHA_FLAG)$(ALTIVEC_FLAG),$(ALTIVEC_FLAG))
CHACHA_FLAG = $(ALTIVEC_FLAG)
endif endif
ifeq ($(ALTIVEC_FLAG),) ifeq ($(ALTIVEC_FLAG),)
CXXFLAGS += -DCRYPTOPP_DISABLE_ALTIVEC CXXFLAGS += -DCRYPTOPP_DISABLE_ALTIVEC
else ifeq ($(POWER7_FLAG),) else ifeq ($(POWER9_FLAG)$(POWER8_FLAG)$(POWER7_FLAG),)
CXXFLAGS += -DCRYPTOPP_DISABLE_POWER7 CXXFLAGS += -DCRYPTOPP_DISABLE_POWER7
else ifeq ($(POWER8_FLAG),) else ifeq ($(POWER9_FLAG)$(POWER8_FLAG),)
CXXFLAGS += -DCRYPTOPP_DISABLE_POWER8 CXXFLAGS += -DCRYPTOPP_DISABLE_POWER8
endif endif