@@ -18,6 +18,7 @@ option(CLICE_OFFLINE_BUILD "Disable network downloads during configuration" OFF)
1818option (CLICE_ENABLE_TEST "Build unit tests" OFF )
1919option (CLICE_CI_ENVIRONMENT "Enable CI-specific configuration" OFF )
2020option (CLICE_ENABLE_BENCHMARK "Build benchmarks" OFF )
21+ option (CLICE_RELEASE "Enable release packaging (LTO + strip + pack)" OFF )
2122
2223# Global flags that apply to all targets (including FetchContent dependencies).
2324if (NOT MSVC )
@@ -46,6 +47,10 @@ if(CLICE_USE_LIBCXX)
4647 string (APPEND CMAKE_SHARED_LINKER_FLAGS " -stdlib=libc++" )
4748endif ()
4849
50+ if (CLICE_RELEASE)
51+ set (CLICE_ENABLE_LTO ON )
52+ endif ()
53+
4954if (CLICE_ENABLE_LTO)
5055 string (APPEND CMAKE_C_FLAGS " -flto=thin" )
5156 string (APPEND CMAKE_CXX_FLAGS " -flto=thin" )
@@ -236,3 +241,78 @@ if(CLICE_ENABLE_BENCHMARK)
236241 )
237242 target_link_libraries (scan_benchmark PRIVATE clice::core eventide::deco )
238243endif ()
244+
245+ if (CLICE_RELEASE)
246+ set (CLICE_PACK_DIR "${PROJECT_BINARY_DIR} /pack" )
247+ set (CLICE_SYMBOL_DIR "${PROJECT_BINARY_DIR} /pack-symbol" )
248+
249+ if (WIN32 )
250+ set (CLICE_ARCHIVE_EXT ".zip" )
251+ else ()
252+ set (CLICE_ARCHIVE_EXT ".tar.gz" )
253+ endif ()
254+
255+ if (WIN32 )
256+ set (CLICE_EXE_NAME "clice.exe" )
257+ set (CLICE_SYMBOL_NAME "clice.pdb" )
258+ elseif (APPLE )
259+ set (CLICE_EXE_NAME "clice" )
260+ set (CLICE_SYMBOL_NAME "clice.dSYM" )
261+ else ()
262+ set (CLICE_EXE_NAME "clice" )
263+ set (CLICE_SYMBOL_NAME "clice.debug" )
264+ endif ()
265+
266+ if (WIN32 )
267+ add_custom_target (clice-strip ALL
268+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CLICE_SYMBOL_DIR} "
269+ DEPENDS clice
270+ COMMENT "Collecting PDB for clice"
271+ )
272+ elseif (APPLE )
273+ add_custom_target (clice-strip ALL
274+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CLICE_SYMBOL_DIR} "
275+ COMMAND dsymutil "$<TARGET_FILE :clice >" -o "${CLICE_SYMBOL_DIR} /${CLICE_SYMBOL_NAME} "
276+ COMMAND strip -x "$<TARGET_FILE :clice >"
277+ DEPENDS clice
278+ COMMENT "Extracting dSYM and stripping clice"
279+ )
280+ else ()
281+ add_custom_target (clice-strip ALL
282+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CLICE_SYMBOL_DIR} "
283+ COMMAND ${CMAKE_OBJCOPY} --only-keep-debug "$<TARGET_FILE :clice >" "${CLICE_SYMBOL_DIR} /${CLICE_SYMBOL_NAME} "
284+ COMMAND ${CMAKE_STRIP} --strip-debug --strip-unneeded "$<TARGET_FILE :clice >"
285+ COMMAND ${CMAKE_OBJCOPY} --add-gnu-debuglink= "${CLICE_SYMBOL_DIR} /${CLICE_SYMBOL_NAME} " "$<TARGET_FILE :clice >"
286+ DEPENDS clice
287+ COMMENT "Extracting debug symbols and stripping clice"
288+ )
289+ endif ()
290+
291+ add_custom_target (clice-pack ALL
292+ DEPENDS clice-strip copy_clang_resource
293+ COMMAND ${CMAKE_COMMAND} -E rm -rf "${CLICE_PACK_DIR} "
294+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CLICE_PACK_DIR} /clice/bin"
295+ COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE :clice >" "${CLICE_PACK_DIR} /clice/bin/"
296+ COMMAND ${CMAKE_COMMAND} -E copy_directory "${LLVM_INSTALL_PATH} /lib/clang" "${CLICE_PACK_DIR} /clice/lib/clang"
297+ COMMAND ${CMAKE_COMMAND} -E copy "${PROJECT_SOURCE_DIR} /docs/clice.toml" "${CLICE_PACK_DIR} /clice/"
298+ COMMAND ${CMAKE_COMMAND}
299+ -DARCHIVE_DIR= "${CLICE_PACK_DIR} /clice"
300+ -DOUTPUT= "${PROJECT_BINARY_DIR} /clice${CLICE_ARCHIVE_EXT} "
301+ -DWORK_DIR= "${CLICE_PACK_DIR} "
302+ -P "${PROJECT_SOURCE_DIR} /cmake/archive.cmake"
303+ COMMENT "Packaging clice distribution"
304+ )
305+
306+ add_custom_target (clice-pack-symbol ALL
307+ DEPENDS clice-strip
308+ COMMAND ${CMAKE_COMMAND} -E rm -rf "${CLICE_SYMBOL_DIR} /pack"
309+ COMMAND ${CMAKE_COMMAND} -E make_directory "${CLICE_SYMBOL_DIR} /pack"
310+ COMMAND ${CMAKE_COMMAND} -E copy "${CLICE_SYMBOL_DIR} /${CLICE_SYMBOL_NAME} " "${CLICE_SYMBOL_DIR} /pack/"
311+ COMMAND ${CMAKE_COMMAND}
312+ -DARCHIVE_DIR= "${CLICE_SYMBOL_DIR} /pack"
313+ -DOUTPUT= "${PROJECT_BINARY_DIR} /clice-symbol${CLICE_ARCHIVE_EXT} "
314+ -DWORK_DIR= "${CLICE_SYMBOL_DIR} /pack"
315+ -P "${PROJECT_SOURCE_DIR} /cmake/archive.cmake"
316+ COMMENT "Packaging clice debug symbols"
317+ )
318+ endif ()
0 commit comments