diff --git a/.github/workflows/icu4c.yml b/.github/workflows/icu4c.yml index 4e207489a397..2cf9e7522e08 100644 --- a/.github/workflows/icu4c.yml +++ b/.github/workflows/icu4c.yml @@ -89,7 +89,7 @@ jobs: CXXFLAGS: -Wimplicit-fallthrough run: | cd icu4c/source; - ./runConfigureICU Linux/clang; + ./runConfigureICU Linux; make -j -l4.5 check; - name: Test Dependency run: | @@ -124,7 +124,7 @@ jobs: - name: Build ICU4C with clang run: | cd icu4c/source; - ./runConfigureICU Linux/clang ${{ matrix.build_option }}; + ./runConfigureICU Linux ${{ matrix.build_option }}; make -j -l4.5 tests; - name: Test run: | @@ -161,7 +161,7 @@ jobs: - name: ICU4C with clang and asan run: | cd icu4c/source; - ./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming --enable-tracing; + ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming --enable-tracing; make -j -l4.5 check; env: CPPFLAGS: -fsanitize=address @@ -175,7 +175,7 @@ jobs: - name: ICU4C with clang and ubsan +alignment run: | cd icu4c/source; - ./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming; + ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming; make -j -l4.5 check; env: CPPFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment @@ -209,7 +209,7 @@ jobs: - name: ICU4C with clang and tsan run: | cd icu4c/source; - ./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming + ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming make -j -l4.5; make -j -l4.5 -C test; make -j -l4.5 -C test/intltest check diff --git a/docs/devsetup/cpp/index.md b/docs/devsetup/cpp/index.md index 418b0f0e3e81..25ec3a87342d 100644 --- a/docs/devsetup/cpp/index.md +++ b/docs/devsetup/cpp/index.md @@ -70,11 +70,11 @@ For example: --disable-release Linux --prefix=/home/*your_user_name*/icu/mine/inst > config.out 2>&1` * build: make -j5 check > out.txt 2>&1 - * Be sure to test with both gcc/g++ and clang/clang++! - `CXXFLAGS="-DU_USING_ICU_NAMESPACE=0" + * Be sure to test with gcc and g++ too! `CC=gcc CXX=g++ + CXXFLAGS="-DU_USING_ICU_NAMESPACE=0" CPPFLAGS="-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1" ../../src/icu4c/source/runConfigureICU --enable-debug --disable-release - Linux/clang` + Linux` * `~/icu/mine/icu4c/**nm_utf8**` * not-using-namespace and default-hardcoded-UTF-8 * setup: mkdir+cd to here, then something like diff --git a/docs/devsetup/cpp/linux.md b/docs/devsetup/cpp/linux.md index b31b02f62ac4..beb39f7fd643 100644 --- a/docs/devsetup/cpp/linux.md +++ b/docs/devsetup/cpp/linux.md @@ -81,7 +81,7 @@ the configure options for building ICU with the address checker: ``` CPPFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address ./runConfigureICU ---enable-debug --disable-release Linux/clang --disable-renaming +--enable-debug --disable-release Linux --disable-renaming ``` The other available sanitizers are `thread`, `memory` and `undefined` behavior. diff --git a/docs/processes/release/tasks/healthy-code.md b/docs/processes/release/tasks/healthy-code.md index a4bc4b6f3125..3f0649a99e0a 100644 --- a/docs/processes/release/tasks/healthy-code.md +++ b/docs/processes/release/tasks/healthy-code.md @@ -605,7 +605,7 @@ tests. These instructions run the sanitizer on the entire test suite. The clang compiler is required. ```sh -$ CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming +$ CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux --disable-renaming $ make clean $ make -j -l2.5 check ``` diff --git a/docs/processes/release/tasks/integration.md b/docs/processes/release/tasks/integration.md index b36d2717e36c..892deb894cf9 100644 --- a/docs/processes/release/tasks/integration.md +++ b/docs/processes/release/tasks/integration.md @@ -431,7 +431,7 @@ To run manually, on a Linux system with clang, ```sh cd icu4c/source -CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux/clang +CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux make clean make -j -l2.5 check ``` @@ -449,7 +449,7 @@ To run manually, on a Linux system with clang, ```sh cd icu4c/source -CPPFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address ./runConfigureICU --enable-debug --disable-release Linux/clang +CPPFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address ./runConfigureICU --enable-debug --disable-release Linux make clean make -j -l2.5 check ``` diff --git a/icu4c/source/configure.ac b/icu4c/source/configure.ac index 89d207bc66bb..613c2c93f454 100644 --- a/icu4c/source/configure.ac +++ b/icu4c/source/configure.ac @@ -147,8 +147,10 @@ AC_SUBST(ENABLE_RELEASE) : ${CXXFLAGS=""} # Checks for compilers -AC_PROG_CC([cc clang gcc c99 c89 xlc_r xlc cl.exe icc]) -AC_PROG_CXX([c++ clang++ g++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC]) +AC_PROG_CC([clang gcc cc c99 c89 xlc_r xlc cl.exe icc]) +# Make sure that we try clang++ first, which provides C++17 support. +# The g++ compiler is less likely to support C++17. +AC_PROG_CXX([clang++ g++ c++ gpp xlC_r xlC aCC CC cxx cc++ cl.exe icc FCC KCC RCC]) # pkg-config is needed for harfbuzz support PKG_PROG_PKG_CONFIG([0.20]) diff --git a/icu4c/source/runConfigureICU b/icu4c/source/runConfigureICU index 7909c98358a5..00a56872979f 100755 --- a/icu4c/source/runConfigureICU +++ b/icu4c/source/runConfigureICU @@ -46,8 +46,7 @@ The following names can be supplied as the argument for platform: FreeBSD Use the clang/clang++ or GNU gcc/g++ compilers on FreeBSD HP-UX/ACC Use the HP ANSI C/Advanced C++ compilers on HP-UX 11 IBMi Use the iCC compilers on IBM i, i5/OS, OS/400 - Linux Use the default cc/c++ compilers on Linux - Linux/clang Use the clang/clang++ compilers on Linux + Linux Use the clang/clang++ or GNU gcc/g++ compilers on Linux Linux/gcc Use the GNU gcc/g++ compilers on Linux Linux/ECC Use the Intel ECC compiler on Linux Linux/ICC Use the Intel ICC compiler on Linux @@ -260,19 +259,9 @@ case $platform in DEBUG_CFLAGS='-g' DEBUG_CXXFLAGS='-g' ;; - Linux/clang) - THE_OS="Linux" - THE_COMP="the Clang C++" - CC=clang; export CC - CXX=clang++; export CXX - RELEASE_CFLAGS='-O3' - RELEASE_CXXFLAGS='-O3' - DEBUG_CFLAGS='-g' - DEBUG_CXXFLAGS='-g' - ;; Linux*) THE_OS="Linux" - THE_COMP="the default C++" + THE_COMP="the clang or else GNU C++" RELEASE_CFLAGS='-O3' RELEASE_CXXFLAGS='-O3' DEBUG_CFLAGS='-g'