Skip to content

Commit 0264333

Browse files
author
Theo Paris
committed
Add find_package support
1 parent f13d86b commit 0264333

File tree

2 files changed

+95
-29
lines changed

2 files changed

+95
-29
lines changed

CMakeLists.txt

+92-29
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ if(LUAU_STATIC_CRT)
2121
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
2222
endif()
2323

24-
project(Luau LANGUAGES CXX C)
24+
project(Luau LANGUAGES CXX C VERSION 0.607)
2525
add_library(Luau.Common INTERFACE)
2626
add_library(Luau.Ast STATIC)
2727
add_library(Luau.Compiler STATIC)
@@ -46,10 +46,6 @@ if(LUAU_BUILD_CLI)
4646
set_target_properties(Luau.Reduce.CLI PROPERTIES OUTPUT_NAME luau-reduce)
4747
set_target_properties(Luau.Compile.CLI PROPERTIES OUTPUT_NAME luau-compile)
4848
set_target_properties(Luau.Bytecode.CLI PROPERTIES OUTPUT_NAME luau-bytecode)
49-
50-
install(
51-
TARGETS Luau.Repl.CLI Luau.Analyze.CLI Luau.Ast.CLI Luau.Reduce.CLI Luau.Compile.CLI Luau.Bytecode.CLI
52-
)
5349
endif()
5450

5551
if(LUAU_BUILD_TESTS)
@@ -65,54 +61,64 @@ endif()
6561
# Proxy target to make it possible to depend on private VM headers
6662
add_library(Luau.VM.Internals INTERFACE)
6763

64+
include(CMakePackageConfigHelpers)
65+
include(GenerateExportHeader)
66+
include(GNUInstallDirs)
6867
include(Sources.cmake)
6968

70-
target_include_directories(Luau.Common INTERFACE Common/include)
69+
target_include_directories(Luau.Common INTERFACE
70+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Common/include>
71+
$<INSTALL_INTERFACE:include>
72+
)
7173

7274
target_compile_features(Luau.Ast PUBLIC cxx_std_17)
73-
target_include_directories(Luau.Ast PUBLIC Ast/include)
75+
target_include_directories(Luau.Ast PUBLIC
76+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Ast/include>
77+
$<INSTALL_INTERFACE:include>
78+
)
7479
target_link_libraries(Luau.Ast PUBLIC Luau.Common)
7580

7681
target_compile_features(Luau.Compiler PUBLIC cxx_std_17)
77-
target_include_directories(Luau.Compiler PUBLIC Compiler/include)
82+
target_include_directories(Luau.Compiler PUBLIC
83+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Compiler/include>
84+
$<INSTALL_INTERFACE:include>
85+
)
7886
target_link_libraries(Luau.Compiler PUBLIC Luau.Ast)
7987

8088
target_compile_features(Luau.Config PUBLIC cxx_std_17)
81-
target_include_directories(Luau.Config PUBLIC Config/include)
89+
target_include_directories(Luau.Config PUBLIC
90+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Config/include>
91+
$<INSTALL_INTERFACE:include>
92+
)
8293
target_link_libraries(Luau.Config PUBLIC Luau.Ast)
8394

8495
target_compile_features(Luau.Analysis PUBLIC cxx_std_17)
85-
target_include_directories(Luau.Analysis PUBLIC Analysis/include)
96+
target_include_directories(Luau.Analysis PUBLIC
97+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Analysis/include>
98+
$<INSTALL_INTERFACE:include>
99+
)
86100
target_link_libraries(Luau.Analysis PUBLIC Luau.Ast Luau.Config)
87101

88102
target_compile_features(Luau.CodeGen PRIVATE cxx_std_17)
89-
target_include_directories(Luau.CodeGen PUBLIC CodeGen/include)
103+
target_include_directories(Luau.CodeGen PUBLIC
104+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/CodeGen/include>
105+
$<INSTALL_INTERFACE:include>
106+
)
90107
target_link_libraries(Luau.CodeGen PRIVATE Luau.VM Luau.VM.Internals) # Code generation needs VM internals
91108
target_link_libraries(Luau.CodeGen PUBLIC Luau.Common)
92109

93110
target_compile_features(Luau.VM PRIVATE cxx_std_11)
94-
target_include_directories(Luau.VM PUBLIC VM/include)
111+
target_include_directories(Luau.VM PUBLIC
112+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/VM/include>
113+
$<INSTALL_INTERFACE:include>
114+
)
95115
target_link_libraries(Luau.VM PUBLIC Luau.Common)
96116

97117
target_include_directories(isocline PUBLIC extern/isocline/include)
98118

99-
target_include_directories(Luau.VM.Internals INTERFACE VM/src)
100-
101-
install(
102-
TARGETS Luau.VM Luau.CodeGen Luau.Common Luau.Ast Luau.Analysis Luau.Compiler Luau.Config
103-
EXPORT LuauTargets
104-
)
105-
install(
106-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/VM/include/"
107-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/CodeGen/include/"
108-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Ast/include/"
109-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Compiler/include/"
110-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Analysis/include/"
111-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Common/include/"
112-
DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Config/include/"
113-
DESTINATION "include"
114-
FILES_MATCHING
115-
PATTERN "*.h"
119+
target_include_directories(Luau.VM.Internals INTERFACE
120+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/VM/src>
121+
$<INSTALL_INTERFACE:include>
116122
)
117123

118124
set(LUAU_OPTIONS)
@@ -292,3 +298,60 @@ foreach(LIB Luau.Ast Luau.Compiler Luau.Config Luau.Analysis Luau.CodeGen Luau.V
292298
endif()
293299
endif()
294300
endforeach()
301+
302+
configure_package_config_file(
303+
"${CMAKE_CURRENT_SOURCE_DIR}/LuauConfig.cmake.in"
304+
"${CMAKE_CURRENT_BINARY_DIR}/LuauConfig.cmake"
305+
INSTALL_DESTINATION "lib/cmake/Luau"
306+
)
307+
write_basic_package_version_file(
308+
"${CMAKE_CURRENT_BINARY_DIR}/LuauConfigVersion.cmake"
309+
VERSION "${PROJECT_VERSION}"
310+
COMPATIBILITY AnyNewerVersion
311+
)
312+
export(
313+
TARGETS Luau.Ast Luau.Analysis Luau.CodeGen Luau.VM Luau.Compiler Luau.Config Luau.Common Luau.VM.Internals
314+
FILE "${CMAKE_CURRENT_BINARY_DIR}/LuauExport.cmake"
315+
)
316+
317+
install(
318+
TARGETS Luau.Ast Luau.Analysis Luau.CodeGen Luau.VM Luau.Compiler Luau.Config Luau.Common Luau.VM.Internals
319+
EXPORT LuauTargets
320+
LIBRARY DESTINATION "lib"
321+
ARCHIVE DESTINATION "lib"
322+
INCLUDES DESTINATION "include"
323+
)
324+
install(
325+
EXPORT LuauTargets
326+
FILE LuauTargets.cmake
327+
NAMESPACE Luau::
328+
DESTINATION "lib/cmake/Luau"
329+
)
330+
install(
331+
FILES
332+
"${CMAKE_CURRENT_BINARY_DIR}/LuauConfig.cmake"
333+
"${CMAKE_CURRENT_BINARY_DIR}/LuauConfigVersion.cmake"
334+
DESTINATION "lib/cmake/Luau"
335+
)
336+
install(
337+
DIRECTORY
338+
"${CMAKE_CURRENT_SOURCE_DIR}/Common/include/"
339+
"${CMAKE_CURRENT_SOURCE_DIR}/Ast/include/"
340+
"${CMAKE_CURRENT_SOURCE_DIR}/Compiler/include/"
341+
"${CMAKE_CURRENT_SOURCE_DIR}/Config/include/"
342+
"${CMAKE_CURRENT_SOURCE_DIR}/Analysis/include/"
343+
"${CMAKE_CURRENT_SOURCE_DIR}/CodeGen/include/"
344+
"${CMAKE_CURRENT_SOURCE_DIR}/VM/include/"
345+
"${CMAKE_CURRENT_SOURCE_DIR}/VM/src/"
346+
"${CMAKE_CURRENT_SOURCE_DIR}/Common/include/"
347+
"${CMAKE_CURRENT_SOURCE_DIR}/Config/include/"
348+
DESTINATION "include"
349+
FILES_MATCHING PATTERN "*.h"
350+
)
351+
352+
if(LUAU_BUILD_CLI)
353+
install(
354+
TARGETS Luau.Repl.CLI Luau.Analyze.CLI Luau.Ast.CLI Luau.Reduce.CLI Luau.Compile.CLI Luau.Bytecode.CLI
355+
RUNTIME DESTINATION "bin"
356+
)
357+
endif()

LuauConfig.cmake.in

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@PACKAGE_INIT@
2+
include(CMakeFindDependencyMacro)
3+
include("${CMAKE_CURRENT_LIST_DIR}/LuauTargets.cmake")

0 commit comments

Comments
 (0)