Skip to content

Commit 1f4e91b

Browse files
committed
Add cmake installation target
Add a cmake install target and fix utf-8 issues. Signed-off-by: Theo Paris <theo@theoparis.com>
1 parent 231a59c commit 1f4e91b

2 files changed

Lines changed: 146 additions & 13 deletions

File tree

CMakeLists.txt

Lines changed: 137 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@ endif()
2828

2929
project(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+
3142
if (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)
7290
endif()
7391

7492
if(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
7898
endif()
7999

80100
if(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
82105
endif()
83106

84107
# Proxy target to make it possible to depend on private VM headers
85108
add_library(Luau.VM.Internals INTERFACE)
86109

110+
include(GNUInstallDirs)
87111
include(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+
89125
target_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

92136
target_compile_features(Luau.CLI.lib PUBLIC cxx_std_17)
93-
target_include_directories(Luau.CLI.lib PUBLIC CLI/include)
94137
target_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

96148
target_compile_features(Luau.Ast PUBLIC cxx_std_17)
97149
target_include_directories(Luau.Ast PUBLIC Ast/include)
98150
target_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

104165
target_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+
)
106170
target_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

108177
target_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+
)
111182
target_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

113190
target_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+
)
115195
target_link_libraries(Luau.Analysis PUBLIC Luau.Ast Luau.Config)
116196
target_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

118203
target_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+
)
120208
target_link_libraries(Luau.CodeGen PRIVATE Luau.VM Luau.VM.Internals) # Code generation needs VM internals
121209
target_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

123216
target_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+
)
125221
target_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

127228
target_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+
)
129233
target_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

131240
target_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

135248
set(LUAU_OPTIONS)
136249

137250
if(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")
141255
else()
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()
340454
endforeach()
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)

tools/luau.pc.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
libdir=@libdir_for_pc_file@
3+
includedir=@includedir_for_pc_file@
4+
5+
Name: Luau
6+
Description: A fast, small, safe, gradually typed embeddable scripting language derived from Lua
7+
Version: @VERSION@
8+
Cflags: -I${includedir}
9+
Libs: -L${libdir} -lLuau.Require -lLuau.Bytecode -lLuau.Ast -lLuau.Compiler -lLuau.Common -lLuau.Config -lLuau.Analysis -lLuau.CodeGen -lLuau.VM

0 commit comments

Comments
 (0)