diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ef616a..6d66c88 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v27 - - run: nix build -L - - run: nix build -L .#ml + - run: nix build -L .#ocaml + - run: nix build -L .#legacy - run: nix flake check -L diff --git a/CMakeLists.txt b/CMakeLists.txt index 72f5d15..afe479b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,26 +1,59 @@ cmake_minimum_required(VERSION 3.28) -project(haven C CXX ASM) +project(haven LANGUAGES NONE) cmake_policy(SET CMP0171 NEW) -include("CMakeDependentOption") -include(CheckCCompilerFlag) - include(build-etc/config.cmake) -include(build-etc/macros.cmake) +option(WITH_LEGACY_COMPILER "build the legacy C bootstrap compiler" OFF) + +find_program(DUNE_EXECUTABLE dune) +if (NOT DUNE_EXECUTABLE AND NOT WITH_LEGACY_COMPILER) + message(FATAL_ERROR "Dune is required to build the mainline OCaml Haven compiler") +endif () + +set(HAVEN_OCAML_BUILD_DIR "${CMAKE_SOURCE_DIR}/src/_build/default") +if (DUNE_EXECUTABLE) + if (WITH_LEGACY_COMPILER) + add_custom_target(haven_ml_cli + COMMAND ${DUNE_EXECUTABLE} build bin/haven.exe bin/hvfmt.exe bin/hvast.exe bin/lsp/hvlsp.exe + BYPRODUCTS + ${HAVEN_OCAML_BUILD_DIR}/bin/haven.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/hvfmt.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/hvast.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/lsp/hvlsp.exe + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src + COMMENT "Building mainline OCaml Haven compiler") + else () + add_custom_target(haven_ml_cli ALL + COMMAND ${DUNE_EXECUTABLE} build bin/haven.exe bin/hvfmt.exe bin/hvast.exe bin/lsp/hvlsp.exe + BYPRODUCTS + ${HAVEN_OCAML_BUILD_DIR}/bin/haven.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/hvfmt.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/hvast.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/lsp/hvlsp.exe + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src + COMMENT "Building mainline OCaml Haven compiler") + endif () +endif () + +if (WITH_LEGACY_COMPILER) + enable_language(C CXX ASM) -find_library(MALLOC NAMES jemalloc tcmalloc) + include(CheckCCompilerFlag) + include(build-etc/macros.cmake) -find_package(LLVM REQUIRED CONFIG) -find_package(Clang REQUIRED CONFIG) -find_package(GTest REQUIRED) -find_package(benchmark REQUIRED) -find_package(Doxygen) + find_library(MALLOC NAMES jemalloc tcmalloc) -include_directories(${LLVM_INCLUDE_DIRS}) -separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) -add_definitions(${LLVM_DEFINITIONS_LIST}) -link_directories(${LLVM_LIBRARY_DIRS}) + find_package(LLVM REQUIRED CONFIG) + find_package(Clang REQUIRED CONFIG) + find_package(GTest REQUIRED) + find_package(benchmark REQUIRED) + find_package(Doxygen) + + include_directories(${LLVM_INCLUDE_DIRS}) + separate_arguments(LLVM_DEFINITIONS_LIST NATIVE_COMMAND ${LLVM_DEFINITIONS}) + add_definitions(${LLVM_DEFINITIONS_LIST}) + link_directories(${LLVM_LIBRARY_DIRS}) # Possibly enable ASAN/TSAN/etc option(ASAN "address sanitizer" OFF) @@ -81,43 +114,41 @@ set(HAVEN_C_FLAGS "${HAVEN_DEFAULT_C_FLAGS}" CACHE STRING "C flags to pass to Ha string(REPLACE ";" " " HAVEN_C_FLAGS "${HAVEN_C_FLAGS}") # Flags for compiling Haven code -set(HAVEN_BOOTSTRAP_COMPILE_FLAGS "${HAVEN_C_FLAGS} --O2" CACHE STRING "flags to use when compiling Haven code with the bootstrap compiler") -set(HAVEN_COMPILE_FLAGS "${HAVEN_C_FLAGS} --O2" CACHE STRING "flags to use when compiling Haven code with the main compiler") + set(HAVEN_BOOTSTRAP_COMPILE_FLAGS "${HAVEN_C_FLAGS} --O2" CACHE STRING "flags to use when compiling Haven code with the bootstrap compiler") + set(HAVEN_COMPILE_FLAGS "${HAVEN_C_FLAGS} --O2" CACHE STRING "flags to use when compiling Haven code with the main compiler") -include(build-etc/compiler.cmake) + include(build-etc/compiler.cmake) -find_program(DUNE_EXECUTABLE dune) -if (DUNE_EXECUTABLE) - add_custom_target(haven_ml_cli - COMMAND ${DUNE_EXECUTABLE} build bin/haven.exe - BYPRODUCTS ${CMAKE_SOURCE_DIR}/src-ml/_build/default/bin/haven.exe - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src-ml - COMMENT "Building OCaml Haven compiler") -endif () + # Use jemalloc? + if (OTHER_MALLOC AND MALLOC) + set (CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} ${MALLOC}") + set (CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} ${MALLOC}") + endif () -# Use jemalloc? -if (OTHER_MALLOC AND MALLOC) - set (CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES} ${MALLOC}") - set (CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} ${MALLOC}") -endif () + include_directories(legacy/include legacy/src) -include_directories(include src) + enable_testing() -enable_testing() + add_subdirectory(legacy/src legacy-src) + add_subdirectory(src-new) + add_subdirectory(tests) + add_subdirectory(bench) -add_subdirectory(src) -add_subdirectory(src-new) -add_subdirectory(tests) -add_subdirectory(bench) + if (DOXYGEN_FOUND) + doxygen_add_docs(doxygen legacy/src legacy/include) + endif () -if (DOXYGEN_FOUND) - doxygen_add_docs(doxygen src include) + include(CTest) + install(TARGETS haven havenfmt hvast hdr2haven runtime + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + INCLUDES DESTINATION include) +else () + install(PROGRAMS + ${HAVEN_OCAML_BUILD_DIR}/bin/haven.exe + ${HAVEN_OCAML_BUILD_DIR}/bin/hvfmt.exe + DESTINATION bin) + install(PROGRAMS ${HAVEN_OCAML_BUILD_DIR}/bin/hvast.exe DESTINATION bin RENAME hvast-ml) + install(PROGRAMS ${HAVEN_OCAML_BUILD_DIR}/bin/lsp/hvlsp.exe DESTINATION bin RENAME haven-lsp) endif () - -include(CTest) - -install(TARGETS haven havenfmt runtime - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - INCLUDES DESTINATION include) diff --git a/README.md b/README.md index 96ca422..6f55ff6 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,17 @@ And, all else aside, I really just wanted to build a language that's optimized f ## The Compilers -This repository is split into two compilers: +This repository currently contains three compiler implementations: -1. The initial compiler, built in C, in `src` and `include`, and -2. The self-hosted compiler, written in Haven, currently in `src-new`. +1. The mainline compiler, written in OCaml, in `src`. +2. The original compiler, written in C, in `legacy/src` and `legacy/include`. +3. The experimental self-hosted compiler, written in Haven, in `src-new`. -The initial compiler in C is hardly production quality, and I'm trying to minimize how much additional effort -I invest into it outside of necessary additions or fixes to support the self-hosting effort. +The OCaml compiler is the maintained implementation and the default build target throughout the repository. +The C compiler is deprecated and retained as a historical bootstrap artifact. +It can still be built through CMake with `-DWITH_LEGACY_COMPILER=ON`. +`nix build` and plain CMake now both target the OCaml compiler by default; use `nix build .#legacy` +when you explicitly want the deprecated C compiler path. ## Fractal Example diff --git a/build-etc/macros.cmake b/build-etc/macros.cmake index 54be996..2fe3090 100644 --- a/build-etc/macros.cmake +++ b/build-etc/macros.cmake @@ -85,7 +85,7 @@ macro(add_ocaml_haven_library name source) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.o - COMMAND ${CMAKE_SOURCE_DIR}/src-ml/_build/default/bin/haven.exe ${HAVEN_SANITIZER_FLAGS} --trace --debug-ir -c ${HAVEN_COMPILE_FLAGS_LIST} ${CMAKE_CURRENT_SOURCE_DIR}/${source} -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.o + COMMAND ${CMAKE_SOURCE_DIR}/src/_build/default/bin/haven.exe ${HAVEN_SANITIZER_FLAGS} --trace --debug-ir -c ${HAVEN_COMPILE_FLAGS_LIST} ${CMAKE_CURRENT_SOURCE_DIR}/${source} -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.o MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/${source} DEPENDS haven_ml_cli ${ARGN} COMMENT "Building ${name} from ${source} [ocaml]" diff --git a/default.nix b/default.nix index 39c6607..5d44589 100644 --- a/default.nix +++ b/default.nix @@ -37,6 +37,7 @@ stdenv.mkDerivation { cmakeFlags = [ "-DLLVM_DIR=${llvmCmakeDir}" "-DHAVEN_C_FLAGS=${lib.escapeShellArg haven_c_flags}" + "-DWITH_LEGACY_COMPILER=ON" ]; postPatch = '' diff --git a/examples/syscall.hv b/examples/syscall.hv index 3faf70e..90750af 100644 --- a/examples/syscall.hv +++ b/examples/syscall.hv @@ -1,4 +1,4 @@ -// ./build/bin/haven examples/syscall.hv --asan --Xl -lruntime --Xl -Lbuild/lib +// ./src/_build/default/bin/haven.exe examples/syscall.hv --asan --Xl -lruntime --Xl -Lbuild/lib pub impure fn SYS_write(u32 fd, str buf, u64 count) -> i64; diff --git a/flake.nix b/flake.nix index 0574f4e..a924bd4 100644 --- a/flake.nix +++ b/flake.nix @@ -19,8 +19,8 @@ (old: { patches = (old.patches or [ ]) ++ [ ./nix/ocaml-llvm-macos-ext-dll.patch ]; }); - haven = pkgs.callPackage ./default.nix { inherit llvmPkgs llvmCmakeDir self; stdenv = llvmPkgs.stdenv; }; - havenMl = pkgs.callPackage ./src-ml/default.nix { + havenLegacy = pkgs.callPackage ./default.nix { inherit llvmPkgs llvmCmakeDir self; stdenv = llvmPkgs.stdenv; }; + havenOcaml = pkgs.callPackage ./src/default.nix { inherit llvmOcaml; llvmPackages = llvmPkgs; repoSrc = ./.; @@ -28,20 +28,44 @@ in { apps.default = { type = "app"; - program = "${haven}/bin/haven"; + program = "${havenOcaml}/bin/haven"; meta = with pkgs.lib; { description = "The Haven programming language"; license = licenses.mit; }; }; - packages.default = haven; - packages.ml = havenMl; + packages.default = havenOcaml; + packages.ocaml = havenOcaml; + packages.ml = havenOcaml; + packages.legacy = havenLegacy; - checks.ml = havenMl; + checks.default = havenOcaml; + checks.ocaml = havenOcaml; + checks.legacy = havenLegacy; devShells.default = pkgs.mkShell { - nativeBuildInputs = with pkgs; [ cmake ninja pkg-config llvmPkgs.clang llvmPkgs.libllvm llvmPkgs.lld gtest gbenchmark doxygen ]; + nativeBuildInputs = with pkgs; [ + cmake + ninja + pkg-config + dune_3 + ocamlPackages.ocaml + ocamlPackages.cmdliner + ocamlPackages.fmt + ocamlPackages.linol-lwt + ocamlPackages.logs + ocamlPackages.menhir + ocamlPackages.sedlex + ocamlPackages.yojson + llvmPkgs.clang + llvmPkgs.libllvm + llvmPkgs.lld + llvmOcaml + gtest + gbenchmark + doxygen + ]; CMAKE_PREFIX_PATH = llvmCmakeDir; }; }); diff --git a/legacy/README.md b/legacy/README.md new file mode 100644 index 0000000..1630062 --- /dev/null +++ b/legacy/README.md @@ -0,0 +1,6 @@ +# Legacy compiler + +This directory contains the original C implementation of the Haven compiler. +It is deprecated and kept primarily as a historical bootstrap artifact. + +Use `-DWITH_LEGACY_COMPILER=ON` when you explicitly want to build it through CMake. diff --git a/include/ast.h b/legacy/include/ast.h similarity index 100% rename from include/ast.h rename to legacy/include/ast.h diff --git a/include/cfold.h b/legacy/include/cfold.h similarity index 100% rename from include/cfold.h rename to legacy/include/cfold.h diff --git a/include/cimport.h b/legacy/include/cimport.h similarity index 100% rename from include/cimport.h rename to legacy/include/cimport.h diff --git a/include/codegen.h b/legacy/include/codegen.h similarity index 100% rename from include/codegen.h rename to legacy/include/codegen.h diff --git a/include/compiler.h b/legacy/include/compiler.h similarity index 100% rename from include/compiler.h rename to legacy/include/compiler.h diff --git a/include/desugar.h b/legacy/include/desugar.h similarity index 100% rename from include/desugar.h rename to legacy/include/desugar.h diff --git a/include/hashmap.h b/legacy/include/hashmap.h similarity index 100% rename from include/hashmap.h rename to legacy/include/hashmap.h diff --git a/include/intern.h b/legacy/include/intern.h similarity index 100% rename from include/intern.h rename to legacy/include/intern.h diff --git a/include/kv.h b/legacy/include/kv.h similarity index 100% rename from include/kv.h rename to legacy/include/kv.h diff --git a/include/lex.h b/legacy/include/lex.h similarity index 100% rename from include/lex.h rename to legacy/include/lex.h diff --git a/include/parse.h b/legacy/include/parse.h similarity index 100% rename from include/parse.h rename to legacy/include/parse.h diff --git a/include/purity.h b/legacy/include/purity.h similarity index 100% rename from include/purity.h rename to legacy/include/purity.h diff --git a/include/scope.h b/legacy/include/scope.h similarity index 100% rename from include/scope.h rename to legacy/include/scope.h diff --git a/include/semantic.h b/legacy/include/semantic.h similarity index 100% rename from include/semantic.h rename to legacy/include/semantic.h diff --git a/include/tokens.h b/legacy/include/tokens.h similarity index 100% rename from include/tokens.h rename to legacy/include/tokens.h diff --git a/include/tokenstream.h b/legacy/include/tokenstream.h similarity index 100% rename from include/tokenstream.h rename to legacy/include/tokenstream.h diff --git a/include/trie.h b/legacy/include/trie.h similarity index 100% rename from include/trie.h rename to legacy/include/trie.h diff --git a/include/typecheck.h b/legacy/include/typecheck.h similarity index 100% rename from include/typecheck.h rename to legacy/include/typecheck.h diff --git a/include/types.h b/legacy/include/types.h similarity index 100% rename from include/types.h rename to legacy/include/types.h diff --git a/include/utility.h b/legacy/include/utility.h similarity index 100% rename from include/utility.h rename to legacy/include/utility.h diff --git a/src/CMakeLists.txt b/legacy/src/CMakeLists.txt similarity index 100% rename from src/CMakeLists.txt rename to legacy/src/CMakeLists.txt diff --git a/src/ast/CMakeLists.txt b/legacy/src/ast/CMakeLists.txt similarity index 100% rename from src/ast/CMakeLists.txt rename to legacy/src/ast/CMakeLists.txt diff --git a/src/ast/ast.c b/legacy/src/ast/ast.c similarity index 100% rename from src/ast/ast.c rename to legacy/src/ast/ast.c diff --git a/src/ast/ast_dump.c b/legacy/src/ast/ast_dump.c similarity index 100% rename from src/ast/ast_dump.c rename to legacy/src/ast/ast_dump.c diff --git a/src/ast/ast_emit.c b/legacy/src/ast/ast_emit.c similarity index 100% rename from src/ast/ast_emit.c rename to legacy/src/ast/ast_emit.c diff --git a/src/ast/ast_free.c b/legacy/src/ast/ast_free.c similarity index 100% rename from src/ast/ast_free.c rename to legacy/src/ast/ast_free.c diff --git a/src/ast/visitor.c b/legacy/src/ast/visitor.c similarity index 100% rename from src/ast/visitor.c rename to legacy/src/ast/visitor.c diff --git a/src/bins/CMakeLists.txt b/legacy/src/bins/CMakeLists.txt similarity index 100% rename from src/bins/CMakeLists.txt rename to legacy/src/bins/CMakeLists.txt diff --git a/src/bins/haven/CMakeLists.txt b/legacy/src/bins/haven/CMakeLists.txt similarity index 100% rename from src/bins/haven/CMakeLists.txt rename to legacy/src/bins/haven/CMakeLists.txt diff --git a/src/bins/haven/main.c b/legacy/src/bins/haven/main.c similarity index 100% rename from src/bins/haven/main.c rename to legacy/src/bins/haven/main.c diff --git a/src/bins/haven/main.hv b/legacy/src/bins/haven/main.hv similarity index 100% rename from src/bins/haven/main.hv rename to legacy/src/bins/haven/main.hv diff --git a/src/bins/havenfmt/CMakeLists.txt b/legacy/src/bins/havenfmt/CMakeLists.txt similarity index 100% rename from src/bins/havenfmt/CMakeLists.txt rename to legacy/src/bins/havenfmt/CMakeLists.txt diff --git a/src/bins/havenfmt/havenfmt.c b/legacy/src/bins/havenfmt/havenfmt.c similarity index 100% rename from src/bins/havenfmt/havenfmt.c rename to legacy/src/bins/havenfmt/havenfmt.c diff --git a/src/bins/hdr2haven/CMakeLists.txt b/legacy/src/bins/hdr2haven/CMakeLists.txt similarity index 100% rename from src/bins/hdr2haven/CMakeLists.txt rename to legacy/src/bins/hdr2haven/CMakeLists.txt diff --git a/src/bins/hdr2haven/main.c b/legacy/src/bins/hdr2haven/main.c similarity index 100% rename from src/bins/hdr2haven/main.c rename to legacy/src/bins/hdr2haven/main.c diff --git a/src/bins/hvast/CMakeLists.txt b/legacy/src/bins/hvast/CMakeLists.txt similarity index 100% rename from src/bins/hvast/CMakeLists.txt rename to legacy/src/bins/hvast/CMakeLists.txt diff --git a/src/bins/hvast/main.c b/legacy/src/bins/hvast/main.c similarity index 100% rename from src/bins/hvast/main.c rename to legacy/src/bins/hvast/main.c diff --git a/src/cimport/CMakeLists.txt b/legacy/src/cimport/CMakeLists.txt similarity index 100% rename from src/cimport/CMakeLists.txt rename to legacy/src/cimport/CMakeLists.txt diff --git a/src/cimport/cimport.c b/legacy/src/cimport/cimport.c similarity index 100% rename from src/cimport/cimport.c rename to legacy/src/cimport/cimport.c diff --git a/src/cimport/cimport.hv b/legacy/src/cimport/cimport.hv similarity index 100% rename from src/cimport/cimport.hv rename to legacy/src/cimport/cimport.hv diff --git a/src/cimport/clex.hv b/legacy/src/cimport/clex.hv similarity index 100% rename from src/cimport/clex.hv rename to legacy/src/cimport/clex.hv diff --git a/src/codegen/CMakeLists.txt b/legacy/src/codegen/CMakeLists.txt similarity index 100% rename from src/codegen/CMakeLists.txt rename to legacy/src/codegen/CMakeLists.txt diff --git a/src/codegen/binary.c b/legacy/src/codegen/binary.c similarity index 100% rename from src/codegen/binary.c rename to legacy/src/codegen/binary.c diff --git a/src/codegen/codegen.c b/legacy/src/codegen/codegen.c similarity index 100% rename from src/codegen/codegen.c rename to legacy/src/codegen/codegen.c diff --git a/src/codegen/emit.c b/legacy/src/codegen/emit.c similarity index 100% rename from src/codegen/emit.c rename to legacy/src/codegen/emit.c diff --git a/src/codegen/expr.c b/legacy/src/codegen/expr.c similarity index 100% rename from src/codegen/expr.c rename to legacy/src/codegen/expr.c diff --git a/src/codegen/fdecl.c b/legacy/src/codegen/fdecl.c similarity index 100% rename from src/codegen/fdecl.c rename to legacy/src/codegen/fdecl.c diff --git a/src/codegen/if.c b/legacy/src/codegen/if.c similarity index 100% rename from src/codegen/if.c rename to legacy/src/codegen/if.c diff --git a/src/codegen/internal.h b/legacy/src/codegen/internal.h similarity index 100% rename from src/codegen/internal.h rename to legacy/src/codegen/internal.h diff --git a/src/codegen/llvm.c b/legacy/src/codegen/llvm.c similarity index 100% rename from src/codegen/llvm.c rename to legacy/src/codegen/llvm.c diff --git a/src/codegen/lvalue.c b/legacy/src/codegen/lvalue.c similarity index 100% rename from src/codegen/lvalue.c rename to legacy/src/codegen/lvalue.c diff --git a/src/codegen/match.c b/legacy/src/codegen/match.c similarity index 100% rename from src/codegen/match.c rename to legacy/src/codegen/match.c diff --git a/src/codegen/preamble.c b/legacy/src/codegen/preamble.c similarity index 100% rename from src/codegen/preamble.c rename to legacy/src/codegen/preamble.c diff --git a/src/codegen/stmt.c b/legacy/src/codegen/stmt.c similarity index 100% rename from src/codegen/stmt.c rename to legacy/src/codegen/stmt.c diff --git a/src/codegen/utils.c b/legacy/src/codegen/utils.c similarity index 100% rename from src/codegen/utils.c rename to legacy/src/codegen/utils.c diff --git a/src/codegen/vdecl.c b/legacy/src/codegen/vdecl.c similarity index 100% rename from src/codegen/vdecl.c rename to legacy/src/codegen/vdecl.c diff --git a/src/compiler/CMakeLists.txt b/legacy/src/compiler/CMakeLists.txt similarity index 100% rename from src/compiler/CMakeLists.txt rename to legacy/src/compiler/CMakeLists.txt diff --git a/src/compiler/compiler.c b/legacy/src/compiler/compiler.c similarity index 100% rename from src/compiler/compiler.c rename to legacy/src/compiler/compiler.c diff --git a/src/compiler/diag.c b/legacy/src/compiler/diag.c similarity index 100% rename from src/compiler/diag.c rename to legacy/src/compiler/diag.c diff --git a/src/compiler/flags.c b/legacy/src/compiler/flags.c similarity index 100% rename from src/compiler/flags.c rename to legacy/src/compiler/flags.c diff --git a/src/compiler/import.c b/legacy/src/compiler/import.c similarity index 100% rename from src/compiler/import.c rename to legacy/src/compiler/import.c diff --git a/src/compiler/internal.h b/legacy/src/compiler/internal.h similarity index 100% rename from src/compiler/internal.h rename to legacy/src/compiler/internal.h diff --git a/src/compiler/link.c b/legacy/src/compiler/link.c similarity index 100% rename from src/compiler/link.c rename to legacy/src/compiler/link.c diff --git a/src/compiler/platform.c b/legacy/src/compiler/platform.c similarity index 100% rename from src/compiler/platform.c rename to legacy/src/compiler/platform.c diff --git a/src/compiler/search.c b/legacy/src/compiler/search.c similarity index 100% rename from src/compiler/search.c rename to legacy/src/compiler/search.c diff --git a/src/lexer/CMakeLists.txt b/legacy/src/lexer/CMakeLists.txt similarity index 100% rename from src/lexer/CMakeLists.txt rename to legacy/src/lexer/CMakeLists.txt diff --git a/src/lexer/comment.c b/legacy/src/lexer/comment.c similarity index 100% rename from src/lexer/comment.c rename to legacy/src/lexer/comment.c diff --git a/src/lexer/diag.c b/legacy/src/lexer/diag.c similarity index 100% rename from src/lexer/diag.c rename to legacy/src/lexer/diag.c diff --git a/src/lexer/int.c b/legacy/src/lexer/int.c similarity index 100% rename from src/lexer/int.c rename to legacy/src/lexer/int.c diff --git a/src/lexer/internal.h b/legacy/src/lexer/internal.h similarity index 100% rename from src/lexer/internal.h rename to legacy/src/lexer/internal.h diff --git a/src/lexer/itype.c b/legacy/src/lexer/itype.c similarity index 100% rename from src/lexer/itype.c rename to legacy/src/lexer/itype.c diff --git a/src/lexer/kw.c b/legacy/src/lexer/kw.c similarity index 100% rename from src/lexer/kw.c rename to legacy/src/lexer/kw.c diff --git a/src/lexer/lex.c b/legacy/src/lexer/lex.c similarity index 100% rename from src/lexer/lex.c rename to legacy/src/lexer/lex.c diff --git a/src/lexer/mat.c b/legacy/src/lexer/mat.c similarity index 100% rename from src/lexer/mat.c rename to legacy/src/lexer/mat.c diff --git a/src/lexer/str.c b/legacy/src/lexer/str.c similarity index 100% rename from src/lexer/str.c rename to legacy/src/lexer/str.c diff --git a/src/lexer/stream.c b/legacy/src/lexer/stream.c similarity index 100% rename from src/lexer/stream.c rename to legacy/src/lexer/stream.c diff --git a/src/lexer/token.c b/legacy/src/lexer/token.c similarity index 100% rename from src/lexer/token.c rename to legacy/src/lexer/token.c diff --git a/src/lexer/vec.c b/legacy/src/lexer/vec.c similarity index 100% rename from src/lexer/vec.c rename to legacy/src/lexer/vec.c diff --git a/src/parser/CMakeLists.txt b/legacy/src/parser/CMakeLists.txt similarity index 100% rename from src/parser/CMakeLists.txt rename to legacy/src/parser/CMakeLists.txt diff --git a/src/parser/block.c b/legacy/src/parser/block.c similarity index 100% rename from src/parser/block.c rename to legacy/src/parser/block.c diff --git a/src/parser/enum.c b/legacy/src/parser/enum.c similarity index 100% rename from src/parser/enum.c rename to legacy/src/parser/enum.c diff --git a/src/parser/expression.c b/legacy/src/parser/expression.c similarity index 100% rename from src/parser/expression.c rename to legacy/src/parser/expression.c diff --git a/src/parser/internal.h b/legacy/src/parser/internal.h similarity index 100% rename from src/parser/internal.h rename to legacy/src/parser/internal.h diff --git a/src/parser/parse.c b/legacy/src/parser/parse.c similarity index 100% rename from src/parser/parse.c rename to legacy/src/parser/parse.c diff --git a/src/parser/pattern.c b/legacy/src/parser/pattern.c similarity index 100% rename from src/parser/pattern.c rename to legacy/src/parser/pattern.c diff --git a/src/parser/preamble.c b/legacy/src/parser/preamble.c similarity index 100% rename from src/parser/preamble.c rename to legacy/src/parser/preamble.c diff --git a/src/parser/range.c b/legacy/src/parser/range.c similarity index 100% rename from src/parser/range.c rename to legacy/src/parser/range.c diff --git a/src/parser/statement.c b/legacy/src/parser/statement.c similarity index 100% rename from src/parser/statement.c rename to legacy/src/parser/statement.c diff --git a/src/parser/struct.c b/legacy/src/parser/struct.c similarity index 100% rename from src/parser/struct.c rename to legacy/src/parser/struct.c diff --git a/src/parser/tables.c b/legacy/src/parser/tables.c similarity index 100% rename from src/parser/tables.c rename to legacy/src/parser/tables.c diff --git a/src/parser/toplevel.c b/legacy/src/parser/toplevel.c similarity index 100% rename from src/parser/toplevel.c rename to legacy/src/parser/toplevel.c diff --git a/src/parser/types.c b/legacy/src/parser/types.c similarity index 100% rename from src/parser/types.c rename to legacy/src/parser/types.c diff --git a/src/parser/util.c b/legacy/src/parser/util.c similarity index 100% rename from src/parser/util.c rename to legacy/src/parser/util.c diff --git a/src/passes/CMakeLists.txt b/legacy/src/passes/CMakeLists.txt similarity index 100% rename from src/passes/CMakeLists.txt rename to legacy/src/passes/CMakeLists.txt diff --git a/src/passes/cfold.c b/legacy/src/passes/cfold.c similarity index 100% rename from src/passes/cfold.c rename to legacy/src/passes/cfold.c diff --git a/src/passes/desugar.c b/legacy/src/passes/desugar.c similarity index 100% rename from src/passes/desugar.c rename to legacy/src/passes/desugar.c diff --git a/src/passes/purity.c b/legacy/src/passes/purity.c similarity index 100% rename from src/passes/purity.c rename to legacy/src/passes/purity.c diff --git a/src/passes/purity.hv b/legacy/src/passes/purity.hv similarity index 100% rename from src/passes/purity.hv rename to legacy/src/passes/purity.hv diff --git a/src/passes/semantic.c b/legacy/src/passes/semantic.c similarity index 100% rename from src/passes/semantic.c rename to legacy/src/passes/semantic.c diff --git a/src/passes/tyimplicit.c b/legacy/src/passes/tyimplicit.c similarity index 100% rename from src/passes/tyimplicit.c rename to legacy/src/passes/tyimplicit.c diff --git a/src/passes/typecheck/CMakeLists.txt b/legacy/src/passes/typecheck/CMakeLists.txt similarity index 100% rename from src/passes/typecheck/CMakeLists.txt rename to legacy/src/passes/typecheck/CMakeLists.txt diff --git a/src/passes/typecheck/expr.c b/legacy/src/passes/typecheck/expr.c similarity index 100% rename from src/passes/typecheck/expr.c rename to legacy/src/passes/typecheck/expr.c diff --git a/src/passes/typecheck/implicit.c b/legacy/src/passes/typecheck/implicit.c similarity index 100% rename from src/passes/typecheck/implicit.c rename to legacy/src/passes/typecheck/implicit.c diff --git a/src/passes/typecheck/internal.h b/legacy/src/passes/typecheck/internal.h similarity index 100% rename from src/passes/typecheck/internal.h rename to legacy/src/passes/typecheck/internal.h diff --git a/src/passes/typecheck/resolve.c b/legacy/src/passes/typecheck/resolve.c similarity index 100% rename from src/passes/typecheck/resolve.c rename to legacy/src/passes/typecheck/resolve.c diff --git a/src/passes/typecheck/typecheck.c b/legacy/src/passes/typecheck/typecheck.c similarity index 100% rename from src/passes/typecheck/typecheck.c rename to legacy/src/passes/typecheck/typecheck.c diff --git a/src/passes/typecheck/util.c b/legacy/src/passes/typecheck/util.c similarity index 100% rename from src/passes/typecheck/util.c rename to legacy/src/passes/typecheck/util.c diff --git a/src/passes/tyverify.c b/legacy/src/passes/tyverify.c similarity index 100% rename from src/passes/tyverify.c rename to legacy/src/passes/tyverify.c diff --git a/src/runtime/CMakeLists.txt b/legacy/src/runtime/CMakeLists.txt similarity index 100% rename from src/runtime/CMakeLists.txt rename to legacy/src/runtime/CMakeLists.txt diff --git a/src/runtime/box.hv b/legacy/src/runtime/box.hv similarity index 100% rename from src/runtime/box.hv rename to legacy/src/runtime/box.hv diff --git a/src/runtime/codegen/CMakeLists.txt b/legacy/src/runtime/codegen/CMakeLists.txt similarity index 100% rename from src/runtime/codegen/CMakeLists.txt rename to legacy/src/runtime/codegen/CMakeLists.txt diff --git a/src/runtime/codegen/gen_unistd_fallback.hv b/legacy/src/runtime/codegen/gen_unistd_fallback.hv similarity index 100% rename from src/runtime/codegen/gen_unistd_fallback.hv rename to legacy/src/runtime/codegen/gen_unistd_fallback.hv diff --git a/src/runtime/index.hv b/legacy/src/runtime/index.hv similarity index 100% rename from src/runtime/index.hv rename to legacy/src/runtime/index.hv diff --git a/src/runtime/syscall-amd64.s b/legacy/src/runtime/syscall-amd64.s similarity index 100% rename from src/runtime/syscall-amd64.s rename to legacy/src/runtime/syscall-amd64.s diff --git a/src/runtime/syscall.c b/legacy/src/runtime/syscall.c similarity index 100% rename from src/runtime/syscall.c rename to legacy/src/runtime/syscall.c diff --git a/src/runtime/syscall.hv b/legacy/src/runtime/syscall.hv similarity index 100% rename from src/runtime/syscall.hv rename to legacy/src/runtime/syscall.hv diff --git a/src/tokens/CMakeLists.txt b/legacy/src/tokens/CMakeLists.txt similarity index 100% rename from src/tokens/CMakeLists.txt rename to legacy/src/tokens/CMakeLists.txt diff --git a/src/tokens/tokens.c b/legacy/src/tokens/tokens.c similarity index 100% rename from src/tokens/tokens.c rename to legacy/src/tokens/tokens.c diff --git a/src/types/CMakeLists.txt b/legacy/src/types/CMakeLists.txt similarity index 100% rename from src/types/CMakeLists.txt rename to legacy/src/types/CMakeLists.txt diff --git a/src/types/repository.c b/legacy/src/types/repository.c similarity index 100% rename from src/types/repository.c rename to legacy/src/types/repository.c diff --git a/src/types/types.c b/legacy/src/types/types.c similarity index 100% rename from src/types/types.c rename to legacy/src/types/types.c diff --git a/src/utilities/CMakeLists.txt b/legacy/src/utilities/CMakeLists.txt similarity index 100% rename from src/utilities/CMakeLists.txt rename to legacy/src/utilities/CMakeLists.txt diff --git a/src/utilities/hashmap.hv b/legacy/src/utilities/hashmap.hv similarity index 100% rename from src/utilities/hashmap.hv rename to legacy/src/utilities/hashmap.hv diff --git a/src/utilities/intern.hv b/legacy/src/utilities/intern.hv similarity index 100% rename from src/utilities/intern.hv rename to legacy/src/utilities/intern.hv diff --git a/src/utilities/kv.c b/legacy/src/utilities/kv.c similarity index 100% rename from src/utilities/kv.c rename to legacy/src/utilities/kv.c diff --git a/src/utilities/kv.hv b/legacy/src/utilities/kv.hv similarity index 100% rename from src/utilities/kv.hv rename to legacy/src/utilities/kv.hv diff --git a/src/utilities/scope.c b/legacy/src/utilities/scope.c similarity index 100% rename from src/utilities/scope.c rename to legacy/src/utilities/scope.c diff --git a/src/utilities/scope.hv b/legacy/src/utilities/scope.hv similarity index 100% rename from src/utilities/scope.hv rename to legacy/src/utilities/scope.hv diff --git a/src/utilities/string_builder.c b/legacy/src/utilities/string_builder.c similarity index 100% rename from src/utilities/string_builder.c rename to legacy/src/utilities/string_builder.c diff --git a/src/utilities/tokenstream.c b/legacy/src/utilities/tokenstream.c similarity index 100% rename from src/utilities/tokenstream.c rename to legacy/src/utilities/tokenstream.c diff --git a/src/utilities/trie.c b/legacy/src/utilities/trie.c similarity index 100% rename from src/utilities/trie.c rename to legacy/src/utilities/trie.c diff --git a/src/utilities/trie.hv b/legacy/src/utilities/trie.hv similarity index 100% rename from src/utilities/trie.hv rename to legacy/src/utilities/trie.hv diff --git a/src/utilities/utils.hv b/legacy/src/utilities/utils.hv similarity index 100% rename from src/utilities/utils.hv rename to legacy/src/utilities/utils.hv diff --git a/run.sh b/run.sh index 67781f4..b125bc6 100755 --- a/run.sh +++ b/run.sh @@ -6,8 +6,8 @@ set -o pipefail FILENAME=$1 shift -COMPILER="./build/bin/haven" -# COMPILER="./build/bin/haven_bootstrap" +COMPILER="./src/_build/default/bin/haven.exe" +# LEGACY_COMPILER="./build/bin/haven" OPT="O2" ASAN="--asan" diff --git a/scripts/verify-examples-compile.sh b/scripts/verify-examples-compile.sh index c66ac1b..6ae6c26 100755 --- a/scripts/verify-examples-compile.sh +++ b/scripts/verify-examples-compile.sh @@ -5,13 +5,16 @@ set -eu SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) REPO_DIR=$(dirname "${SCRIPT_DIR}") -COMPILER=${REPO_DIR}/build/bin/haven +COMPILER=${REPO_DIR}/src/_build/default/bin/haven.exe if [ ! -x ${COMPILER} ]; then - COMPILER=bin/haven + COMPILER=${REPO_DIR}/build/bin/haven if [ ! -x ${COMPILER} ]; then - echo "Expected a built Haven compiler in build/bin/ or bin/ - build the compiler first." - exit 1 + COMPILER=bin/haven + if [ ! -x ${COMPILER} ]; then + echo "Expected a built Haven compiler in src/_build/default/bin/, build/bin/, or bin/ - build the compiler first." + exit 1 + fi fi fi diff --git a/src-ml/README.md b/src-ml/README.md deleted file mode 100644 index 8582f7a..0000000 --- a/src-ml/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# src-ml: OCaml - -This is the "compiler in between" - the C compiler is increasingly complex to maintain, and -Haven isn't quite ready to fully replace C. diff --git a/src-ml/.gitignore b/src/.gitignore similarity index 100% rename from src-ml/.gitignore rename to src/.gitignore diff --git a/src-ml/.ocamlformat b/src/.ocamlformat similarity index 100% rename from src-ml/.ocamlformat rename to src/.ocamlformat diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..b99eff0 --- /dev/null +++ b/src/README.md @@ -0,0 +1,5 @@ +# src: OCaml compiler + +This is the mainline Haven compiler implementation. +The older C compiler now lives in `../legacy/` as a deprecated historical bootstrap artifact, +while the experimental self-hosted compiler remains in `../src-new/`. diff --git a/src-ml/bin/dune b/src/bin/dune similarity index 100% rename from src-ml/bin/dune rename to src/bin/dune diff --git a/src-ml/bin/haven.ml b/src/bin/haven.ml similarity index 100% rename from src-ml/bin/haven.ml rename to src/bin/haven.ml diff --git a/src-ml/bin/hvast.ml b/src/bin/hvast.ml similarity index 100% rename from src-ml/bin/hvast.ml rename to src/bin/hvast.ml diff --git a/src-ml/bin/hvfmt.ml b/src/bin/hvfmt.ml similarity index 100% rename from src-ml/bin/hvfmt.ml rename to src/bin/hvfmt.ml diff --git a/src-ml/bin/lsp/code_lenses.ml b/src/bin/lsp/code_lenses.ml similarity index 100% rename from src-ml/bin/lsp/code_lenses.ml rename to src/bin/lsp/code_lenses.ml diff --git a/src-ml/bin/lsp/document_store.ml b/src/bin/lsp/document_store.ml similarity index 100% rename from src-ml/bin/lsp/document_store.ml rename to src/bin/lsp/document_store.ml diff --git a/src-ml/bin/lsp/document_structure.ml b/src/bin/lsp/document_structure.ml similarity index 100% rename from src-ml/bin/lsp/document_structure.ml rename to src/bin/lsp/document_structure.ml diff --git a/src-ml/bin/lsp/document_symbols.ml b/src/bin/lsp/document_symbols.ml similarity index 100% rename from src-ml/bin/lsp/document_symbols.ml rename to src/bin/lsp/document_symbols.ml diff --git a/src-ml/bin/lsp/dune b/src/bin/lsp/dune similarity index 100% rename from src-ml/bin/lsp/dune rename to src/bin/lsp/dune diff --git a/src-ml/bin/lsp/haven_lsp.ml b/src/bin/lsp/haven_lsp.ml similarity index 100% rename from src-ml/bin/lsp/haven_lsp.ml rename to src/bin/lsp/haven_lsp.ml diff --git a/src-ml/bin/lsp/hover_info.ml b/src/bin/lsp/hover_info.ml similarity index 100% rename from src-ml/bin/lsp/hover_info.ml rename to src/bin/lsp/hover_info.ml diff --git a/src-ml/bin/lsp/hvlsp.ml b/src/bin/lsp/hvlsp.ml similarity index 100% rename from src-ml/bin/lsp/hvlsp.ml rename to src/bin/lsp/hvlsp.ml diff --git a/src-ml/bin/lsp/inlay_hints.ml b/src/bin/lsp/inlay_hints.ml similarity index 100% rename from src-ml/bin/lsp/inlay_hints.ml rename to src/bin/lsp/inlay_hints.ml diff --git a/src-ml/bin/lsp/lsp_helpers.ml b/src/bin/lsp/lsp_helpers.ml similarity index 100% rename from src-ml/bin/lsp/lsp_helpers.ml rename to src/bin/lsp/lsp_helpers.ml diff --git a/src-ml/bin/lsp/semantic_tokens.ml b/src/bin/lsp/semantic_tokens.ml similarity index 100% rename from src-ml/bin/lsp/semantic_tokens.ml rename to src/bin/lsp/semantic_tokens.ml diff --git a/src-ml/bin/lsp/symbol_resolution.ml b/src/bin/lsp/symbol_resolution.ml similarity index 100% rename from src-ml/bin/lsp/symbol_resolution.ml rename to src/bin/lsp/symbol_resolution.ml diff --git a/src-ml/default.nix b/src/default.nix similarity index 54% rename from src-ml/default.nix rename to src/default.nix index b1a214b..6a327b5 100644 --- a/src-ml/default.nix +++ b/src/default.nix @@ -20,6 +20,7 @@ ocamlPackages.buildDunePackage { ocamlPackages.menhir ]; propagatedBuildInputs = [ + ocamlPackages.cmdliner ocamlPackages.fmt ocamlPackages.linol-lwt llvmOcaml @@ -29,11 +30,18 @@ ocamlPackages.buildDunePackage { ]; buildPhase = '' - # Keep the Nix build focused on the OCaml build/test entrypoint. - dune build @runtest + runHook preBuild + dune build @runtest bin/haven.exe bin/hvfmt.exe bin/hvast.exe bin/lsp/hvlsp.exe + runHook postBuild ''; installPhase = '' - mkdir -p $out + runHook preInstall + mkdir -p $out/bin + cp _build/default/bin/haven.exe $out/bin/haven + cp _build/default/bin/hvfmt.exe $out/bin/hvfmt + cp _build/default/bin/hvast.exe $out/bin/hvast-ml + cp _build/default/bin/lsp/hvlsp.exe $out/bin/haven-lsp + runHook postInstall ''; } diff --git a/src-ml/dune-project b/src/dune-project similarity index 82% rename from src-ml/dune-project rename to src/dune-project index a640b66..2802de3 100644 --- a/src-ml/dune-project +++ b/src/dune-project @@ -19,7 +19,7 @@ (name haven) (synopsis "The Haven compiler") (description "The Haven compiler") - (depends ocaml sedlex menhir unix yojson llvm) + (depends ocaml cmdliner fmt linol-lwt logs menhir menhirLib sedlex unix yojson llvm) (tags (compiler))) (using menhir 3.0) diff --git a/src-ml/haven.opam b/src/haven.opam similarity index 93% rename from src-ml/haven.opam rename to src/haven.opam index 21153b1..1c1c196 100644 --- a/src-ml/haven.opam +++ b/src/haven.opam @@ -12,11 +12,16 @@ bug-reports: "https://github.com/username/reponame/issues" depends: [ "dune" {>= "3.19"} "ocaml" - "llvm" - "sedlex" + "cmdliner" + "fmt" + "linol-lwt" + "logs" "menhir" + "menhirLib" + "sedlex" "unix" "yojson" + "llvm" "odoc" {with-doc} ] build: [ diff --git a/src-ml/lib/ast/analysis.ml b/src/lib/ast/analysis.ml similarity index 100% rename from src-ml/lib/ast/analysis.ml rename to src/lib/ast/analysis.ml diff --git a/src-ml/lib/ast/analysis_cfold.ml b/src/lib/ast/analysis_cfold.ml similarity index 100% rename from src-ml/lib/ast/analysis_cfold.ml rename to src/lib/ast/analysis_cfold.ml diff --git a/src-ml/lib/ast/analysis_cleanup.ml b/src/lib/ast/analysis_cleanup.ml similarity index 100% rename from src-ml/lib/ast/analysis_cleanup.ml rename to src/lib/ast/analysis_cleanup.ml diff --git a/src-ml/lib/ast/analysis_ownership.ml b/src/lib/ast/analysis_ownership.ml similarity index 100% rename from src-ml/lib/ast/analysis_ownership.ml rename to src/lib/ast/analysis_ownership.ml diff --git a/src-ml/lib/ast/analysis_purity.ml b/src/lib/ast/analysis_purity.ml similarity index 100% rename from src-ml/lib/ast/analysis_purity.ml rename to src/lib/ast/analysis_purity.ml diff --git a/src-ml/lib/ast/analysis_semantic.ml b/src/lib/ast/analysis_semantic.ml similarity index 100% rename from src-ml/lib/ast/analysis_semantic.ml rename to src/lib/ast/analysis_semantic.ml diff --git a/src-ml/lib/ast/analysis_types.ml b/src/lib/ast/analysis_types.ml similarity index 100% rename from src-ml/lib/ast/analysis_types.ml rename to src/lib/ast/analysis_types.ml diff --git a/src-ml/lib/ast/analysis_typing.ml b/src/lib/ast/analysis_typing.ml similarity index 100% rename from src-ml/lib/ast/analysis_typing.ml rename to src/lib/ast/analysis_typing.ml diff --git a/src-ml/lib/ast/analysis_verify.ml b/src/lib/ast/analysis_verify.ml similarity index 100% rename from src-ml/lib/ast/analysis_verify.ml rename to src/lib/ast/analysis_verify.ml diff --git a/src-ml/lib/ast/ast.ml b/src/lib/ast/ast.ml similarity index 100% rename from src-ml/lib/ast/ast.ml rename to src/lib/ast/ast.ml diff --git a/src-ml/lib/ast/cimport.ml b/src/lib/ast/cimport.ml similarity index 100% rename from src-ml/lib/ast/cimport.ml rename to src/lib/ast/cimport.ml diff --git a/src-ml/lib/ast/convert.ml b/src/lib/ast/convert.ml similarity index 100% rename from src-ml/lib/ast/convert.ml rename to src/lib/ast/convert.ml diff --git a/src-ml/lib/ast/core_ast.ml b/src/lib/ast/core_ast.ml similarity index 100% rename from src-ml/lib/ast/core_ast.ml rename to src/lib/ast/core_ast.ml diff --git a/src-ml/lib/ast/dune b/src/lib/ast/dune similarity index 100% rename from src-ml/lib/ast/dune rename to src/lib/ast/dune diff --git a/src-ml/lib/ast/imports.ml b/src/lib/ast/imports.ml similarity index 100% rename from src-ml/lib/ast/imports.ml rename to src/lib/ast/imports.ml diff --git a/src-ml/lib/ast/llvm_ir.ml b/src/lib/ast/llvm_ir.ml similarity index 100% rename from src-ml/lib/ast/llvm_ir.ml rename to src/lib/ast/llvm_ir.ml diff --git a/src-ml/lib/ast/platform_defaults.ml b/src/lib/ast/platform_defaults.ml similarity index 100% rename from src-ml/lib/ast/platform_defaults.ml rename to src/lib/ast/platform_defaults.ml diff --git a/src-ml/lib/ast/platform_defaults_common.ml b/src/lib/ast/platform_defaults_common.ml similarity index 100% rename from src-ml/lib/ast/platform_defaults_common.ml rename to src/lib/ast/platform_defaults_common.ml diff --git a/src-ml/lib/ast/platform_defaults_darwin.ml b/src/lib/ast/platform_defaults_darwin.ml similarity index 100% rename from src-ml/lib/ast/platform_defaults_darwin.ml rename to src/lib/ast/platform_defaults_darwin.ml diff --git a/src-ml/lib/ast/platform_defaults_unix.ml b/src/lib/ast/platform_defaults_unix.ml similarity index 100% rename from src-ml/lib/ast/platform_defaults_unix.ml rename to src/lib/ast/platform_defaults_unix.ml diff --git a/src-ml/lib/ast/pretty.ml b/src/lib/ast/pretty.ml similarity index 100% rename from src-ml/lib/ast/pretty.ml rename to src/lib/ast/pretty.ml diff --git a/src-ml/lib/ast/surface_ast.ml b/src/lib/ast/surface_ast.ml similarity index 100% rename from src-ml/lib/ast/surface_ast.ml rename to src/lib/ast/surface_ast.ml diff --git a/src-ml/lib/cst/cst.ml b/src/lib/cst/cst.ml similarity index 100% rename from src-ml/lib/cst/cst.ml rename to src/lib/cst/cst.ml diff --git a/src-ml/lib/cst/dune b/src/lib/cst/dune similarity index 100% rename from src-ml/lib/cst/dune rename to src/lib/cst/dune diff --git a/src-ml/lib/cst/emit.ml b/src/lib/cst/emit.ml similarity index 100% rename from src-ml/lib/cst/emit.ml rename to src/lib/cst/emit.ml diff --git a/src-ml/lib/cst/locate.ml b/src/lib/cst/locate.ml similarity index 100% rename from src-ml/lib/cst/locate.ml rename to src/lib/cst/locate.ml diff --git a/src-ml/lib/cst/pretty.ml b/src/lib/cst/pretty.ml similarity index 100% rename from src-ml/lib/cst/pretty.ml rename to src/lib/cst/pretty.ml diff --git a/src-ml/lib/dune b/src/lib/dune similarity index 100% rename from src-ml/lib/dune rename to src/lib/dune diff --git a/src-ml/lib/haven.ml b/src/lib/haven.ml similarity index 100% rename from src-ml/lib/haven.ml rename to src/lib/haven.ml diff --git a/src-ml/lib/lexer/dune b/src/lib/lexer/dune similarity index 100% rename from src-ml/lib/lexer/dune rename to src/lib/lexer/dune diff --git a/src-ml/lib/lexer/lexer.ml b/src/lib/lexer/lexer.ml similarity index 100% rename from src-ml/lib/lexer/lexer.ml rename to src/lib/lexer/lexer.ml diff --git a/src-ml/lib/lexer/pretty.ml b/src/lib/lexer/pretty.ml similarity index 100% rename from src-ml/lib/lexer/pretty.ml rename to src/lib/lexer/pretty.ml diff --git a/src-ml/lib/loc.ml b/src/lib/loc.ml similarity index 100% rename from src-ml/lib/loc.ml rename to src/lib/loc.ml diff --git a/src-ml/lib/parser/dune b/src/lib/parser/dune similarity index 100% rename from src-ml/lib/parser/dune rename to src/lib/parser/dune diff --git a/src-ml/lib/parser/grammar.mly b/src/lib/parser/grammar.mly similarity index 100% rename from src-ml/lib/parser/grammar.mly rename to src/lib/parser/grammar.mly diff --git a/src-ml/lib/parser/parser.ml b/src/lib/parser/parser.ml similarity index 100% rename from src-ml/lib/parser/parser.ml rename to src/lib/parser/parser.ml diff --git a/src-ml/lib/token/dune b/src/lib/token/dune similarity index 100% rename from src-ml/lib/token/dune rename to src/lib/token/dune diff --git a/src-ml/lib/token/token.ml b/src/lib/token/token.ml similarity index 100% rename from src-ml/lib/token/token.ml rename to src/lib/token/token.ml diff --git a/src-ml/test/dune b/src/test/dune similarity index 100% rename from src-ml/test/dune rename to src/test/dune diff --git a/src-ml/test/test_imports.ml b/src/test/test_imports.ml similarity index 100% rename from src-ml/test/test_imports.ml rename to src/test/test_imports.ml diff --git a/src-ml/test/test_llvm_ir.ml b/src/test/test_llvm_ir.ml similarity index 100% rename from src-ml/test/test_llvm_ir.ml rename to src/test/test_llvm_ir.ml diff --git a/src-ml/test/test_ownership.ml b/src/test/test_ownership.ml similarity index 100% rename from src-ml/test/test_ownership.ml rename to src/test/test_ownership.ml diff --git a/src-ml/test/test_parser.ml b/src/test/test_parser.ml similarity index 100% rename from src-ml/test/test_parser.ml rename to src/test/test_parser.ml diff --git a/src-ml/test/test_pipeline.ml b/src/test/test_pipeline.ml similarity index 100% rename from src-ml/test/test_pipeline.ml rename to src/test/test_pipeline.ml diff --git a/src-ml/test/test_purity.ml b/src/test/test_purity.ml similarity index 100% rename from src-ml/test/test_purity.ml rename to src/test/test_purity.ml diff --git a/src-ml/test/test_rc.ml b/src/test/test_rc.ml similarity index 100% rename from src-ml/test/test_rc.ml rename to src/test/test_rc.ml diff --git a/src-ml/test/test_src_ml.ml b/src/test/test_src_ml.ml similarity index 100% rename from src-ml/test/test_src_ml.ml rename to src/test/test_src_ml.ml diff --git a/src-ml/test/test_support.ml b/src/test/test_support.ml similarity index 100% rename from src-ml/test/test_support.ml rename to src/test/test_support.ml diff --git a/src-ml/test/test_typing_semantics.ml b/src/test/test_typing_semantics.ml similarity index 100% rename from src-ml/test/test_typing_semantics.ml rename to src/test/test_typing_semantics.ml