@@ -28,6 +28,17 @@ endif()
2828
2929project (Luau LANGUAGES CXX C )
3030
31+ find_package (Git QUIET )
32+ if (GIT_FOUND)
33+ # Get the version from the latest git tag
34+ execute_process (
35+ COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
36+ OUTPUT_VARIABLE GIT_VERSION
37+ ERROR_QUIET
38+ )
39+ set (PROJECT_VERSION "${GIT_VERSION} " )
40+ endif ()
41+
3142if (LUAU_BUILD_SHARED)
3243 add_library (Luau.Common SHARED )
3344 add_library (Luau.CLI.lib SHARED )
@@ -69,75 +80,178 @@ if(LUAU_BUILD_CLI)
6980 set_target_properties (Luau.Reduce.CLI PROPERTIES OUTPUT_NAME luau-reduce )
7081 set_target_properties (Luau.Compile.CLI PROPERTIES OUTPUT_NAME luau-compile )
7182 set_target_properties (Luau.Bytecode.CLI PROPERTIES OUTPUT_NAME luau-bytecode )
83+
84+ install (TARGETS Luau.Repl.CLI)
85+ install (TARGETS Luau.Analyze.CLI)
86+ install (TARGETS Luau.Ast.CLI)
87+ install (TARGETS Luau.Reduce.CLI)
88+ install (TARGETS Luau.Compile.CLI)
89+ install (TARGETS Luau.Bytecode.CLI)
7290endif ()
7391
7492if (LUAU_BUILD_TESTS)
7593 add_executable (Luau.UnitTest )
7694 add_executable (Luau.Conformance )
7795 add_executable (Luau.CLI.Test )
96+
97+ # The unit tests aren't `install`ed
7898endif ()
7999
80100if (LUAU_BUILD_WEB)
81101 add_executable (Luau.Web )
102+
103+ # The web module isn't `install`ed - emscripten builds usually have custom
104+ # packaging steps
82105endif ()
83106
84107# Proxy target to make it possible to depend on private VM headers
85108add_library (Luau.VM.Internals INTERFACE )
86109
110+ include (GNUInstallDirs )
87111include (Sources .cmake )
88112
113+ target_compile_features (Luau.Bytecode PUBLIC cxx_std_17 )
114+ target_include_directories (Luau.Bytecode PUBLIC
115+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Bytecode /include >
116+ $<INSTALL_INTERFACE :include >
117+ )
118+ target_link_libraries (Luau.Bytecode PUBLIC Luau.Common )
119+ install (TARGETS Luau.Bytecode EXPORT LuauTargets)
120+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Bytecode/include/
121+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
122+ FILES_MATCHING PATTERN "*.h"
123+ )
124+
89125target_compile_features (Luau.Common PUBLIC cxx_std_17 )
90- target_include_directories (Luau.Common PUBLIC Common/include )
126+ target_include_directories (Luau.Common PUBLIC
127+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Common /include >
128+ $<INSTALL_INTERFACE :include >
129+ )
130+ install (TARGETS Luau.Common EXPORT LuauTargets)
131+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Common/include/
132+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
133+ FILES_MATCHING PATTERN "*.h"
134+ )
91135
92136target_compile_features (Luau.CLI.lib PUBLIC cxx_std_17 )
93- target_include_directories (Luau.CLI.lib PUBLIC CLI/include )
94137target_link_libraries (Luau.CLI.lib PRIVATE Luau.Common Luau.Config )
138+ install (TARGETS Luau.CLI.lib EXPORT LuauTargets)
139+ target_include_directories (Luau.CLI.lib PUBLIC
140+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /CLI /include >
141+ $<INSTALL_INTERFACE :include >
142+ )
143+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /CLI/include/
144+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
145+ FILES_MATCHING PATTERN "*.h"
146+ )
95147
96148target_compile_features (Luau.Ast PUBLIC cxx_std_17 )
97149target_include_directories (Luau.Ast PUBLIC Ast/include )
98150target_link_libraries (Luau.Ast PUBLIC Luau.Common )
99151
100- target_compile_features (Luau.Bytecode PUBLIC cxx_std_17 )
101- target_include_directories (Luau.Bytecode PUBLIC Bytecode/include )
102- target_link_libraries (Luau.Bytecode PUBLIC Luau.Common )
152+
153+ target_compile_features (Luau.Ast PUBLIC cxx_std_17 )
154+ target_include_directories (Luau.Ast PUBLIC
155+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Ast /include >
156+ $<INSTALL_INTERFACE :include >
157+ )
158+ target_link_libraries (Luau.Ast PUBLIC Luau.Common )
159+ install (TARGETS Luau.Ast EXPORT LuauTargets)
160+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Ast/include/
161+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
162+ FILES_MATCHING PATTERN "*.h"
163+ )
103164
104165target_compile_features (Luau.Compiler PUBLIC cxx_std_17 )
105- target_include_directories (Luau.Compiler PUBLIC Compiler/include )
166+ target_include_directories (Luau.Compiler PUBLIC
167+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Compiler /include >
168+ $<INSTALL_INTERFACE :include >
169+ )
106170target_link_libraries (Luau.Compiler PUBLIC Luau.Ast Luau.Bytecode )
171+ install (TARGETS Luau.Compiler EXPORT LuauTargets)
172+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Compiler/include/
173+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
174+ FILES_MATCHING PATTERN "*.h"
175+ )
107176
108177target_compile_features (Luau.Config PUBLIC cxx_std_17 )
109- target_include_directories (Luau.Config PUBLIC Config/include )
110- target_link_libraries (Luau.Config PUBLIC Luau.Ast )
178+ target_include_directories (Luau.Config PUBLIC
179+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Config /include >
180+ $<INSTALL_INTERFACE :include >
181+ )
111182target_link_libraries (Luau.Config PRIVATE Luau.Compiler Luau.VM )
183+ target_link_libraries (Luau.Config PUBLIC Luau.Ast )
184+ install (TARGETS Luau.Config EXPORT LuauTargets)
185+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Config/include/
186+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
187+ FILES_MATCHING PATTERN "*.h"
188+ )
112189
113190target_compile_features (Luau.Analysis PUBLIC cxx_std_17 )
114- target_include_directories (Luau.Analysis PUBLIC Analysis/include )
191+ target_include_directories (Luau.Analysis PUBLIC
192+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Analysis /include >
193+ $<INSTALL_INTERFACE :include >
194+ )
115195target_link_libraries (Luau.Analysis PUBLIC Luau.Ast Luau.Config )
116196target_link_libraries (Luau.Analysis PRIVATE Luau.Compiler Luau.VM )
197+ install (TARGETS Luau.Analysis EXPORT LuauTargets)
198+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Analysis/include/
199+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
200+ FILES_MATCHING PATTERN "*.h"
201+ )
117202
118203target_compile_features (Luau.CodeGen PRIVATE cxx_std_17 )
119- target_include_directories (Luau.CodeGen PUBLIC CodeGen/include )
204+ target_include_directories (Luau.CodeGen PUBLIC
205+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /CodeGen /include >
206+ $<INSTALL_INTERFACE :include >
207+ )
120208target_link_libraries (Luau.CodeGen PRIVATE Luau.VM Luau.VM.Internals ) # Code generation needs VM internals
121209target_link_libraries (Luau.CodeGen PUBLIC Luau.Common )
210+ install (TARGETS Luau.CodeGen EXPORT LuauTargets)
211+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /CodeGen/include/
212+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
213+ FILES_MATCHING PATTERN "*.h"
214+ )
122215
123216target_compile_features (Luau.VM PRIVATE cxx_std_11 )
124- target_include_directories (Luau.VM PUBLIC VM/include )
217+ target_include_directories (Luau.VM PUBLIC
218+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /VM /include >
219+ $<INSTALL_INTERFACE :include >
220+ )
125221target_link_libraries (Luau.VM PUBLIC Luau.Common )
222+ install (TARGETS Luau.VM EXPORT LuauTargets)
223+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /VM/include/
224+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
225+ FILES_MATCHING PATTERN "*.h"
226+ )
126227
127228target_compile_features (Luau.Require PUBLIC cxx_std_17 )
128- target_include_directories (Luau.Require PUBLIC Require/include )
229+ target_include_directories (Luau.Require PUBLIC
230+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /Require /include >
231+ $<INSTALL_INTERFACE :include >
232+ )
129233target_link_libraries (Luau.Require PUBLIC Luau.Config Luau.VM )
234+ install (TARGETS Luau.Require EXPORT LuauTargets)
235+ install (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Require/include/
236+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
237+ FILES_MATCHING PATTERN "*.h"
238+ )
130239
131240target_include_directories (isocline PUBLIC extern/isocline/include )
132241
133- target_include_directories (Luau.VM.Internals INTERFACE VM/src )
242+ target_include_directories (Luau.VM.Internals INTERFACE
243+ $<BUILD_INTERFACE :${CMAKE_CURRENT_SOURCE_DIR} /VM /src >
244+ # no INSTALL_INTERFACE: the `Internals` target really only exists at compile-time
245+ )
246+ install (TARGETS Luau.VM.Internals EXPORT LuauTargets)
134247
135248set (LUAU_OPTIONS)
136249
137250if (MSVC )
138251 list (APPEND LUAU_OPTIONS /D_CRT_SECURE_NO_WARNINGS) # We need to use the portable CRT functions.
139252 list (APPEND LUAU_OPTIONS "/we4018" ) # Signed/unsigned mismatch
140253 list (APPEND LUAU_OPTIONS "/we4388" ) # Also signed/unsigned mismatch
254+ list (APPEND LUAU_OPTIONS "/utf-8" )
141255else ()
142256 list (APPEND LUAU_OPTIONS -Wall) # All warnings
143257 list (APPEND LUAU_OPTIONS -Wimplicit-fallthrough)
@@ -338,3 +452,13 @@ foreach(LIB Luau.Ast Luau.Compiler Luau.Config Luau.Analysis Luau.CodeGen Luau.V
338452 endif ()
339453 endif ()
340454endforeach ()
455+
456+ # Installation target
457+ cmake_path (APPEND libdir_for_pc_file "\$ {prefix}" "${CMAKE_INSTALL_LIBDIR} " )
458+
459+ configure_file (
460+ "${CMAKE_CURRENT_SOURCE_DIR} /tools/luau.pc.in"
461+ "${CMAKE_CURRENT_BINARY_DIR} /luau.pc"
462+ @ONLY
463+ )
464+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /luau.pc DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig)
0 commit comments