Skip to content

Commit eccdbbe

Browse files
committed
Enable LTO on MSVC
1 parent e88d389 commit eccdbbe

File tree

4 files changed

+20
-15
lines changed

4 files changed

+20
-15
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
- name: Create Directories
4343
run: cmake -E make_directory ${{ github.workspace }}/build ${{ github.workspace }}/packages
4444
- name: Generating Build Scripts
45-
run: cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBDDWAF_PACKAGE_PROCESSOR=${{ matrix.arch }} -DCMAKE_INSTALL_PREFIX=${{ github.workspace }} -DCPACK_PACKAGE_DIRECTORY=${{ github.workspace }}/packages ${{ github.workspace }} -A ${{ matrix.arch }}
45+
run: cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBDDWAF_PACKAGE_PROCESSOR=${{ matrix.arch }} -DLIBDDWAF_ENABLE_LTO=ON -DCMAKE_INSTALL_PREFIX=${{ github.workspace }} -DCPACK_PACKAGE_DIRECTORY=${{ github.workspace }}/packages ${{ github.workspace }} -A ${{ matrix.arch }}
4646
working-directory: ${{ github.workspace }}/build
4747
- name: Build
4848
run: cmake --build . --target package --config RelWithDebInfo --verbose --target libddwaf_shared --target libddwaf_static --target tests/waf_test -j

CMakeLists.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,12 @@ if(NOT MSVC AND LIBDDWAF_TESTING AND LIBDDWAF_TEST_COVERAGE)
108108
endif()
109109

110110
if (LIBDDWAF_ENABLE_LTO)
111-
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
111+
if (NOT MSVC)
112+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
113+
else()
114+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /GL")
115+
endif()
116+
112117
endif()
113118

114119
include(cmake/objects.cmake)

cmake/objects.cmake

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,12 @@ gen_objects(libddwaf_objects)
164164
add_library(libddwaf_shared_objects ALIAS libddwaf_objects)
165165

166166
if (LIBDDWAF_ENABLE_LTO)
167-
target_compile_options(libddwaf_objects PRIVATE -flto)
167+
if (NOT MSVC)
168+
target_compile_options(libddwaf_objects PRIVATE -flto)
169+
else()
170+
target_compile_options(libddwaf_objects PRIVATE /GL)
171+
endif()
172+
168173

169174
# If LTO is enabled, we can't use objects with -flto to generate a static
170175
# library, as the contents of the object is an intermediate representation.

cmake/shared.cmake

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ if(LINUX)
3939
RENAME ${BUILD_ID_SUFFIX}.debug)
4040
endif()
4141
elseif (APPLE)
42-
target_link_libraries(libddwaf_shared PRIVATE -Wl,-undefined,error libddwaf_shared_objects)
42+
target_link_libraries(libddwaf_shared PRIVATE
43+
$<$<BOOL:${LIBDDWAF_ENABLE_LTO}>:-flto>
44+
-Wl,-undefined,error
45+
libddwaf_shared_objects)
4346

4447
if(NOT (CMAKE_BUILD_TYPE MATCHES Debug))
4548
# Ensure that dsymutil and strip is present
@@ -66,18 +69,10 @@ elseif (APPLE)
6669
endif()
6770
elseif (MSVC)
6871
target_link_libraries(libddwaf_shared
69-
PRIVATE ${LIBDDWAF_PRIVATE_LIBRARIES}
72+
PRIVATE
73+
$<$<BOOL:${LIBDDWAF_ENABLE_LTO}>:/GL>
74+
${LIBDDWAF_PRIVATE_LIBRARIES}
7075
PUBLIC ${LIBDDWAF_INTERFACE_LIBRARIES})
7176

7277
install(FILES $<TARGET_PDB_FILE:libddwaf_shared> DESTINATION lib OPTIONAL)
73-
elseif (MINGW)
74-
target_link_libraries(libddwaf_shared PUBLIC ${LIBDDWAF_INTERFACE_LIBRARIES})
75-
target_link_libraries(libddwaf_shared PRIVATE
76-
$<$<BOOL:${LIBDDWAF_ENABLE_LTO}>:-flto>
77-
-Wl,--no-undefined
78-
-Wl,-version-script=${libddwaf_SOURCE_DIR}/libddwaf.version
79-
-Wl,--build-id=0x${BUILD_ID}
80-
${LIBDDWAF_PRIVATE_LIBRARIES}
81-
-static-libstdc++
82-
glibc_compat_time64 glibc_compat_math)
8378
endif()

0 commit comments

Comments
 (0)