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 20, 2024
1 parent 90b2eed commit b8c4a8b
Show file tree
Hide file tree
Showing 7 changed files with 27 additions and 18 deletions.
10 changes: 5 additions & 5 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 Down Expand Up @@ -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
6 changes: 3 additions & 3 deletions docs/devsetup/cpp/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 gcc and g++ too! `CC=gcc CXX=g++
CXXFLAGS="-DU_USING_ICU_NAMESPACE=0"
* Be sure to test with both gcc/g++ and clang/clang++!
`CXXFLAGS="-DU_USING_ICU_NAMESPACE=0"
CPPFLAGS="-DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1"
../../src/icu4c/source/runConfigureICU --enable-debug --disable-release
Linux`
Linux/clang`
* `~/icu/mine/icu4c/**nm_utf8**`
* not-using-namespace and default-hardcoded-UTF-8
* setup: mkdir+cd to here, then something like
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 b8c4a8b

Please sign in to comment.