Skip to content

Commit

Permalink
ICU-22556 Prefer cc and c++ compilers
Browse files Browse the repository at this point in the history
When building icu4c, it defaults to clang instead of gcc when the default compiler, cc / c++, is a symlink to gcc / g++.
This not the expected behavior when building C and C++ code.
It appears that this behavior was put in place originally for supporting C++11, which hopefully is no longer such a concern.
This PR adjusts the configure.ac for icu4c to prefer the cc and c++ compilers first.
  • Loading branch information
jwillikers committed Feb 16, 2024
1 parent 90b2eed commit af04ff3
Show file tree
Hide file tree
Showing 10 changed files with 36 additions and 27 deletions.
2 changes: 1 addition & 1 deletion .ci-builds/.azure-exhaustive-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5
displayName: 'Build'
- script: |
cd icu4c/source && make check-exhaustive
Expand Down
14 changes: 7 additions & 7 deletions .ci-builds/.azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang
Expand All @@ -62,7 +62,7 @@ jobs:
# calling makeconv for it, although the Makefile has appropriate dependencies.
- script: |
cd icu4c/source && \
ICU_DATA_FILTER_FILE=../../.ci-builds/data-filter.json ./runConfigureICU Linux && \
ICU_DATA_FILTER_FILE=../../.ci-builds/data-filter.json ./runConfigureICU Linux/clang && \
make -j2 tests && \
\[ ! -d data/out/build/icudt66l/translit \] && \
(cd test/intltest && LD_LIBRARY_PATH=../../lib:../../tools/ctestfw ./intltest translit/TransliteratorTest/TestBasicTransliteratorEvenWithoutData) && \
Expand All @@ -82,7 +82,7 @@ jobs:
lfs: true
fetchDepth: 10
- script: |
export CXXFLAGS="-std=c++17 -Winvalid-constexpr" && cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux && make -j -l2.5 check
export CXXFLAGS="-std=c++17 -Winvalid-constexpr" && cd icu4c/source && ./runConfigureICU --enable-debug --disable-release Linux/clang && make -j -l2.5 check
displayName: 'Build and Test C++17'
env:
CC: clang
Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:
lfs: true
fetchDepth: 10
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang
Expand All @@ -160,7 +160,7 @@ jobs:
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 tests
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5 tests
displayName: 'Build only (WarningsAsErrors)'
env:
CC: clang-16
Expand All @@ -184,7 +184,7 @@ jobs:
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang-16
Expand All @@ -209,7 +209,7 @@ jobs:
sudo apt install -qy clang-16 lld-16 libc++-16-dev libc++abi-16-dev
displayName: 'Install Clang-16'
- script: |
cd icu4c/source && ./runConfigureICU Linux && make -j -l2.5 check
cd icu4c/source && ./runConfigureICU Linux/clang && make -j -l2.5 check
displayName: 'Build and Test'
env:
CC: clang-16
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/icu4c.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ jobs:
CXXFLAGS: -Wimplicit-fallthrough
run: |
cd icu4c/source;
./runConfigureICU Linux;
./runConfigureICU Linux/clang;
make -j -l2.5 check;
- name: Test Dependency
run: |
Expand Down Expand Up @@ -122,7 +122,7 @@ jobs:
- name: Build ICU4C with clang
run: |
cd icu4c/source;
./runConfigureICU Linux ${{ matrix.build_option }};
./runConfigureICU Linux/clang ${{ matrix.build_option }};
make -j -l2.5 tests;
- name: Test
run: |
Expand Down Expand Up @@ -159,7 +159,7 @@ jobs:
- name: ICU4C with clang and asan
run: |
cd icu4c/source;
./runConfigureICU --enable-debug --disable-release Linux --disable-renaming --enable-tracing;
./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming --enable-tracing;
make -j -l2.5 check;
env:
CPPFLAGS: -fsanitize=address
Expand All @@ -173,7 +173,7 @@ jobs:
- name: ICU4C with clang and ubsan +alignment
run: |
cd icu4c/source;
./runConfigureICU --enable-debug --disable-release Linux --disable-renaming;
./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming;
make -j -l2.5 check;
env:
CPPFLAGS: -fsanitize=undefined -fsanitize=alignment -fno-sanitize-recover=undefined,alignment
Expand All @@ -188,7 +188,7 @@ jobs:
- name: ICU4C with clang using CFI
run: |
cd icu4c/source;
./runConfigureICU Linux --disable-renaming;
./runConfigureICU Linux/clang --disable-renaming;
make -j -l2.5 check;
env:
CC: clang
Expand All @@ -207,7 +207,7 @@ jobs:
- name: ICU4C with clang and tsan
run: |
cd icu4c/source;
./runConfigureICU --enable-debug --disable-release Linux --disable-renaming
./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming
make -j -l2.5;
make -j -l2.5 -C test;
make -j -l2.5 -C test/intltest check
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/icu_valgrind.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ jobs:
CXXFLAGS: -gdwarf-4
run: |
cd icu4c/source;
./runConfigureICU --enable-debug Linux --disable-renaming && make -j -l2.5 tests;
./runConfigureICU --enable-debug Linux/clang --disable-renaming && make -j -l2.5 tests;
- name: Test iotest with valgrind
run: |
cd icu4c/source/test/iotest
Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:
CXXFLAGS: -gdwarf-4
run: |
cd icu4c/source;
./runConfigureICU --enable-debug Linux --disable-renaming && make -j -l2.5 tests;
./runConfigureICU --enable-debug Linux/clang --disable-renaming && make -j -l2.5 tests;
- name: Check all top path in intltest is covered
run: |
cd icu4c/source/test/intltest;
Expand Down
2 changes: 1 addition & 1 deletion docs/devsetup/cpp/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ 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 gcc and g++ too! `CC=gcc CXX=g++
* Be sure to test with both gcc/g++ and clang/clang++! `CC=clang CXX=clang++
CXXFLAGS="-DU_USING_ICU_NAMESPACE=0"
CPPFLAGS="-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1"
../../src/icu4c/source/runConfigureICU --enable-debug --disable-release
Expand Down
2 changes: 1 addition & 1 deletion docs/devsetup/cpp/linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 --disable-renaming
--enable-debug --disable-release Linux/clang --disable-renaming
```

The other available sanitizers are `thread`, `memory` and `undefined` behavior.
Expand Down
2 changes: 1 addition & 1 deletion docs/processes/release/tasks/healthy-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 --disable-renaming
$ CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux/clang --disable-renaming
$ make clean
$ make -j -l2.5 check
```
4 changes: 2 additions & 2 deletions docs/processes/release/tasks/integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
CPPFLAGS=-fsanitize=thread LDFLAGS=-fsanitize=thread ./runConfigureICU --enable-debug --disable-release Linux/clang
make clean
make -j -l2.5 check
```
Expand All @@ -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
CPPFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address ./runConfigureICU --enable-debug --disable-release Linux/clang
make clean
make -j -l2.5 check
```
Expand Down
6 changes: 2 additions & 4 deletions icu4c/source/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,8 @@ AC_SUBST(ENABLE_RELEASE)
: ${CXXFLAGS=""}

# Checks for compilers
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])
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])

# pkg-config is needed for harfbuzz support
PKG_PROG_PKG_CONFIG([0.20])
Expand Down
15 changes: 13 additions & 2 deletions icu4c/source/runConfigureICU
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ 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 clang/clang++ or GNU gcc/g++ compilers on Linux
Linux Use the default cc/c++ compilers on Linux
Linux/clang Use the clang/clang++ 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
Expand Down Expand Up @@ -259,9 +260,19 @@ 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 clang or else GNU C++"
THE_COMP="the default C++"
RELEASE_CFLAGS='-O3'
RELEASE_CXXFLAGS='-O3'
DEBUG_CFLAGS='-g'
Expand Down

0 comments on commit af04ff3

Please sign in to comment.