mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
Lagom: Add ClangPlugins to the build system
This commit is contained in:
parent
c3ed1a7995
commit
4ae7bbda52
Notes:
sideshowbarker
2024-07-17 03:03:15 +09:00
Author: https://github.com/mattco98 Commit: https://github.com/SerenityOS/serenity/commit/4ae7bbda52 Pull-request: https://github.com/SerenityOS/serenity/pull/24027 Reviewed-by: https://github.com/ADKaster ✅ Reviewed-by: https://github.com/nico
9 changed files with 34 additions and 1 deletions
|
@ -264,3 +264,6 @@ if (ENABLE_USB_IDS_DOWNLOAD AND NOT EXISTS "${USB_IDS_INSTALL_PATH}/${USB_IDS_FI
|
||||||
download_file("${USB_IDS_URL}" "${USB_IDS_DOWNLOAD_PATH}")
|
download_file("${USB_IDS_URL}" "${USB_IDS_DOWNLOAD_PATH}")
|
||||||
install(FILES "${USB_IDS_DOWNLOAD_PATH}" DESTINATION "${USB_IDS_INSTALL_PATH}")
|
install(FILES "${USB_IDS_DOWNLOAD_PATH}" DESTINATION "${USB_IDS_INSTALL_PATH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_library(GenericClangPlugin INTERFACE)
|
||||||
|
add_library(JSClangPlugin INTERFACE)
|
||||||
|
|
|
@ -798,9 +798,11 @@ add_link_options(LINKER:-z,notext)
|
||||||
|
|
||||||
add_library(kernel_heap STATIC ${KERNEL_HEAP_SOURCES})
|
add_library(kernel_heap STATIC ${KERNEL_HEAP_SOURCES})
|
||||||
add_dependencies(kernel_heap install_libc_headers)
|
add_dependencies(kernel_heap install_libc_headers)
|
||||||
|
target_link_libraries(kernel_heap PUBLIC GenericClangPlugin)
|
||||||
|
|
||||||
add_executable(Kernel ${SOURCES})
|
add_executable(Kernel ${SOURCES})
|
||||||
add_dependencies(Kernel generate_EscapeSequenceStateMachine.h generate_version_header install_libc_headers)
|
add_dependencies(Kernel generate_EscapeSequenceStateMachine.h generate_version_header install_libc_headers)
|
||||||
|
target_link_libraries(Kernel PUBLIC GenericClangPlugin)
|
||||||
|
|
||||||
if("${SERENITY_ARCH}" STREQUAL "aarch64")
|
if("${SERENITY_ARCH}" STREQUAL "aarch64")
|
||||||
target_link_options(Kernel PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld -nostdlib LINKER:--no-pie)
|
target_link_options(Kernel PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/Arch/aarch64/linker.ld -nostdlib LINKER:--no-pie)
|
||||||
|
|
|
@ -22,6 +22,7 @@ target_compile_options(${PREKERNEL_TARGET} PRIVATE -no-pie -fno-pic -fno-threads
|
||||||
target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld -nostdlib LINKER:--no-pie)
|
target_link_options(${PREKERNEL_TARGET} PRIVATE LINKER:-T ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld -nostdlib LINKER:--no-pie)
|
||||||
set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld)
|
set_target_properties(${PREKERNEL_TARGET} PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld)
|
||||||
|
|
||||||
|
target_link_libraries(${PREKERNEL_TARGET} PUBLIC GenericClangPlugin)
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
target_link_libraries(${PREKERNEL_TARGET} PRIVATE gcc)
|
target_link_libraries(${PREKERNEL_TARGET} PRIVATE gcc)
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
||||||
|
|
|
@ -31,3 +31,5 @@ serenity_option(JAKT_SOURCE_DIR "" CACHE STRING "Pre-existing jakt language sour
|
||||||
|
|
||||||
serenity_option(SERENITY_CACHE_DIR "${PROJECT_BINARY_DIR}/../caches" CACHE PATH "Location of shared cache of downloaded files")
|
serenity_option(SERENITY_CACHE_DIR "${PROJECT_BINARY_DIR}/../caches" CACHE PATH "Location of shared cache of downloaded files")
|
||||||
serenity_option(ENABLE_NETWORK_DOWNLOADS ON CACHE BOOL "Allow downloads of required files. If OFF, required files must already be present in SERENITY_CACHE_DIR")
|
serenity_option(ENABLE_NETWORK_DOWNLOADS ON CACHE BOOL "Allow downloads of required files. If OFF, required files must already be present in SERENITY_CACHE_DIR")
|
||||||
|
|
||||||
|
serenity_option(ENABLE_CLANG_PLUGINS OFF CACHE BOOL "Enable building with the Clang plugins")
|
||||||
|
|
|
@ -52,6 +52,7 @@ if (NOT COMMAND serenity_lib)
|
||||||
add_library(${target_name} ${SERENITY_LIB_TYPE} ${SOURCES} ${GENERATED_SOURCES})
|
add_library(${target_name} ${SERENITY_LIB_TYPE} ${SOURCES} ${GENERATED_SOURCES})
|
||||||
set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||||
set_target_properties(${target_name} PROPERTIES VERSION "serenity")
|
set_target_properties(${target_name} PROPERTIES VERSION "serenity")
|
||||||
|
target_link_libraries(${target_name} PUBLIC GenericClangPlugin)
|
||||||
install(TARGETS ${target_name} DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL)
|
install(TARGETS ${target_name} DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL)
|
||||||
set_target_properties(${target_name} PROPERTIES OUTPUT_NAME ${fs_name})
|
set_target_properties(${target_name} PROPERTIES OUTPUT_NAME ${fs_name})
|
||||||
serenity_generated_sources(${target_name})
|
serenity_generated_sources(${target_name})
|
||||||
|
@ -80,6 +81,7 @@ if (NOT COMMAND serenity_bin)
|
||||||
function(serenity_bin target_name)
|
function(serenity_bin target_name)
|
||||||
serenity_install_sources()
|
serenity_install_sources()
|
||||||
add_executable(${target_name} ${SOURCES})
|
add_executable(${target_name} ${SOURCES})
|
||||||
|
target_link_libraries(${target_name} PUBLIC GenericClangPlugin)
|
||||||
set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
set_target_properties(${target_name} PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||||
install(TARGETS ${target_name} RUNTIME DESTINATION bin OPTIONAL)
|
install(TARGETS ${target_name} RUNTIME DESTINATION bin OPTIONAL)
|
||||||
serenity_generated_sources(${target_name})
|
serenity_generated_sources(${target_name})
|
||||||
|
|
|
@ -135,6 +135,11 @@ endif()
|
||||||
|
|
||||||
CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSEAUDIO)
|
CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSEAUDIO)
|
||||||
|
|
||||||
|
add_library(JSClangPlugin INTERFACE)
|
||||||
|
add_library(GenericClangPlugin INTERFACE)
|
||||||
|
# These need to be installed to avoid CMake complaining about them not being in the export set
|
||||||
|
install(TARGETS GenericClangPlugin JSClangPlugin EXPORT LagomTargets)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
||||||
add_compile_options(-Wno-overloaded-virtual)
|
add_compile_options(-Wno-overloaded-virtual)
|
||||||
# FIXME: Re-enable this check when the warning stops triggering, or document why we can't stop it from triggering.
|
# FIXME: Re-enable this check when the warning stops triggering, or document why we can't stop it from triggering.
|
||||||
|
@ -147,6 +152,11 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
||||||
set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=fuzzer")
|
set(LINKER_FLAGS "${LINKER_FLAGS} -fsanitize=fuzzer")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (ENABLE_CLANG_PLUGINS)
|
||||||
|
add_subdirectory(ClangPlugins)
|
||||||
|
depend_on_clang_plugin(JSClangPlugin LibJSGCClangPlugin)
|
||||||
|
depend_on_clang_plugin(GenericClangPlugin LambdaCaptureClangPlugin)
|
||||||
|
endif()
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
if (ENABLE_FUZZERS_LIBFUZZER)
|
if (ENABLE_FUZZERS_LIBFUZZER)
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
|
@ -224,6 +234,7 @@ function(lagom_lib target_name fs_name)
|
||||||
OUTPUT_NAME lagom-${fs_name}
|
OUTPUT_NAME lagom-${fs_name}
|
||||||
)
|
)
|
||||||
target_link_libraries(${target_name} PRIVATE ${LAGOM_LIBRARY_LIBS})
|
target_link_libraries(${target_name} PRIVATE ${LAGOM_LIBRARY_LIBS})
|
||||||
|
target_link_libraries(${target_name} PUBLIC GenericClangPlugin)
|
||||||
|
|
||||||
if (NOT "${target_name}" STREQUAL "AK")
|
if (NOT "${target_name}" STREQUAL "AK")
|
||||||
target_link_libraries(${target_name} PRIVATE AK)
|
target_link_libraries(${target_name} PRIVATE AK)
|
||||||
|
@ -289,6 +300,7 @@ endfunction()
|
||||||
function(serenity_bin name)
|
function(serenity_bin name)
|
||||||
add_executable(${name} ${SOURCES} ${GENERATED_SOURCES})
|
add_executable(${name} ${SOURCES} ${GENERATED_SOURCES})
|
||||||
add_executable(Lagom::${name} ALIAS ${name})
|
add_executable(Lagom::${name} ALIAS ${name})
|
||||||
|
target_link_libraries(${name} PUBLIC GenericClangPlugin)
|
||||||
install(
|
install(
|
||||||
TARGETS ${target_name}
|
TARGETS ${target_name}
|
||||||
EXPORT LagomTargets
|
EXPORT LagomTargets
|
||||||
|
@ -630,6 +642,8 @@ if (BUILD_LAGOM)
|
||||||
OBJECT
|
OBJECT
|
||||||
"${SERENITY_PROJECT_ROOT}/Userland/Libraries/LibTest/TestMain.cpp"
|
"${SERENITY_PROJECT_ROOT}/Userland/Libraries/LibTest/TestMain.cpp"
|
||||||
)
|
)
|
||||||
|
target_link_libraries(LibTest PUBLIC GenericClangPlugin)
|
||||||
|
target_link_libraries(LibTestMain PUBLIC GenericClangPlugin)
|
||||||
|
|
||||||
# LibTest tests from Tests/
|
# LibTest tests from Tests/
|
||||||
set(TEST_DIRECTORIES
|
set(TEST_DIRECTORIES
|
||||||
|
@ -659,6 +673,9 @@ if (BUILD_LAGOM)
|
||||||
if (LINUX)
|
if (LINUX)
|
||||||
list(APPEND TEST_DIRECTORIES LibELF)
|
list(APPEND TEST_DIRECTORIES LibELF)
|
||||||
endif()
|
endif()
|
||||||
|
if (ENABLE_CLANG_PLUGINS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang$")
|
||||||
|
list(APPEND TEST_DIRECTORIES ClangPlugins)
|
||||||
|
endif()
|
||||||
|
|
||||||
foreach (dir IN LISTS TEST_DIRECTORIES)
|
foreach (dir IN LISTS TEST_DIRECTORIES)
|
||||||
add_serenity_subdirectory("Tests/${dir}")
|
add_serenity_subdirectory("Tests/${dir}")
|
||||||
|
|
|
@ -15,3 +15,8 @@ endfunction()
|
||||||
|
|
||||||
clang_plugin(LambdaCaptureClangPlugin SOURCES LambdaCapturePluginAction.cpp)
|
clang_plugin(LambdaCaptureClangPlugin SOURCES LambdaCapturePluginAction.cpp)
|
||||||
clang_plugin(LibJSGCClangPlugin SOURCES LibJSGCPluginAction.cpp)
|
clang_plugin(LibJSGCClangPlugin SOURCES LibJSGCPluginAction.cpp)
|
||||||
|
|
||||||
|
function(depend_on_clang_plugin target_name plugin_name)
|
||||||
|
add_dependencies(${target_name} ${plugin_name}Target)
|
||||||
|
target_compile_options(${target_name} INTERFACE -fplugin=$<TARGET_FILE:${plugin_name}>)
|
||||||
|
endfunction()
|
||||||
|
|
|
@ -3,7 +3,7 @@ function(lagom_tool tool)
|
||||||
add_executable(${tool} ${SOURCES} ${LAGOM_TOOL_SOURCES})
|
add_executable(${tool} ${SOURCES} ${LAGOM_TOOL_SOURCES})
|
||||||
# alias for parity with exports
|
# alias for parity with exports
|
||||||
add_executable(Lagom::${tool} ALIAS ${tool})
|
add_executable(Lagom::${tool} ALIAS ${tool})
|
||||||
target_link_libraries(${tool} AK LibCoreMinimal LibFileSystem ${LAGOM_TOOL_LIBS})
|
target_link_libraries(${tool} AK LibCoreMinimal LibFileSystem GenericClangPlugin ${LAGOM_TOOL_LIBS})
|
||||||
install(
|
install(
|
||||||
TARGETS ${tool}
|
TARGETS ${tool}
|
||||||
EXPORT LagomTargets
|
EXPORT LagomTargets
|
||||||
|
|
|
@ -282,3 +282,4 @@ if("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "i.86.*")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_options(LibJS PRIVATE -fno-omit-frame-pointer)
|
target_compile_options(LibJS PRIVATE -fno-omit-frame-pointer)
|
||||||
|
target_link_libraries(LibJS PUBLIC JSClangPlugin)
|
||||||
|
|
Loading…
Reference in a new issue