Skip to content

Commit 15bac08

Browse files
authored
Add build options for LTO and address sanitization (OpenFUSIONToolkit#328)
- Enable link-time optimization by default for Release builds - Update `build_libs.py` to support setting new build options - Remove Fortran flag specification from build_libs (already done in CMakeLists.txt) - Update `cd_combined.yaml` and `container_cd.yaml` to only run on non-draft PRs - Update exception handling in build_libs.py downloads
1 parent 4a0c6a3 commit 15bac08

10 files changed

Lines changed: 106 additions & 29 deletions

File tree

.github/workflows/cd_combined.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ on:
66
- main
77
- pypi_release
88
pull_request:
9+
types:
10+
- opened
11+
- synchronize
12+
- reopened
13+
- ready_for_review
914
paths:
1015
- .github/workflows/cd_combined.yaml
1116
- src/utilities/build_libs.py
@@ -18,7 +23,7 @@ concurrency:
1823

1924
jobs:
2025
linux-build:
21-
if: github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
26+
if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false) && github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
2227
name: ${{ format('Linux CD ({0})', matrix.config.name) }}
2328
runs-on: ${{ matrix.config.os }}
2429
container: ${{ matrix.config.image }}
@@ -144,7 +149,7 @@ jobs:
144149
retention-days: 2
145150

146151
macos-build:
147-
if: github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
152+
if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false) && github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
148153
name: ${{ format('macOS CD ({0})', matrix.config.name) }}
149154
runs-on: ${{ matrix.config.os }}
150155
timeout-minutes: 45

.github/workflows/ci_build.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ jobs:
5050
os: ubuntu-24.04,
5151
cc: "icx", cxx: "icx", fc: "ifx",
5252
python: "python3",
53-
build_flags: "--nthread=4 --use_mkl --mkl_root=$MKLROOT",
54-
mpi_build_flags: "--nthread=4 --use_mkl --mkl_root=$MKLROOT",
53+
build_flags: "--nthread=4 --use_mkl --mkl_root=$MKLROOT --oft_use_lto=0",
54+
mpi_build_flags: "--nthread=4 --use_mkl --mkl_root=$MKLROOT --oft_use_lto=0",
5555
oneapi_ver: "-2025.2"
5656
}
5757
- {
@@ -110,7 +110,7 @@ jobs:
110110
os: ubuntu-22.04,
111111
cc: "gcc-12", cxx: "g++-12", fc: "gfortran-12",
112112
python: "python3",
113-
mpi_build_flags: "--nthread=2 --oblas_dynamic_arch --build_petsc=1 --petsc_version=3.23 --petsc_openmp=1 --build_cmake=1"
113+
mpi_build_flags: "--nthread=2 --oblas_dynamic_arch --build_petsc=1 --petsc_version=3.23 --petsc_openmp=1 --build_cmake=1 --oft_use_lto=0"
114114
}
115115

116116
steps:

.github/workflows/container_cd.yaml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ on:
55
branches:
66
- container_release
77
pull_request:
8+
types:
9+
- opened
10+
- synchronize
11+
- reopened
12+
- ready_for_review
813
paths:
914
- .github/workflows/container_cd.yaml
1015
- src/utilities/build_libs.py
@@ -19,7 +24,7 @@ env:
1924

2025
jobs:
2126
prepare-version:
22-
if: github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
27+
if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false) && github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
2328
runs-on: ubuntu-latest
2429
outputs:
2530
version_tag: ${{ steps.version.outputs.version_tag }}
@@ -62,7 +67,7 @@ jobs:
6267
steps:
6368
- name: Checkout repository
6469
uses: actions/checkout@v5
65-
70+
6671
- name: Get build architecture
6772
run: echo "ARCH_SUFFIX=$(dpkg --print-architecture)" >> "$GITHUB_ENV"
6873

.github/workflows/cov_build.yaml

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,20 @@ on:
77
- cov_debug
88
pull_request:
99
types:
10+
- opened
11+
- synchronize
12+
- reopened
1013
- ready_for_review
14+
paths:
15+
- .github/workflows/cov_build.yaml
1116

1217
concurrency:
1318
group: cov-${{ github.ref }}
1419
cancel-in-progress: ${{ contains(github.ref, 'pull/')}}
1520

1621
jobs:
1722
build:
18-
if: github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
23+
if: (github.event_name != 'pull_request' || github.event.pull_request.draft == false) && github.repository == 'OpenFUSIONToolkit/OpenFUSIONToolkit'
1924
name: Code coverage
2025
runs-on: ubuntu-22.04
2126
env:
@@ -89,22 +94,22 @@ jobs:
8994
run: |
9095
source ${{ github.workspace }}/oft_venv/bin/activate
9196
make test
92-
97+
9398
- name: Fixup cache
9499
shell: bash
95100
working-directory: builds
96101
run: |
97102
rm -rf build
98103
rm -rf petsc*
99-
104+
100105
- name: Generate coverage report (GCOV)
101106
shell: bash
102107
working-directory: builds/build_release
103108
run: |
104109
lcov -c --directory . --output-file main_coverage.info --gcov-tool $GCOV
105110
lcov --ignore-errors unused -r main_coverage.info -o cleaned_coverage.txt '/opt/*' '/usr/*'
106111
lcov -l cleaned_coverage.txt
107-
112+
108113
- name: Generate coverage report (Python)
109114
shell: bash
110115
working-directory: builds/build_release/tests
@@ -113,7 +118,7 @@ jobs:
113118
coverage combine . grid lin_alg fem physics
114119
coverage report
115120
coverage xml
116-
121+
117122
- name: Upload coverage report to Codecov
118123
uses: codecov/codecov-action@v6
119124
with:

src/CMakeLists.txt

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ option(OFT_USE_MPI "Build with MPI support?" OFF)
1515
option(OFT_MPI_HEADER "Use MPI header interface instead of F08?" OFF)
1616
option(OFT_HDF5_HL "Search for and link with HDF5 HL interface?" OFF)
1717
option(OFT_USE_OpenMP "Build with OpenMP support?" ON)
18+
option(OFT_USE_LTO "Build with link time optimization (Release builds only)?" ON)
1819
option(OFT_DEBUG_STACK "Build with internal debugging stack?" OFF)
20+
option(OFT_DEBUG_CHECK "Build with compiler runtime debug checks (Debug builds only)?" ON)
21+
option(OFT_DEBUG_SANITIZER "Build with address sanitization checks (Debug builds only)?" OFF)
1922
option(OFT_PROFILING "Build with internal profiling enabled?" OFF)
2023
option(OFT_BUILD_PYTHON "Build Python wrappers?" ON)
2124
option(OFT_BUILD_DOCS "Build documentation?" OFF)
@@ -111,6 +114,14 @@ endif()
111114
enable_language( C )
112115
enable_language( CXX )
113116
enable_language( Fortran )
117+
# Flag checks
118+
if(OFT_DEBUG_SANITIZER AND APPLE)
119+
message( FATAL_ERROR "Memory sanitization not supported on macOS" )
120+
endif()
121+
if(OFT_DEBUG_CHECK AND OFT_DEBUG_SANITIZER)
122+
message( FATAL_ERROR "Cannot enable both compiler checks and address sanitization together" )
123+
endif()
124+
# Set flags based on compiler
114125
if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel")
115126
if (NOT ("${CMAKE_C_COMPILER_ID}" MATCHES "Intel"))
116127
message( FATAL_ERROR "Fortran and C compilers must be from the same vendor" )
@@ -127,16 +138,30 @@ if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel")
127138
set( CMAKE_C_FLAGS_RELEASE "" )
128139
set( CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} )
129140
set( CMAKE_Fortran_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE} )
130-
if(NOT OFT_PACKAGE_BUILD)
131-
if( "${CMAKE_CXX_COMPILER_ID}" MATCHES "IntelLLVM" )
132-
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check bounds,contiguous,pointers,shape,stack" )
133-
else()
134-
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check bounds,pointers,shape,uninit" )
141+
if( "${CMAKE_CXX_COMPILER_ID}" MATCHES "IntelLLVM" )
142+
if(NOT OFT_PACKAGE_BUILD)
143+
if(OFT_DEBUG_CHECK)
144+
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check bounds,contiguous,pointers,shape,stack" )
145+
elseif(OFT_DEBUG_SANITIZER)
146+
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fsanitize=address" )
147+
endif()
148+
endif()
149+
else()
150+
if(NOT OFT_PACKAGE_BUILD)
151+
if(OFT_DEBUG_CHECK)
152+
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -check bounds,pointers,shape,uninit" )
153+
elseif(OFT_DEBUG_SANITIZER)
154+
message( FATAL_ERROR "Address sanitization not supported with classic intel compilers" )
155+
endif()
135156
endif()
136157
endif()
137158
# Needed for new oneAPI Intel compilers
138159
if( "${CMAKE_CXX_COMPILER_ID}" MATCHES "IntelLLVM" )
139160
set( EXT_LIBS "-lstdc++" )
161+
if( OFT_USE_LTO )
162+
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -fuse-ld=lld")
163+
set( CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -fuse-ld=lld")
164+
endif()
140165
endif()
141166
elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
142167
if (NOT ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU"))
@@ -146,14 +171,14 @@ elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
146171
message( FATAL_ERROR "Fortran and C++ compilers must be from the same vendor" )
147172
endif()
148173
if(OFT_COVERAGE)
149-
set( CMAKE_C_FLAGS_DEBUG "-Og --coverage -fprofile-update=atomic -g -Wuninitialized" ) # -fprofile-arcs -ftest-coverage
174+
set( CMAKE_C_FLAGS_DEBUG "-g -Og -fno-omit-frame-pointer -Wuninitialized --coverage -fprofile-update=atomic" ) # -fprofile-arcs -ftest-coverage
150175
set( CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_DEBUG} )
151176
add_definitions( -DOFT_COVERAGE )
152177
set(CMAKE_C_OUTPUT_EXTENSION_REPLACE ON)
153178
set(CMAKE_CXX_OUTPUT_EXTENSION_REPLACE ON)
154179
set(CMAKE_Fortran_OUTPUT_EXTENSION_REPLACE ON)
155180
else()
156-
set( CMAKE_C_FLAGS_DEBUG "-g -O0 -Wuninitialized" )
181+
set( CMAKE_C_FLAGS_DEBUG "-g -Og -fno-omit-frame-pointer -Wuninitialized" )
157182
set( CMAKE_C_FLAGS_RELEASE "-O2" )
158183
endif()
159184
# Disable executable stack (default)
@@ -169,13 +194,32 @@ elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
169194
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Werror=line-truncation -Wconversion" )
170195
set( CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Werror=line-truncation -Wconversion" )
171196
if(NOT OFT_PACKAGE_BUILD)
172-
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fcheck=all" )
197+
if(OFT_DEBUG_CHECK)
198+
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fcheck=all" )
199+
elseif(OFT_DEBUG_SANITIZER)
200+
set( CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fsanitize=address" )
201+
endif()
173202
endif()
174203
set( CMAKE_Fortran_FLAGS "-ffree-line-length-none ${CMAKE_Fortran_FLAGS}" )
175204
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
176205
set( CMAKE_Fortran_FLAGS "-fallow-argument-mismatch ${CMAKE_Fortran_FLAGS}" )
177206
endif()
178207
endif()
208+
# Enable IPO for release builds (not including coverage)
209+
if(OFT_USE_LTO)
210+
if(CMAKE_BUILD_TYPE STREQUAL "Release" AND NOT OFT_COVERAGE)
211+
include(CheckIPOSupported)
212+
check_ipo_supported(RESULT ipo_supported)
213+
if(ipo_supported)
214+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)
215+
message( STATUS "Using Link-Time Optimization" )
216+
else()
217+
message( FATAL_ERROR "Link-Time Optimization is not supported on this platform" )
218+
endif()
219+
else()
220+
message( WARNING "Link-Time Optimization only supported for Release builds, skipping" )
221+
endif()
222+
endif()
179223
# Internal profiling
180224
if( OFT_PROFILING )
181225
add_definitions( -DOFT_STACK -DOFT_PROFILE )

src/base/oft_io.F90

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -434,8 +434,10 @@ subroutine xdmf_clear_timesteps(self,clear_static)
434434
END DO
435435
self%n_ts=0
436436
IF(istart==0)THEN
437-
hdf5_path=TRIM(self%group_name)//"/"//TRIM(self%grid_names(j))
438-
CALL hdf5_create_group(TRIM(self%file_path),TRIM(hdf5_path)//"/"//hdf5_ts_str(0))
437+
DO j=1,self%n_grids
438+
hdf5_path=TRIM(self%group_name)//"/"//TRIM(self%grid_names(j))
439+
CALL hdf5_create_group(TRIM(self%file_path),TRIM(hdf5_path)//"/"//hdf5_ts_str(0))
440+
END DO
439441
END IF
440442
if(oft_debug_print(2))THEN
441443
file_sizes = hdf5_file_size(TRIM(self%file_path))

src/ext_libs/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ add_library( oftext
1111
bvls.f90
1212
${QUADPACK_OBJS}
1313
)
14+
# Always turn off IPO to avoid DLSODE common block issue
15+
set_property(TARGET oftext PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE OFF)
1416

1517
# Local copy of triangle
1618
if( OFT_BUILD_PYTHON )
@@ -26,4 +28,4 @@ if( OFT_BUILD_PYTHON )
2628
DESTINATION bin
2729
COMPONENT app
2830
)
29-
endif()
31+
endif()

src/grid/mesh_native.F90

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -591,6 +591,7 @@ subroutine native_reflect(self,tol)
591591
integer(i4), allocatable :: newindex(:),hoindex(:),regtmp(:),ltemp(:,:)
592592
real(r8), allocatable :: rtemp(:,:),rlftemp(:,:),rctemp(:,:)
593593
DEBUG_STACK_PUSH
594+
ref_index=-1
594595
SELECT TYPE(self)
595596
CLASS IS(oft_bmesh)
596597
IF(self%dim==2)THEN
@@ -603,6 +604,8 @@ subroutine native_reflect(self,tol)
603604
CLASS IS(oft_mesh)
604605
ref_index=3
605606
IF(oft_debug_print(1))write(*,'(2A)')oft_indent,'Reflecting 3D volume mesh -> z'
607+
CLASS DEFAULT
608+
CALL oft_abort('Unknown mesh type','native_reflect',__FILE__)
606609
END SELECT
607610
CALL oft_increase_indent
608611
!---Reflect points that are not on reflection plane

src/grid/mesh_type.F90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,7 @@ subroutine mesh_findcell(self,cell,pt,fout)
989989
if((cell<=0).OR.(cell>self%nc))then
990990
!---Find closest point in mesh
991991
d2min=1.d99
992+
next=1
992993
do i=1,self%np
993994
d2=SUM((pt-self%r(:,i))**2)
994995
if(d2<d2min)then

src/utilities/build_libs.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import hashlib
1818
import http.client
1919
import urllib.request
20-
from urllib.error import URLError
20+
import urllib.error
2121

2222

2323
def error_exit(error_str, extra_info=None, exception=None):
@@ -336,8 +336,6 @@ def detect_compiler_target(compiler):
336336
config_dict['CC_VENDOR'] = cc_vendor
337337
config_dict['CC_VERSION'] = cc_version
338338
if cc_vendor == 'gnu':
339-
if int(config_dict['CC_VERSION'].split(".")[0]) > 9:
340-
config_dict['BASE_FFLAGS'] = "-fallow-argument-mismatch"
341339
config_dict['OMP_FLAGS'] = "-fopenmp"
342340
config_dict['DEBUG_FLAGS'] = "-g"
343341
config_dict['CHK_FLAGS'] = "-O0 -fcheck=all"
@@ -376,7 +374,8 @@ def detect_compiler_target(compiler):
376374

377375
def build_cmake_script(mydict,build_debug=False,use_openmp=False,build_python=False,build_tests=False,
378376
build_examples=False,build_docs=False,build_coverage=False,package_build=False,
379-
package_release=False,enable_debug_stack=False,enable_profiling=False):
377+
package_release=False,enable_debug_stack=False,enable_profiling=False,
378+
use_lto=True,debug_check_flags=True,debug_asanitizer=False):
380379
def bool_to_string(val):
381380
if val:
382381
return "TRUE"
@@ -401,10 +400,13 @@ def bool_to_string(val):
401400
"-DOFT_BUILD_PYTHON:BOOL={0}".format(bool_to_string(build_python)),
402401
"-DOFT_BUILD_DOCS:BOOL={0}".format(bool_to_string(build_docs)),
403402
"-DOFT_USE_OpenMP:BOOL={0}".format(bool_to_string(use_openmp)),
403+
"-DOFT_USE_LTO:BOOL={0}".format(bool_to_string(use_lto)),
404404
"-DOFT_PACKAGE_BUILD:BOOL={0}".format(bool_to_string(package_build)),
405405
"-DOFT_PACKAGE_NIGHTLY:BOOL={0}".format(bool_to_string(not package_release)),
406406
"-DOFT_COVERAGE:BOOL={0}".format(bool_to_string(build_coverage)),
407407
"-DOFT_DEBUG_STACK:BOOL={0}".format(bool_to_string(enable_debug_stack)),
408+
"-DOFT_DEBUG_CHECK:BOOL={0}".format(bool_to_string(debug_check_flags)),
409+
"-DOFT_DEBUG_SANITIZER:BOOL={0}".format(bool_to_string(debug_asanitizer)),
408410
"-DOFT_PROFILING:BOOL={0}".format(bool_to_string(enable_profiling)),
409411
"-DOFT_THINCURR_LEGACY:BOOL=FALSE",
410412
"-DCMAKE_C_COMPILER:FILEPATH={CC}",
@@ -639,10 +641,11 @@ def fetch(self, force=False, nretry=2):
639641
for i in range(nretry+1):
640642
try:
641643
fetch_file(self.url, self.file)
642-
except http.client.HTTPException:
644+
except (urllib.error.URLError, http.client.HTTPException, OSError) as e:
643645
if i == nretry:
644646
raise
645647
else:
648+
print(repr(e))
646649
print('Warning: Retrying download ({0}/{1})'.format(i+1,nretry+1))
647650
continue
648651
break
@@ -660,10 +663,11 @@ def fetch(self, force=False, nretry=2):
660663
for i in range(nretry+1):
661664
try:
662665
fetch_file(url, tmp_file)
663-
except http.client.HTTPException:
666+
except (urllib.error.URLError, http.client.HTTPException, OSError) as e:
664667
if i == nretry:
665668
raise
666669
else:
670+
print(repr(e))
667671
print('Warning: Retrying download ({0}/{1})'.format(i+1,nretry+1))
668672
continue
669673
break
@@ -2150,6 +2154,7 @@ def setup_build(self):
21502154
group.add_argument("--oft_build_debug", default=0, type=int, choices=(0,1), help="Build debug version of OFT? (default: 0)")
21512155
group.add_argument("--oft_build_python", default=1, type=int, choices=(0,1), help="Build OFT Python libraries? (default: 1)")
21522156
group.add_argument("--oft_use_openmp", default=1, type=int, choices=(0,1), help="Build OFT with OpenMP support? (default: 1)")
2157+
group.add_argument("--oft_use_lto", default=1, type=int, choices=(0,1), help="Build OFT with Link-Time Optimization? (default: 1)")
21532158
group.add_argument("--oft_build_tests", default=0, type=int, choices=(0,1), help="Build OFT tests? (default: 0)")
21542159
group.add_argument("--oft_py_kernel", default="python3", type=str, help="Name of Jupyter kernel for testing Python examples (default: python3)")
21552160
group.add_argument("--oft_build_examples", default=0, type=int, choices=(0,1), help="Build OFT examples? (default: 0)")
@@ -2158,6 +2163,8 @@ def setup_build(self):
21582163
group.add_argument("--oft_package_python", default=1, type=int, choices=(0,1), help="Setup for build of PYPI wheels when packaging?")
21592164
group.add_argument("--oft_package_release", action="store_true", default=False, help="Perform a release package of OFT?")
21602165
group.add_argument("--oft_build_coverage", action="store_true", default=False, help="Build OFT with code coverage flags?")
2166+
group.add_argument("--oft_debug_checks", default=1, type=int, choices=(0,1), help="Build OFT with compiler runtime checks (requires Debug build)? (default: 1)")
2167+
group.add_argument("--oft_debug_asanitizer", default=0, type=int, choices=(0,1), help="Build OFT with address sanitizer checks (requires Debug build)? (default: 0)")
21612168
group.add_argument("--oft_debug_stack", action="store_true", default=False, help="Enable internal debug stack?")
21622169
group.add_argument("--oft_profiling", action="store_true", default=False, help="Enable internal profiling?")
21632170
#
@@ -2373,4 +2380,7 @@ def setup_build(self):
23732380
package_release=options.oft_package_release,
23742381
enable_debug_stack=options.oft_debug_stack,
23752382
enable_profiling=options.oft_profiling,
2383+
use_lto=(options.oft_use_lto==1),
2384+
debug_check_flags=(options.oft_debug_checks==1),
2385+
debug_asanitizer=(options.oft_debug_asanitizer==1)
23762386
)

0 commit comments

Comments
 (0)