diff --git a/.travis/script.sh b/.travis/script.sh index b8841d34e7..3216fd761e 100755 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -231,10 +231,10 @@ fi ############# if [ "${BUILDER}" == bazel ]; then echo 'travis_fold:start:build' - bazel build --curses=no --copt='-Wno-sign-compare' //...:all + bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all echo 'travis_fold:end:build' echo 'travis_fold:start:test' - bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all + bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all echo 'travis_fold:end:test' fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a28f8dbdd..bd04ab7dd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,10 @@ message(STATUS "${PROJECT_NAME} version: ${PROJECT_VERSION}") #message(STATUS "minor: ${PROJECT_VERSION_MINOR}") #message(STATUS "patch: ${PROJECT_VERSION_PATCH}") +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + # Default Build Type to be Release if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release" CACHE STRING diff --git a/bazel/README.md b/bazel/README.md index bf75a8795c..c3950f4b5f 100644 --- a/bazel/README.md +++ b/bazel/README.md @@ -28,5 +28,10 @@ OR-Tools depends on severals mandatory libraries. * Google Gtest, * GLPK (GNU Linear Programming Kit) +## Compilation +You must compile OR-Tools using C++17: +* on UNIX: `--cxxopt=-std=c++17` +* on Windows when using MSVC: `--cxxopt="-std:c++17"` + ## [Integrating OR-Tools in your Bazel Project](#integration) TODO diff --git a/bazel/docker/alpine/Dockerfile b/bazel/docker/alpine/Dockerfile index e0d59cd882..d2780c28af 100644 --- a/bazel/docker/alpine/Dockerfile +++ b/bazel/docker/alpine/Dockerfile @@ -13,7 +13,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/archlinux/Dockerfile b/bazel/docker/archlinux/Dockerfile index 822e0ebfff..fc82d70bba 100644 --- a/bazel/docker/archlinux/Dockerfile +++ b/bazel/docker/archlinux/Dockerfile @@ -12,7 +12,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/centos/Dockerfile b/bazel/docker/centos/Dockerfile index 5116b7f591..2bfd6120c2 100644 --- a/bazel/docker/centos/Dockerfile +++ b/bazel/docker/centos/Dockerfile @@ -23,7 +23,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/debian/Dockerfile b/bazel/docker/debian/Dockerfile index 5f95e985ba..ee4f2912ad 100644 --- a/bazel/docker/debian/Dockerfile +++ b/bazel/docker/debian/Dockerfile @@ -24,7 +24,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/fedora/Dockerfile b/bazel/docker/fedora/Dockerfile index 7bfe4012ec..2061196573 100644 --- a/bazel/docker/fedora/Dockerfile +++ b/bazel/docker/fedora/Dockerfile @@ -19,7 +19,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/opensuse/Dockerfile b/bazel/docker/opensuse/Dockerfile index 8ab0ee11e5..e326434a66 100644 --- a/bazel/docker/opensuse/Dockerfile +++ b/bazel/docker/opensuse/Dockerfile @@ -15,7 +15,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/bazel/docker/ubuntu/Dockerfile b/bazel/docker/ubuntu/Dockerfile index c66160027f..4bf0616da3 100644 --- a/bazel/docker/ubuntu/Dockerfile +++ b/bazel/docker/ubuntu/Dockerfile @@ -27,7 +27,7 @@ WORKDIR /home/lib COPY . . FROM devel as build -RUN bazel build --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel build --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all FROM build as test -RUN bazel test -c opt --curses=no --copt='-Wno-sign-compare' //...:all +RUN bazel test -c opt --curses=no --cxxopt=-std=c++17 --copt='-Wno-sign-compare' //...:all diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index e2afbf6f31..6499c1275b 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -184,11 +184,11 @@ target_include_directories(${PROJECT_NAME} INTERFACE # Compile options set_target_properties(${PROJECT_NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF ) -target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11) +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17) target_compile_definitions(${PROJECT_NAME} PUBLIC ${OR_TOOLS_COMPILE_DEFINITIONS}) target_compile_options(${PROJECT_NAME} PUBLIC ${OR_TOOLS_COMPILE_OPTIONS}) @@ -277,7 +277,7 @@ endforeach() #add_library(${PROJECT_NAME}_proto STATIC ${PROTO_SRCS} ${PROTO_HDRS}) add_library(${PROJECT_NAME}_proto OBJECT ${PROTO_SRCS} ${PROTO_HDRS}) set_target_properties(${PROJECT_NAME}_proto PROPERTIES POSITION_INDEPENDENT_CODE ON) -set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_STANDARD 11) +set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_STANDARD 17) set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_STANDARD_REQUIRED ON) set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_EXTENSIONS OFF) target_include_directories(${PROJECT_NAME}_proto PRIVATE diff --git a/cmake/dependencies/CMakeLists.txt b/cmake/dependencies/CMakeLists.txt index 8146121143..c2749866af 100644 --- a/cmake/dependencies/CMakeLists.txt +++ b/cmake/dependencies/CMakeLists.txt @@ -167,6 +167,9 @@ if(BUILD_Protobuf) message(CHECK_PASS "fetched") endif() +# Coin-OR does not support C++17 (use of 'register' storage class specifier) +set(CMAKE_CXX_STANDARD 11) + # ############################################################################## # Coinutils # ############################################################################## @@ -241,3 +244,5 @@ if(BUILD_Cbc) list(POP_BACK CMAKE_MESSAGE_INDENT) message(CHECK_PASS "fetched") endif() + +set(CMAKE_CXX_STANDARD 17) diff --git a/cmake/samples/cpp/CMakeLists.txt b/cmake/samples/cpp/CMakeLists.txt index b8b0489bf0..b51b0f5d61 100644 --- a/cmake/samples/cpp/CMakeLists.txt +++ b/cmake/samples/cpp/CMakeLists.txt @@ -5,7 +5,7 @@ include(CTest) find_package(ortools CONFIG REQUIRED) add_executable(sample main.cpp) -target_compile_features(sample PUBLIC cxx_std_11) +target_compile_features(sample PUBLIC cxx_std_17) set_target_properties(sample PROPERTIES VERSION ${PROJECT_VERSION}) target_link_libraries(sample PRIVATE ortools::ortools) diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 4ef8845a49..5b739e4b7f 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -54,7 +54,7 @@ foreach(EXECUTABLE weighted_tardiness_sat) add_executable(${EXECUTABLE} ${EXECUTABLE}.cc) target_include_directories(${EXECUTABLE} PUBLIC ${PARENT_SOURCE_DIR}) - target_compile_features(${EXECUTABLE} PRIVATE cxx_std_11) + target_compile_features(${EXECUTABLE} PRIVATE cxx_std_17) target_link_libraries(${EXECUTABLE} PRIVATE ortools::ortools) set_target_properties(${EXECUTABLE} PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) diff --git a/makefiles/Makefile.third_party.unix.mk b/makefiles/Makefile.third_party.unix.mk index cadaa3381d..1f5b7b417e 100644 --- a/makefiles/Makefile.third_party.unix.mk +++ b/makefiles/Makefile.third_party.unix.mk @@ -358,6 +358,8 @@ build_absl: dependencies/install/lib/libabsl.$L dependencies/install/lib/libabsl.$L: dependencies/sources/abseil-cpp-$(ABSL_TAG) | dependencies/install cd dependencies/sources/abseil-cpp-$(ABSL_TAG) && \ $(SET_COMPILER) $(CMAKE) -H. -Bbuild_cmake \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_PREFIX_PATH="$(OR_TOOLS_TOP)/dependencies/install" \ -DBUILD_SHARED_LIBS=OFF \ -DBUILD_STATIC_LIBS=ON \ diff --git a/makefiles/Makefile.third_party.win.mk b/makefiles/Makefile.third_party.win.mk index 90b9a39b77..15c4413835 100644 --- a/makefiles/Makefile.third_party.win.mk +++ b/makefiles/Makefile.third_party.win.mk @@ -403,6 +403,8 @@ dependencies/install/lib/absl.lib: dependencies/sources/abseil-cpp-$(ABSL_TAG) | cd dependencies\sources\abseil-cpp-$(ABSL_TAG) && \ set MAKEFLAGS= && \ "$(CMAKE)" -H. -Bbuild_cmake \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_PREFIX_PATH=..\..\install \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF \ diff --git a/makefiles/Makefile.unix.mk b/makefiles/Makefile.unix.mk index 754624db38..7531bd534c 100644 --- a/makefiles/Makefile.unix.mk +++ b/makefiles/Makefile.unix.mk @@ -116,7 +116,7 @@ DEBUG = -O4 -DNDEBUG JNIDEBUG = -O1 -DNDEBUG ifeq ($(PLATFORM),LINUX) - CCC = g++ -fPIC -std=c++11 -fwrapv + CCC = g++ -fPIC -std=c++17 -fwrapv DYNAMIC_LD = g++ -shared DYNAMIC_LDFLAGS = -Wl,-rpath,\"\\\$$\$$ORIGIN\" @@ -133,7 +133,7 @@ ifeq ($(PLATFORM),LINUX) ifdef UNIX_XPRESS_DIR XPRESS_LNK = -L$(UNIX_XPRESS_DIR)/lib -lxprs -lxprl endif - + SYS_LNK = -lrt -lpthread -Wl,--no-as-needed -ldl JAVA_INC = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux JAVAC_BIN = $(shell $(WHICH) $(JAVA_HOME)/bin/javac) @@ -161,7 +161,7 @@ ifeq ($(PLATFORM),LINUX) endif # ifeq ($(PLATFORM),LINUX) ifeq ($(PLATFORM),MACOSX) MAC_VERSION = -mmacosx-version-min=$(MAC_MIN_VERSION) - CCC = clang++ -fPIC -std=c++11 $(MAC_VERSION) -stdlib=libc++ + CCC = clang++ -fPIC -std=c++17 $(MAC_VERSION) -stdlib=libc++ DYNAMIC_LD = clang++ -dynamiclib -undefined dynamic_lookup \ -Wl,-search_paths_first \ -Wl,-headerpad_max_install_names \ diff --git a/makefiles/Makefile.win.mk b/makefiles/Makefile.win.mk index e0f1e77ebe..622aa3aeab 100644 --- a/makefiles/Makefile.win.mk +++ b/makefiles/Makefile.win.mk @@ -97,7 +97,7 @@ TASKKILL = taskkill # Compilation macros. DEBUG=/O2 -DNDEBUG -CCC=cl /EHsc /MD /nologo -nologo $(SYSCFLAGS) /D__WIN32__ /DPSAPI_VERSION=1 \ +CCC=cl /std:c++17 /EHsc /MD /nologo -nologo $(SYSCFLAGS) /D__WIN32__ /DPSAPI_VERSION=1 \ /DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS PYTHON_VERSION = $(WINDOWS_PYTHON_VERSION) diff --git a/ortools/algorithms/CMakeLists.txt b/ortools/algorithms/CMakeLists.txt index 0750e8823d..b0550cb8e3 100644 --- a/ortools/algorithms/CMakeLists.txt +++ b/ortools/algorithms/CMakeLists.txt @@ -10,7 +10,7 @@ set(NAME ${PROJECT_NAME}_algorithms) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/base/CMakeLists.txt b/ortools/base/CMakeLists.txt index bc944cc276..b36dfdebee 100644 --- a/ortools/base/CMakeLists.txt +++ b/ortools/base/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_base) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/bop/CMakeLists.txt b/ortools/bop/CMakeLists.txt index 2fbb2c374f..f3571ad95a 100644 --- a/ortools/bop/CMakeLists.txt +++ b/ortools/bop/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_bop) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/constraint_solver/CMakeLists.txt b/ortools/constraint_solver/CMakeLists.txt index f64e2b2b19..0b49121067 100644 --- a/ortools/constraint_solver/CMakeLists.txt +++ b/ortools/constraint_solver/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_constraint_solver) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/data/CMakeLists.txt b/ortools/data/CMakeLists.txt index 5f8d83690d..462bcafb4e 100644 --- a/ortools/data/CMakeLists.txt +++ b/ortools/data/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_data) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/glop/CMakeLists.txt b/ortools/glop/CMakeLists.txt index d9043e340d..3a10af3b17 100644 --- a/ortools/glop/CMakeLists.txt +++ b/ortools/glop/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_glop) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/graph/CMakeLists.txt b/ortools/graph/CMakeLists.txt index d1d2a7c641..eec5d6c566 100644 --- a/ortools/graph/CMakeLists.txt +++ b/ortools/graph/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_graph) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/linear_solver/CMakeLists.txt b/ortools/linear_solver/CMakeLists.txt index c3a6e6c441..aa1f0a01f2 100644 --- a/ortools/linear_solver/CMakeLists.txt +++ b/ortools/linear_solver/CMakeLists.txt @@ -10,7 +10,7 @@ set(NAME ${PROJECT_NAME}_linear_solver) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/lp_data/CMakeLists.txt b/ortools/lp_data/CMakeLists.txt index f80c12c4b7..90631b0488 100644 --- a/ortools/lp_data/CMakeLists.txt +++ b/ortools/lp_data/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_lp_data) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/port/CMakeLists.txt b/ortools/port/CMakeLists.txt index 1157bfbbd9..ff5425b1e7 100644 --- a/ortools/port/CMakeLists.txt +++ b/ortools/port/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_port) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/sat/CMakeLists.txt b/ortools/sat/CMakeLists.txt index 06e38147e3..05288345fd 100644 --- a/ortools/sat/CMakeLists.txt +++ b/ortools/sat/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_sat) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON diff --git a/ortools/util/CMakeLists.txt b/ortools/util/CMakeLists.txt index 3ffbec8023..8455d9c75c 100644 --- a/ortools/util/CMakeLists.txt +++ b/ortools/util/CMakeLists.txt @@ -5,7 +5,7 @@ set(NAME ${PROJECT_NAME}_util) #add_library(${NAME} STATIC ${_SRCS}) add_library(${NAME} OBJECT ${_SRCS}) set_target_properties(${NAME} PROPERTIES - CXX_STANDARD 11 + CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF POSITION_INDEPENDENT_CODE ON