From 8f94786ceb5e34ad50a1ddcfae26c4dce862bdb7 Mon Sep 17 00:00:00 2001 From: aaron Date: Tue, 17 Dec 2024 13:50:27 -0800 Subject: [PATCH] Refactor CLI structure to match the include/src split that our other projects have. (#1573) This PR refactors the CLI folder to use the same project split between include and src directories that we have for all the other artifacts in luau. It also includes the require-by-string implementation we already have as a feature of `Luau.CLI.lib`. Both of these changes are targeted at making it easier for embedding projects to setup an effective equivalent to the standalone `luau` executable with whatever runtime libraries they need attached and without having to unnecessarily duplicate code from luau itself. --- CLI/{ => include/Luau}/Coverage.h | 0 CLI/{ => include/Luau}/FileUtils.h | 0 CLI/{ => include/Luau}/Flags.h | 0 CLI/{ => include/Luau}/Profiler.h | 0 CLI/{ => include/Luau}/Repl.h | 0 CLI/{ => include/Luau}/Require.h | 0 CLI/{ => src}/Analyze.cpp | 6 ++-- CLI/{ => src}/Ast.cpp | 2 +- CLI/{ => src}/Bytecode.cpp | 4 +-- CLI/{ => src}/Compile.cpp | 4 +-- CLI/{ => src}/Coverage.cpp | 2 +- CLI/{ => src}/FileUtils.cpp | 2 +- CLI/{ => src}/Flags.cpp | 0 CLI/{ => src}/Profiler.cpp | 0 CLI/{ => src}/Reduce.cpp | 2 +- CLI/{ => src}/Repl.cpp | 12 +++---- CLI/{ => src}/ReplEntry.cpp | 2 +- CLI/{ => src}/Require.cpp | 6 ++-- CLI/{ => src}/Web.cpp | 0 CMakeLists.txt | 3 +- Makefile | 20 ++++++------ Sources.cmake | 51 ++++++++++++++++-------------- tests/Repl.test.cpp | 2 +- tests/RequireByString.test.cpp | 12 ++----- 24 files changed, 64 insertions(+), 66 deletions(-) rename CLI/{ => include/Luau}/Coverage.h (100%) rename CLI/{ => include/Luau}/FileUtils.h (100%) rename CLI/{ => include/Luau}/Flags.h (100%) rename CLI/{ => include/Luau}/Profiler.h (100%) rename CLI/{ => include/Luau}/Repl.h (100%) rename CLI/{ => include/Luau}/Require.h (100%) rename CLI/{ => src}/Analyze.cpp (99%) rename CLI/{ => src}/Ast.cpp (98%) rename CLI/{ => src}/Bytecode.cpp (99%) rename CLI/{ => src}/Compile.cpp (99%) rename CLI/{ => src}/Coverage.cpp (98%) rename CLI/{ => src}/FileUtils.cpp (99%) rename CLI/{ => src}/Flags.cpp (100%) rename CLI/{ => src}/Profiler.cpp (100%) rename CLI/{ => src}/Reduce.cpp (99%) rename CLI/{ => src}/Repl.cpp (99%) rename CLI/{ => src}/ReplEntry.cpp (89%) rename CLI/{ => src}/Require.cpp (99%) rename CLI/{ => src}/Web.cpp (100%) diff --git a/CLI/Coverage.h b/CLI/include/Luau/Coverage.h similarity index 100% rename from CLI/Coverage.h rename to CLI/include/Luau/Coverage.h diff --git a/CLI/FileUtils.h b/CLI/include/Luau/FileUtils.h similarity index 100% rename from CLI/FileUtils.h rename to CLI/include/Luau/FileUtils.h diff --git a/CLI/Flags.h b/CLI/include/Luau/Flags.h similarity index 100% rename from CLI/Flags.h rename to CLI/include/Luau/Flags.h diff --git a/CLI/Profiler.h b/CLI/include/Luau/Profiler.h similarity index 100% rename from CLI/Profiler.h rename to CLI/include/Luau/Profiler.h diff --git a/CLI/Repl.h b/CLI/include/Luau/Repl.h similarity index 100% rename from CLI/Repl.h rename to CLI/include/Luau/Repl.h diff --git a/CLI/Require.h b/CLI/include/Luau/Require.h similarity index 100% rename from CLI/Require.h rename to CLI/include/Luau/Require.h diff --git a/CLI/Analyze.cpp b/CLI/src/Analyze.cpp similarity index 99% rename from CLI/Analyze.cpp rename to CLI/src/Analyze.cpp index bc78f7cb..e10a2c2e 100644 --- a/CLI/Analyze.cpp +++ b/CLI/src/Analyze.cpp @@ -7,9 +7,9 @@ #include "Luau/TypeAttach.h" #include "Luau/Transpiler.h" -#include "FileUtils.h" -#include "Flags.h" -#include "Require.h" +#include "Luau/FileUtils.h" +#include "Luau/Flags.h" +#include "Luau/Require.h" #include #include diff --git a/CLI/Ast.cpp b/CLI/src/Ast.cpp similarity index 98% rename from CLI/Ast.cpp rename to CLI/src/Ast.cpp index b5a922aa..5341d889 100644 --- a/CLI/Ast.cpp +++ b/CLI/src/Ast.cpp @@ -8,7 +8,7 @@ #include "Luau/ParseOptions.h" #include "Luau/ToString.h" -#include "FileUtils.h" +#include "Luau/FileUtils.h" static void displayHelp(const char* argv0) { diff --git a/CLI/Bytecode.cpp b/CLI/src/Bytecode.cpp similarity index 99% rename from CLI/Bytecode.cpp rename to CLI/src/Bytecode.cpp index 2da9570b..dc8e4833 100644 --- a/CLI/Bytecode.cpp +++ b/CLI/src/Bytecode.cpp @@ -7,8 +7,8 @@ #include "Luau/BytecodeBuilder.h" #include "Luau/Parser.h" #include "Luau/BytecodeSummary.h" -#include "FileUtils.h" -#include "Flags.h" +#include "Luau/FileUtils.h" +#include "Luau/Flags.h" #include diff --git a/CLI/Compile.cpp b/CLI/src/Compile.cpp similarity index 99% rename from CLI/Compile.cpp rename to CLI/src/Compile.cpp index 7d95387c..e8498beb 100644 --- a/CLI/Compile.cpp +++ b/CLI/src/Compile.cpp @@ -8,8 +8,8 @@ #include "Luau/Parser.h" #include "Luau/TimeTrace.h" -#include "FileUtils.h" -#include "Flags.h" +#include "Luau/FileUtils.h" +#include "Luau/Flags.h" #include diff --git a/CLI/Coverage.cpp b/CLI/src/Coverage.cpp similarity index 98% rename from CLI/Coverage.cpp rename to CLI/src/Coverage.cpp index a509ab89..7330d492 100644 --- a/CLI/Coverage.cpp +++ b/CLI/src/Coverage.cpp @@ -1,5 +1,5 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details -#include "Coverage.h" +#include "Luau/Coverage.h" #include "lua.h" diff --git a/CLI/FileUtils.cpp b/CLI/src/FileUtils.cpp similarity index 99% rename from CLI/FileUtils.cpp rename to CLI/src/FileUtils.cpp index 6925e99f..fcdcad9e 100644 --- a/CLI/FileUtils.cpp +++ b/CLI/src/FileUtils.cpp @@ -1,5 +1,5 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details -#include "FileUtils.h" +#include "Luau/FileUtils.h" #include "Luau/Common.h" diff --git a/CLI/Flags.cpp b/CLI/src/Flags.cpp similarity index 100% rename from CLI/Flags.cpp rename to CLI/src/Flags.cpp diff --git a/CLI/Profiler.cpp b/CLI/src/Profiler.cpp similarity index 100% rename from CLI/Profiler.cpp rename to CLI/src/Profiler.cpp diff --git a/CLI/Reduce.cpp b/CLI/src/Reduce.cpp similarity index 99% rename from CLI/Reduce.cpp rename to CLI/src/Reduce.cpp index 7f8c459c..e66d80dc 100644 --- a/CLI/Reduce.cpp +++ b/CLI/src/Reduce.cpp @@ -5,7 +5,7 @@ #include "Luau/Parser.h" #include "Luau/Transpiler.h" -#include "FileUtils.h" +#include "Luau/FileUtils.h" #include #include diff --git a/CLI/Repl.cpp b/CLI/src/Repl.cpp similarity index 99% rename from CLI/Repl.cpp rename to CLI/src/Repl.cpp index 3bda38f1..2dec1d8c 100644 --- a/CLI/Repl.cpp +++ b/CLI/src/Repl.cpp @@ -1,5 +1,5 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details -#include "Repl.h" +#include "Luau/Repl.h" #include "Luau/Common.h" #include "lua.h" @@ -10,11 +10,11 @@ #include "Luau/Parser.h" #include "Luau/TimeTrace.h" -#include "Coverage.h" -#include "FileUtils.h" -#include "Flags.h" -#include "Profiler.h" -#include "Require.h" +#include "Luau/Coverage.h" +#include "Luau/FileUtils.h" +#include "Luau/Flags.h" +#include "Luau/Profiler.h" +#include "Luau/Require.h" #include "isocline.h" diff --git a/CLI/ReplEntry.cpp b/CLI/src/ReplEntry.cpp similarity index 89% rename from CLI/ReplEntry.cpp rename to CLI/src/ReplEntry.cpp index 8543e3f7..7e5f9e06 100644 --- a/CLI/ReplEntry.cpp +++ b/CLI/src/ReplEntry.cpp @@ -1,5 +1,5 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details -#include "Repl.h" +#include "Luau/Repl.h" int main(int argc, char** argv) { diff --git a/CLI/Require.cpp b/CLI/src/Require.cpp similarity index 99% rename from CLI/Require.cpp rename to CLI/src/Require.cpp index 4c1c3ac6..94bdd544 100644 --- a/CLI/Require.cpp +++ b/CLI/src/Require.cpp @@ -1,7 +1,7 @@ // This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details -#include "Require.h" +#include "Luau/Require.h" -#include "FileUtils.h" +#include "Luau/FileUtils.h" #include "Luau/Common.h" #include "Luau/Config.h" @@ -301,4 +301,4 @@ bool RequireResolver::parseConfigInDirectory(const std::string& directory) } return true; -} \ No newline at end of file +} diff --git a/CLI/Web.cpp b/CLI/src/Web.cpp similarity index 100% rename from CLI/Web.cpp rename to CLI/src/Web.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 11f034a3..5286fd9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,8 @@ include(Sources.cmake) target_include_directories(Luau.Common INTERFACE Common/include) target_compile_features(Luau.CLI.lib PUBLIC cxx_std_17) -target_link_libraries(Luau.CLI.lib PRIVATE Luau.Common) +target_include_directories(Luau.CLI.lib PUBLIC CLI/include) +target_link_libraries(Luau.CLI.lib PRIVATE Luau.Common Luau.Config) target_compile_features(Luau.Ast PUBLIC cxx_std_17) target_include_directories(Luau.Ast PUBLIC Ast/include) diff --git a/Makefile b/Makefile index 6fb0b8f6..2ad0fc00 100644 --- a/Makefile +++ b/Makefile @@ -42,23 +42,23 @@ ISOCLINE_SOURCES=extern/isocline/src/isocline.c ISOCLINE_OBJECTS=$(ISOCLINE_SOURCES:%=$(BUILD)/%.o) ISOCLINE_TARGET=$(BUILD)/libisocline.a -TESTS_SOURCES=$(wildcard tests/*.cpp) CLI/FileUtils.cpp CLI/Flags.cpp CLI/Profiler.cpp CLI/Coverage.cpp CLI/Repl.cpp CLI/Require.cpp +TESTS_SOURCES=$(wildcard tests/*.cpp) CLI/src/FileUtils.cpp CLI/src/Flags.cpp CLI/src/Profiler.cpp CLI/src/Coverage.cpp CLI/src/Repl.cpp CLI/src/Require.cpp TESTS_OBJECTS=$(TESTS_SOURCES:%=$(BUILD)/%.o) TESTS_TARGET=$(BUILD)/luau-tests -REPL_CLI_SOURCES=CLI/FileUtils.cpp CLI/Flags.cpp CLI/Profiler.cpp CLI/Coverage.cpp CLI/Repl.cpp CLI/ReplEntry.cpp CLI/Require.cpp +REPL_CLI_SOURCES=CLI/src/FileUtils.cpp CLI/src/Flags.cpp CLI/src/Profiler.cpp CLI/src/Coverage.cpp CLI/src/Repl.cpp CLI/src/ReplEntry.cpp CLI/src/Require.cpp REPL_CLI_OBJECTS=$(REPL_CLI_SOURCES:%=$(BUILD)/%.o) REPL_CLI_TARGET=$(BUILD)/luau -ANALYZE_CLI_SOURCES=CLI/FileUtils.cpp CLI/Flags.cpp CLI/Require.cpp CLI/Analyze.cpp +ANALYZE_CLI_SOURCES=CLI/src/FileUtils.cpp CLI/src/Flags.cpp CLI/src/Require.cpp CLI/src/Analyze.cpp ANALYZE_CLI_OBJECTS=$(ANALYZE_CLI_SOURCES:%=$(BUILD)/%.o) ANALYZE_CLI_TARGET=$(BUILD)/luau-analyze -COMPILE_CLI_SOURCES=CLI/FileUtils.cpp CLI/Flags.cpp CLI/Compile.cpp +COMPILE_CLI_SOURCES=CLI/src/FileUtils.cpp CLI/src/Flags.cpp CLI/src/Compile.cpp COMPILE_CLI_OBJECTS=$(COMPILE_CLI_SOURCES:%=$(BUILD)/%.o) COMPILE_CLI_TARGET=$(BUILD)/luau-compile -BYTECODE_CLI_SOURCES=CLI/FileUtils.cpp CLI/Flags.cpp CLI/Bytecode.cpp +BYTECODE_CLI_SOURCES=CLI/src/FileUtils.cpp CLI/src/Flags.cpp CLI/src/Bytecode.cpp BYTECODE_CLI_OBJECTS=$(BYTECODE_CLI_SOURCES:%=$(BUILD)/%.o) BYTECODE_CLI_TARGET=$(BUILD)/luau-bytecode @@ -149,11 +149,11 @@ $(EQSAT_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IEqSat/include $(CODEGEN_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -ICodeGen/include -IVM/include -IVM/src # Code generation needs VM internals $(VM_OBJECTS): CXXFLAGS+=-std=c++11 -ICommon/include -IVM/include $(ISOCLINE_OBJECTS): CXXFLAGS+=-Wno-unused-function -Iextern/isocline/include -$(TESTS_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IConfig/include -IAnalysis/include -IEqSat/include -ICodeGen/include -IVM/include -ICLI -Iextern -DDOCTEST_CONFIG_DOUBLE_STRINGIFY -$(REPL_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include -Iextern -Iextern/isocline/include -$(ANALYZE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -IAnalysis/include -IEqSat/include -IConfig/include -Iextern -$(COMPILE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include -$(BYTECODE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include +$(TESTS_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IConfig/include -IAnalysis/include -IEqSat/include -ICodeGen/include -IVM/include -ICLI/include -Iextern -DDOCTEST_CONFIG_DOUBLE_STRINGIFY +$(REPL_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include -Iextern -Iextern/isocline/include -ICLI/include +$(ANALYZE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -IAnalysis/include -IEqSat/include -IConfig/include -Iextern -ICLI/include +$(COMPILE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include -ICLI/include +$(BYTECODE_CLI_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IVM/include -ICodeGen/include -ICLI/include $(FUZZ_OBJECTS): CXXFLAGS+=-std=c++17 -ICommon/include -IAst/include -ICompiler/include -IAnalysis/include -IEqSat/include -IVM/include -ICodeGen/include -IConfig/include $(TESTS_TARGET): LDFLAGS+=-lpthread diff --git a/Sources.cmake b/Sources.cmake index 1adbe862..14bfe6a0 100644 --- a/Sources.cmake +++ b/Sources.cmake @@ -389,36 +389,39 @@ target_sources(isocline PRIVATE # Common sources shared between all CLI apps target_sources(Luau.CLI.lib PRIVATE - CLI/FileUtils.cpp - CLI/Flags.cpp - CLI/Flags.h - CLI/FileUtils.h + CLI/include/Luau/FileUtils.h + CLI/include/Luau/Flags.h + CLI/include/Luau/Require.h + + CLI/src/FileUtils.cpp + CLI/src/Flags.cpp + CLI/src/Require.cpp ) if(TARGET Luau.Repl.CLI) # Luau.Repl.CLI Sources target_sources(Luau.Repl.CLI PRIVATE - CLI/Coverage.h - CLI/Coverage.cpp - CLI/Profiler.h - CLI/Profiler.cpp - CLI/Repl.cpp - CLI/ReplEntry.cpp - CLI/Require.cpp) + CLI/include/Luau/Coverage.h + CLI/include/Luau/Profiler.h + + CLI/src/Coverage.cpp + CLI/src/Profiler.cpp + CLI/src/Repl.cpp + CLI/src/ReplEntry.cpp + ) endif() if(TARGET Luau.Analyze.CLI) # Luau.Analyze.CLI Sources target_sources(Luau.Analyze.CLI PRIVATE - CLI/Analyze.cpp - CLI/Require.cpp + CLI/src/Analyze.cpp ) endif() if(TARGET Luau.Ast.CLI) # Luau.Ast.CLI Sources target_sources(Luau.Ast.CLI PRIVATE - CLI/Ast.cpp + CLI/src/Ast.cpp ) endif() @@ -543,12 +546,12 @@ endif() if(TARGET Luau.CLI.Test) # Luau.CLI.Test Sources target_sources(Luau.CLI.Test PRIVATE - CLI/Coverage.h - CLI/Coverage.cpp - CLI/Profiler.h - CLI/Profiler.cpp - CLI/Repl.cpp - CLI/Require.cpp + CLI/include/Luau/Coverage.h + CLI/include/Luau/Profiler.h + + CLI/src/Coverage.cpp + CLI/src/Profiler.cpp + CLI/src/Repl.cpp tests/RegisterCallbacks.h tests/RegisterCallbacks.cpp @@ -560,24 +563,24 @@ endif() if(TARGET Luau.Web) # Luau.Web Sources target_sources(Luau.Web PRIVATE - CLI/Web.cpp) + CLI/src/Web.cpp) endif() if(TARGET Luau.Reduce.CLI) # Luau.Reduce.CLI Sources target_sources(Luau.Reduce.CLI PRIVATE - CLI/Reduce.cpp + CLI/src/Reduce.cpp ) endif() if(TARGET Luau.Compile.CLI) # Luau.Compile.CLI Sources target_sources(Luau.Compile.CLI PRIVATE - CLI/Compile.cpp) + CLI/src/Compile.cpp) endif() if(TARGET Luau.Bytecode.CLI) # Luau.Bytecode.CLI Sources target_sources(Luau.Bytecode.CLI PRIVATE - CLI/Bytecode.cpp) + CLI/src/Bytecode.cpp) endif() diff --git a/tests/Repl.test.cpp b/tests/Repl.test.cpp index 71a46878..5667badb 100644 --- a/tests/Repl.test.cpp +++ b/tests/Repl.test.cpp @@ -2,7 +2,7 @@ #include "lua.h" #include "lualib.h" -#include "Repl.h" +#include "Luau/Repl.h" #include "ScopedFlags.h" #include "doctest.h" diff --git a/tests/RequireByString.test.cpp b/tests/RequireByString.test.cpp index 574a4561..ff00a681 100644 --- a/tests/RequireByString.test.cpp +++ b/tests/RequireByString.test.cpp @@ -6,8 +6,8 @@ #include "lua.h" #include "lualib.h" -#include "Repl.h" -#include "FileUtils.h" +#include "Luau/Repl.h" +#include "Luau/FileUtils.h" #include "doctest.h" @@ -116,7 +116,7 @@ public: for (int i = 0; i < 20; ++i) { bool engineTestDir = isDirectory(luauDirAbs + "/Client/Luau/tests"); - bool luauTestDir = isDirectory(luauDirAbs + "/luau/tests/require"); + bool luauTestDir = isDirectory(luauDirAbs + "/tests/require"); if (engineTestDir || luauTestDir) { @@ -125,12 +125,6 @@ public: luauDirRel += "/Client/Luau"; luauDirAbs += "/Client/Luau"; } - else - { - luauDirRel += "/luau"; - luauDirAbs += "/luau"; - } - if (type == PathType::Relative) return luauDirRel;