diff --git a/.gitmodules b/.gitmodules index df52ac6..7e83db7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "furdb/deps/isocline"] - path = furdb/deps/isocline +[submodule "deps/isocline"] + path = deps/isocline url = https://github.com/daanx/isocline diff --git a/CMakeLists.txt b/CMakeLists.txt index 0864963..d8945bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,12 +11,16 @@ find_package(Doxygen) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -add_subdirectory(furlang) -add_subdirectory(furvm) -add_subdirectory(furc) -add_subdirectory(furas) -add_subdirectory(disfuras) -add_subdirectory(furdb) +add_subdirectory(src/furlang) +add_subdirectory(src/furvm) +add_subdirectory(src/furc) +add_subdirectory(src/furas) +add_subdirectory(src/disfuras) +add_subdirectory(src/furdb) + +# Dependencies +set(IC_USE_CXX ON) +add_subdirectory(${CMAKE_SOURCE_DIR}/deps/isocline) if(DOXYGEN_FOUND) set(DOXYGEN_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/docs) diff --git a/furdb/deps/.clang-tidy b/deps/.clang-tidy similarity index 100% rename from furdb/deps/.clang-tidy rename to deps/.clang-tidy diff --git a/furdb/deps/isocline b/deps/isocline similarity index 100% rename from furdb/deps/isocline rename to deps/isocline diff --git a/disfuras/CMakeLists.txt b/disfuras/CMakeLists.txt deleted file mode 100644 index ca41323..0000000 --- a/disfuras/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -file(GLOB_RECURSE DISFURAS_SRCS "src/**.cpp") -file(GLOB_RECURSE DISFURAS_HDRS "include/**.hpp") -add_executable(disfuras ${DISFURAS_SRCS} ${DISFURAS_HDRS}) -target_include_directories(disfuras PRIVATE include/) -target_link_libraries(disfuras PUBLIC furlang libfurc libfurvm) diff --git a/furas/examples/array.furas b/examples/furas/array.furas similarity index 100% rename from furas/examples/array.furas rename to examples/furas/array.furas diff --git a/furas/examples/array2.furas b/examples/furas/array2.furas similarity index 100% rename from furas/examples/array2.furas rename to examples/furas/array2.furas diff --git a/furas/examples/ops.furas b/examples/furas/ops.furas similarity index 100% rename from furas/examples/ops.furas rename to examples/furas/ops.furas diff --git a/furas/examples/simple.furas b/examples/furas/simple.furas similarity index 100% rename from furas/examples/simple.furas rename to examples/furas/simple.furas diff --git a/furas/CMakeLists.txt b/furas/CMakeLists.txt deleted file mode 100644 index d94ea3f..0000000 --- a/furas/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -file(GLOB_RECURSE FURAS_SRCS "src/**.cpp") -file(GLOB_RECURSE FURAS_HDRS "include/**.hpp") -add_executable(furas ${FURAS_SRCS} ${FURAS_HDRS}) -target_include_directories(furas PUBLIC include/) -target_link_libraries(furas PRIVATE furlang libfurvm) diff --git a/furdb/CMakeLists.txt b/furdb/CMakeLists.txt deleted file mode 100644 index 44771f2..0000000 --- a/furdb/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -set(IC_USE_CXX ON) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/isocline) - -file(GLOB_RECURSE FURDB_SRCS "src/**.cpp") -file(GLOB_RECURSE FURDB_HDRS "include/**.hpp") -add_executable(furdb ${FURDB_SRCS} ${FURDB_HDRS}) -target_include_directories(furdb PRIVATE include/) -target_link_libraries(furdb PUBLIC furlang libfurc libfurvm isocline) diff --git a/furlang/CMakeLists.txt b/furlang/CMakeLists.txt deleted file mode 100644 index dd9a48b..0000000 --- a/furlang/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -file(GLOB_RECURSE FURLANG_SRCS "src/**.cpp") -file(GLOB_RECURSE FURLANG_HDRS "include/**.hpp") -add_library(furlang STATIC ${FURLANG_SRCS} ${FURLANG_HDRS}) -target_include_directories(furlang PUBLIC include/) \ No newline at end of file diff --git a/furas/include/furas/gen.hpp b/include/furas/gen.hpp similarity index 100% rename from furas/include/furas/gen.hpp rename to include/furas/gen.hpp diff --git a/furas/include/furas/lexer.hpp b/include/furas/lexer.hpp similarity index 100% rename from furas/include/furas/lexer.hpp rename to include/furas/lexer.hpp diff --git a/furas/include/furas/token.hpp b/include/furas/token.hpp similarity index 100% rename from furas/include/furas/token.hpp rename to include/furas/token.hpp diff --git a/include/furc/back/furvm/target.hpp b/include/furc/back/furvm/target.hpp new file mode 100644 index 0000000..2fc26b6 --- /dev/null +++ b/include/furc/back/furvm/target.hpp @@ -0,0 +1,16 @@ +#ifndef FURC_BACK_FURVM_HPP +#define FURC_BACK_FURVM_HPP + +#include "furc/middle/ir.hpp" +#include "furvm/module.hpp" + +namespace furc { + +class furvm_generator final { +public: + static furvm::mod generate(const ir_module& mod); +}; + +} // namespace furc + +#endif // FURC_BACK_FURVM_HPP diff --git a/furc/include/furc/front/ast.hpp b/include/furc/front/ast.hpp similarity index 100% rename from furc/include/furc/front/ast.hpp rename to include/furc/front/ast.hpp diff --git a/furc/include/furc/front/lexer.hpp b/include/furc/front/lexer.hpp similarity index 100% rename from furc/include/furc/front/lexer.hpp rename to include/furc/front/lexer.hpp diff --git a/furc/include/furc/front/parser.hpp b/include/furc/front/parser.hpp similarity index 100% rename from furc/include/furc/front/parser.hpp rename to include/furc/front/parser.hpp diff --git a/furc/include/furc/front/token.hpp b/include/furc/front/token.hpp similarity index 100% rename from furc/include/furc/front/token.hpp rename to include/furc/front/token.hpp diff --git a/furc/include/furc/middle/ir.hpp b/include/furc/middle/ir.hpp similarity index 100% rename from furc/include/furc/middle/ir.hpp rename to include/furc/middle/ir.hpp diff --git a/furc/include/furc/middle/reg_gen.hpp b/include/furc/middle/reg_gen.hpp similarity index 100% rename from furc/include/furc/middle/reg_gen.hpp rename to include/furc/middle/reg_gen.hpp diff --git a/furc/include/furc/middle/ssa.hpp b/include/furc/middle/ssa.hpp similarity index 100% rename from furc/include/furc/middle/ssa.hpp rename to include/furc/middle/ssa.hpp diff --git a/furlang/include/furlang/arena.hpp b/include/furlang/arena.hpp similarity index 100% rename from furlang/include/furlang/arena.hpp rename to include/furlang/arena.hpp diff --git a/furlang/include/furlang/furlang.hpp b/include/furlang/furlang.hpp similarity index 100% rename from furlang/include/furlang/furlang.hpp rename to include/furlang/furlang.hpp diff --git a/furlang/include/furlang/result.hpp b/include/furlang/result.hpp similarity index 100% rename from furlang/include/furlang/result.hpp rename to include/furlang/result.hpp diff --git a/furlang/include/furlang/serialization/codec.hpp b/include/furlang/serialization/codec.hpp similarity index 100% rename from furlang/include/furlang/serialization/codec.hpp rename to include/furlang/serialization/codec.hpp diff --git a/furlang/include/furlang/serialization/error.hpp b/include/furlang/serialization/error.hpp similarity index 100% rename from furlang/include/furlang/serialization/error.hpp rename to include/furlang/serialization/error.hpp diff --git a/furlang/include/furlang/serialization/io.hpp b/include/furlang/serialization/io.hpp similarity index 100% rename from furlang/include/furlang/serialization/io.hpp rename to include/furlang/serialization/io.hpp diff --git a/furlang/include/furlang/utility/hash.hpp b/include/furlang/utility/hash.hpp similarity index 100% rename from furlang/include/furlang/utility/hash.hpp rename to include/furlang/utility/hash.hpp diff --git a/furlang/include/furlang/view.hpp b/include/furlang/view.hpp similarity index 100% rename from furlang/include/furlang/view.hpp rename to include/furlang/view.hpp diff --git a/furvm/include/furvm/constant.hpp b/include/furvm/constant.hpp similarity index 100% rename from furvm/include/furvm/constant.hpp rename to include/furvm/constant.hpp diff --git a/furvm/include/furvm/context.hpp b/include/furvm/context.hpp similarity index 100% rename from furvm/include/furvm/context.hpp rename to include/furvm/context.hpp diff --git a/furvm/include/furvm/detail/handle.hpp b/include/furvm/detail/handle.hpp similarity index 100% rename from furvm/include/furvm/detail/handle.hpp rename to include/furvm/detail/handle.hpp diff --git a/furvm/include/furvm/detail/serialization.hpp b/include/furvm/detail/serialization.hpp similarity index 100% rename from furvm/include/furvm/detail/serialization.hpp rename to include/furvm/detail/serialization.hpp diff --git a/furvm/include/furvm/exceptions.hpp b/include/furvm/exceptions.hpp similarity index 100% rename from furvm/include/furvm/exceptions.hpp rename to include/furvm/exceptions.hpp diff --git a/furvm/include/furvm/executor.hpp b/include/furvm/executor.hpp similarity index 100% rename from furvm/include/furvm/executor.hpp rename to include/furvm/executor.hpp diff --git a/furvm/include/furvm/function.hpp b/include/furvm/function.hpp similarity index 100% rename from furvm/include/furvm/function.hpp rename to include/furvm/function.hpp diff --git a/furvm/include/furvm/furvm.hpp b/include/furvm/furvm.hpp similarity index 100% rename from furvm/include/furvm/furvm.hpp rename to include/furvm/furvm.hpp diff --git a/furvm/include/furvm/fwd.hpp b/include/furvm/fwd.hpp similarity index 100% rename from furvm/include/furvm/fwd.hpp rename to include/furvm/fwd.hpp diff --git a/furvm/include/furvm/handle.hpp b/include/furvm/handle.hpp similarity index 100% rename from furvm/include/furvm/handle.hpp rename to include/furvm/handle.hpp diff --git a/furvm/include/furvm/instruction.hpp b/include/furvm/instruction.hpp similarity index 100% rename from furvm/include/furvm/instruction.hpp rename to include/furvm/instruction.hpp diff --git a/furvm/include/furvm/module.hpp b/include/furvm/module.hpp similarity index 100% rename from furvm/include/furvm/module.hpp rename to include/furvm/module.hpp diff --git a/furvm/include/furvm/stack.hpp b/include/furvm/stack.hpp similarity index 100% rename from furvm/include/furvm/stack.hpp rename to include/furvm/stack.hpp diff --git a/furvm/include/furvm/thing.hpp b/include/furvm/thing.hpp similarity index 100% rename from furvm/include/furvm/thing.hpp rename to include/furvm/thing.hpp diff --git a/furvm/include/furvm/types.hpp b/include/furvm/types.hpp similarity index 100% rename from furvm/include/furvm/types.hpp rename to include/furvm/types.hpp diff --git a/src/disfuras/CMakeLists.txt b/src/disfuras/CMakeLists.txt new file mode 100644 index 0000000..d003837 --- /dev/null +++ b/src/disfuras/CMakeLists.txt @@ -0,0 +1,4 @@ +file(GLOB_RECURSE DISFURAS_SRCS "${CMAKE_SOURCE_DIR}/src/disfuras/**.cpp") +add_executable(disfuras ${DISFURAS_SRCS}) +target_include_directories(disfuras PRIVATE ${CMAKE_SOURCE_DIR}/include/) +target_link_libraries(disfuras PUBLIC furlang libfurc libfurvm) diff --git a/disfuras/src/main.cpp b/src/disfuras/main.cpp similarity index 100% rename from disfuras/src/main.cpp rename to src/disfuras/main.cpp diff --git a/src/furas/CMakeLists.txt b/src/furas/CMakeLists.txt new file mode 100644 index 0000000..25e02af --- /dev/null +++ b/src/furas/CMakeLists.txt @@ -0,0 +1,5 @@ +file(GLOB_RECURSE FURAS_SRCS "${CMAKE_SOURCE_DIR}/src/furas/**.cpp") +file(GLOB_RECURSE FURAS_HDRS "${CMAKE_SOURCE_DIR}/include/furas/**.hpp") +add_executable(furas ${FURAS_SRCS} ${FURAS_HDRS}) +target_include_directories(furas PUBLIC ${CMAKE_SOURCE_DIR}/include/) +target_link_libraries(furas PRIVATE furlang libfurvm) diff --git a/furas/src/gen.cpp b/src/furas/gen.cpp similarity index 100% rename from furas/src/gen.cpp rename to src/furas/gen.cpp diff --git a/furas/src/lexer.cpp b/src/furas/lexer.cpp similarity index 100% rename from furas/src/lexer.cpp rename to src/furas/lexer.cpp diff --git a/furas/src/main.cpp b/src/furas/main.cpp similarity index 100% rename from furas/src/main.cpp rename to src/furas/main.cpp diff --git a/furc/CMakeLists.txt b/src/furc/CMakeLists.txt similarity index 52% rename from furc/CMakeLists.txt rename to src/furc/CMakeLists.txt index 60dc724..8af400c 100644 --- a/furc/CMakeLists.txt +++ b/src/furc/CMakeLists.txt @@ -1,15 +1,15 @@ -file(GLOB_RECURSE FURC_SRCS "src/**.cpp") -file(GLOB_RECURSE FURC_HDRS "include/**.hpp") +file(GLOB_RECURSE FURC_SRCS "${CMAKE_SOURCE_DIR}/src/furc/**.cpp") +file(GLOB_RECURSE FURC_HDRS "${CMAKE_SOURCE_DIR}/include/furc/**.hpp") add_library(libfurc ${FURC_SRCS} ${FURC_HDRS}) -target_include_directories(libfurc PUBLIC include/) +target_include_directories(libfurc PUBLIC ${CMAKE_SOURCE_DIR}/include/) target_compile_definitions(libfurc PRIVATE LIBFURC) set_target_properties(libfurc PROPERTIES PREFIX "") target_link_libraries(libfurc PUBLIC furlang libfurvm) -add_executable(furc src/main.cpp) +add_executable(furc "${CMAKE_SOURCE_DIR}/src/furc/main.cpp") target_link_libraries(furc PRIVATE libfurc) include(GoogleTest) -add_executable(furc_tests "test/ssa.cpp") +add_executable(furc_tests "${CMAKE_SOURCE_DIR}/test/furc/ssa.cpp") target_link_libraries(furc_tests PRIVATE libfurc GTest::gtest_main) gtest_discover_tests(furc_tests) diff --git a/src/furc/back/furvm/target.cpp b/src/furc/back/furvm/target.cpp new file mode 100644 index 0000000..352e8e6 --- /dev/null +++ b/src/furc/back/furvm/target.cpp @@ -0,0 +1,20 @@ +#include "furc/back/furvm/target.hpp" + +#include "furvm/function.hpp" + +#include + +namespace furc { + +furvm::mod furvm_generator::generate(const ir_module& mod) { + if (!mod.variables.empty()) throw std::runtime_error("global variables are not supported for furvm yet"); + + furvm::mod furvmMod; + for (const auto& func : mod.functions) { + furvmMod.emplace_function(furvm::function_sig{ {}, {} }, furvmMod.bytecode().size()); + } + + return furvmMod; +} + +} // namespace furc diff --git a/furc/src/front/lexer.cpp b/src/furc/front/lexer.cpp similarity index 100% rename from furc/src/front/lexer.cpp rename to src/furc/front/lexer.cpp diff --git a/furc/src/front/parser.cpp b/src/furc/front/parser.cpp similarity index 100% rename from furc/src/front/parser.cpp rename to src/furc/front/parser.cpp diff --git a/furc/src/main.cpp b/src/furc/main.cpp similarity index 100% rename from furc/src/main.cpp rename to src/furc/main.cpp diff --git a/furc/src/middle/ir.cpp b/src/furc/middle/ir.cpp similarity index 100% rename from furc/src/middle/ir.cpp rename to src/furc/middle/ir.cpp diff --git a/furc/src/middle/ssa.cpp b/src/furc/middle/ssa.cpp similarity index 100% rename from furc/src/middle/ssa.cpp rename to src/furc/middle/ssa.cpp diff --git a/src/furdb/CMakeLists.txt b/src/furdb/CMakeLists.txt new file mode 100644 index 0000000..981caa5 --- /dev/null +++ b/src/furdb/CMakeLists.txt @@ -0,0 +1,5 @@ +file(GLOB_RECURSE FURDB_SRCS "${CMAKE_SOURCE_DIR}/src/furdb/**.cpp") +file(GLOB_RECURSE FURDB_HDRS "${CMAKE_SOURCE_DIR}/include/furdb/**.hpp") +add_executable(furdb ${FURDB_SRCS} ${FURDB_HDRS}) +target_include_directories(furdb PRIVATE ${CMAKE_SOURCE_DIR}/include/) +target_link_libraries(furdb PUBLIC furlang libfurc libfurvm isocline) diff --git a/furdb/src/command.cpp b/src/furdb/command.cpp similarity index 100% rename from furdb/src/command.cpp rename to src/furdb/command.cpp diff --git a/furdb/include/command.hpp b/src/furdb/command.hpp similarity index 100% rename from furdb/include/command.hpp rename to src/furdb/command.hpp diff --git a/furdb/src/context.cpp b/src/furdb/context.cpp similarity index 100% rename from furdb/src/context.cpp rename to src/furdb/context.cpp diff --git a/furdb/include/context.hpp b/src/furdb/context.hpp similarity index 100% rename from furdb/include/context.hpp rename to src/furdb/context.hpp diff --git a/furdb/src/main.cpp b/src/furdb/main.cpp similarity index 100% rename from furdb/src/main.cpp rename to src/furdb/main.cpp diff --git a/src/furlang/CMakeLists.txt b/src/furlang/CMakeLists.txt new file mode 100644 index 0000000..f118e21 --- /dev/null +++ b/src/furlang/CMakeLists.txt @@ -0,0 +1,4 @@ +file(GLOB_RECURSE FURLANG_SRCS "${CMAKE_SOURCE_DIR}/src/furlang/**.cpp") +file(GLOB_RECURSE FURLANG_HDRS "${CMAKE_SOURCE_DIR}/include/furlang/**.hpp") +add_library(furlang STATIC ${FURLANG_SRCS} ${FURLANG_HDRS}) +target_include_directories(furlang PUBLIC ${CMAKE_SOURCE_DIR}/include/) diff --git a/furlang/src/arena.cpp b/src/furlang/arena.cpp similarity index 100% rename from furlang/src/arena.cpp rename to src/furlang/arena.cpp diff --git a/furlang/src/serialization/io.cpp b/src/furlang/serialization/io.cpp similarity index 100% rename from furlang/src/serialization/io.cpp rename to src/furlang/serialization/io.cpp diff --git a/furvm/CMakeLists.txt b/src/furvm/CMakeLists.txt similarity index 54% rename from furvm/CMakeLists.txt rename to src/furvm/CMakeLists.txt index 58dd70e..8fcc717 100644 --- a/furvm/CMakeLists.txt +++ b/src/furvm/CMakeLists.txt @@ -1,16 +1,16 @@ -file(GLOB_RECURSE FURVM_SRCS "src/**.cpp") -file(GLOB_RECURSE FURVM_HDRS "include/**.hpp") +file(GLOB_RECURSE FURVM_SRCS "${CMAKE_SOURCE_DIR}/src/furvm/**.cpp") +file(GLOB_RECURSE FURVM_HDRS "${CMAKE_SOURCE_DIR}/include/furvm/**.hpp") add_library(libfurvm ${FURVM_SRCS} ${FURVM_HDRS}) -target_include_directories(libfurvm PUBLIC include/) +target_include_directories(libfurvm PUBLIC ${CMAKE_SOURCE_DIR}/include/) target_compile_definitions(libfurvm PRIVATE LIBFURVM) set_target_properties(libfurvm PROPERTIES PREFIX "") target_link_libraries(libfurvm PUBLIC furlang) -add_executable(furvm src/main.cpp) +add_executable(furvm "${CMAKE_SOURCE_DIR}/src/furvm/main.cpp") target_link_libraries(furvm PRIVATE libfurvm) include(GoogleTest) -file(GLOB_RECURSE FURVM_TESTS "test/**.cpp") +file(GLOB_RECURSE FURVM_TESTS "${CMAKE_SOURCE_DIR}/test/furvm/**.cpp") add_executable(furvm_tests ${FURVM_TESTS}) target_link_libraries(furvm_tests PRIVATE libfurvm GTest::gtest_main) gtest_discover_tests(furvm_tests) diff --git a/furvm/src/detail/serialization.cpp b/src/furvm/detail/serialization.cpp similarity index 100% rename from furvm/src/detail/serialization.cpp rename to src/furvm/detail/serialization.cpp diff --git a/furvm/src/executor.cpp b/src/furvm/executor.cpp similarity index 100% rename from furvm/src/executor.cpp rename to src/furvm/executor.cpp diff --git a/furvm/src/function.cpp b/src/furvm/function.cpp similarity index 100% rename from furvm/src/function.cpp rename to src/furvm/function.cpp diff --git a/furvm/src/instruction.cpp b/src/furvm/instruction.cpp similarity index 100% rename from furvm/src/instruction.cpp rename to src/furvm/instruction.cpp diff --git a/furvm/src/main.cpp b/src/furvm/main.cpp similarity index 100% rename from furvm/src/main.cpp rename to src/furvm/main.cpp diff --git a/furvm/src/module.cpp b/src/furvm/module.cpp similarity index 100% rename from furvm/src/module.cpp rename to src/furvm/module.cpp diff --git a/furc/test/lexer.cpp b/test/furc/lexer.cpp similarity index 100% rename from furc/test/lexer.cpp rename to test/furc/lexer.cpp diff --git a/furc/test/ssa.cpp b/test/furc/ssa.cpp similarity index 100% rename from furc/test/ssa.cpp rename to test/furc/ssa.cpp diff --git a/furvm/test/test.cpp b/test/furvm/test.cpp similarity index 100% rename from furvm/test/test.cpp rename to test/furvm/test.cpp