From: <sv...@op...> - 2024-07-22 19:06:37
|
Author: manx Date: Mon Jul 22 21:06:25 2024 New Revision: 21252 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21252 Log: [Imp] build: Makefile: Enable C++23 and C23 if available. Fixes <https://bugs.openmpt.org/view.php?id=1803> partially. Modified: trunk/OpenMPT/build/make/config-afl.mk trunk/OpenMPT/build/make/config-aocc.mk trunk/OpenMPT/build/make/config-clang.mk trunk/OpenMPT/build/make/config-djgpp.mk trunk/OpenMPT/build/make/config-emscripten.mk trunk/OpenMPT/build/make/config-gcc.mk trunk/OpenMPT/build/make/config-icx.mk trunk/OpenMPT/build/make/config-mingw-w64.mk trunk/OpenMPT/build/make/config-mingw.mk trunk/OpenMPT/build/make/config-mingw32crt.mk trunk/OpenMPT/build/make/config-standard.mk trunk/OpenMPT/build/make/config-unknown.mk Modified: trunk/OpenMPT/build/make/config-afl.mk ============================================================================== --- trunk/OpenMPT/build/make/config-afl.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-afl.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,9 +14,12 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -pthread -# We do not enable C++20 for fuzzer builds, because it prevents detecting -# shifting of signed values which changed from undefined to defined behaviour -# in C++20. As we still support C++17, we need to catch these problem cases. +# We do not enable C++20 or C++23 for fuzzer builds, because it prevents +# detecting shifting of signed values which changed from undefined to defined +# behaviour in C++20 and C++23. As we still support C++17, we need to catch +# these problem cases. +#else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +#CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti -pthread #else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) #CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti -pthread else @@ -24,6 +27,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 -pthread else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 -pthread else Modified: trunk/OpenMPT/build/make/config-aocc.mk ============================================================================== --- trunk/OpenMPT/build/make/config-aocc.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-aocc.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -pthread +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti -pthread else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti -pthread else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 -pthread else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 -pthread else Modified: trunk/OpenMPT/build/make/config-clang.mk ============================================================================== --- trunk/OpenMPT/build/make/config-clang.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-clang.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -pthread +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti -pthread else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti -pthread else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 -pthread else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 -pthread else Modified: trunk/OpenMPT/build/make/config-djgpp.mk ============================================================================== --- trunk/OpenMPT/build/make/config-djgpp.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-djgpp.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -19,6 +19,8 @@ # mode, because otherwise DJGPP-specific headers/functions are unavailable. ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -fpermissive +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=gnu++23 -fexceptions -frtti -fpermissive else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=gnu++20 -fexceptions -frtti -fpermissive else @@ -26,6 +28,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=gnu23 +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu20 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c20' ; fi ), c20) +CFLAGS_STDC = -std=gnu20 else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=gnu17 else Modified: trunk/OpenMPT/build/make/config-emscripten.mk ============================================================================== --- trunk/OpenMPT/build/make/config-emscripten.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-emscripten.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -19,6 +19,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 else @@ -26,6 +28,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 else Modified: trunk/OpenMPT/build/make/config-gcc.mk ============================================================================== --- trunk/OpenMPT/build/make/config-gcc.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-gcc.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -pthread +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti -pthread else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti -pthread else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 -pthread else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 -pthread else Modified: trunk/OpenMPT/build/make/config-icx.mk ============================================================================== --- trunk/OpenMPT/build/make/config-icx.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-icx.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti -pthread +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti -pthread else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti -pthread else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 -pthread +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 -pthread else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 -pthread else Modified: trunk/OpenMPT/build/make/config-mingw-w64.mk ============================================================================== --- trunk/OpenMPT/build/make/config-mingw-w64.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-mingw-w64.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -38,6 +38,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=c++23 -fexceptions -frtti else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=c++20 -fexceptions -frtti else @@ -45,6 +47,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=c23 +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=c18 else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=c17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=c17 else Modified: trunk/OpenMPT/build/make/config-mingw.mk ============================================================================== --- trunk/OpenMPT/build/make/config-mingw.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-mingw.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=gnu++23 -fexceptions -frtti else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=gnu++20 -fexceptions -frtti else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=gnu23 +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=gnu18 else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=gnu17 else Modified: trunk/OpenMPT/build/make/config-mingw32crt.mk ============================================================================== --- trunk/OpenMPT/build/make/config-mingw32crt.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-mingw32crt.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -14,6 +14,8 @@ ifneq ($(STDCXX),) CXXFLAGS_STDCXX = -std=$(STDCXX) -fexceptions -frtti +else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++23 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++23' ; fi ), c++23) +CXXFLAGS_STDCXX = -std=gnu++23 -fexceptions -frtti else ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=gnu++20 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++20' ; fi ), c++20) CXXFLAGS_STDCXX = -std=gnu++20 -fexceptions -frtti else @@ -21,6 +23,10 @@ endif ifneq ($(STDC),) CFLAGS_STDC = -std=$(STDC) +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu23 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c23' ; fi ), c23) +CFLAGS_STDC = -std=gnu23 +else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu18 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c18' ; fi ), c18) +CFLAGS_STDC = -std=gnu18 else ifeq ($(shell printf '\n' > bin/empty.c ; if $(CC) -std=gnu17 -c bin/empty.c -o bin/empty.out > /dev/null 2>&1 ; then echo 'c17' ; fi ), c17) CFLAGS_STDC = -std=gnu17 else Modified: trunk/OpenMPT/build/make/config-standard.mk ============================================================================== --- trunk/OpenMPT/build/make/config-standard.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-standard.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -12,7 +12,11 @@ AR = ar endif +#CXXFLAGS_STDCXX = -std=c++23 +#CXXFLAGS_STDCXX = -std=c++20 CXXFLAGS_STDCXX = -std=c++17 +#CFLAGS_STDC = -std=c23 +#CFLAGS_STDC = -std=c18 CFLAGS_STDC = -std=c17 CXXFLAGS += $(CXXFLAGS_STDCXX) CFLAGS += $(CFLAGS_STDC) Modified: trunk/OpenMPT/build/make/config-unknown.mk ============================================================================== --- trunk/OpenMPT/build/make/config-unknown.mk Mon Jul 22 20:49:19 2024 (r21251) +++ trunk/OpenMPT/build/make/config-unknown.mk Mon Jul 22 21:06:25 2024 (r21252) @@ -12,7 +12,12 @@ AR = ar endif +#CXXFLAGS_STDCXX = -std=c++23 +#CXXFLAGS_STDCXX = -std=c++20 CXXFLAGS_STDCXX = -std=c++17 +#CFLAGS_STDC = -std=c23 +#CFLAGS_STDC = -std=c18 +#CFLAGS_STDC = -std=c17 CFLAGS_STDC = -std=c11 CXXFLAGS += $(CXXFLAGS_STDCXX) CFLAGS += $(CFLAGS_STDC) |