Skip to content

Commit

Permalink
Merge pull request muqiuhan#30 from X-FRI/main
Browse files Browse the repository at this point in the history
better error handling
  • Loading branch information
muqiuhan authored Oct 7, 2024
2 parents ff0638f + aff22ec commit 3801bd9
Show file tree
Hide file tree
Showing 61 changed files with 6,924 additions and 12,286 deletions.
16 changes: 8 additions & 8 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
ColumnLimit: 90
LambdaBodyIndentation: OuterScope
ColumnLimit: 120
LambdaBodyIndentation: Signature
RemoveBracesLLVM: true
SeparateDefinitionBlocks: Always
CommentPragmas: '^ IWYU pragma:'
Expand Down Expand Up @@ -51,7 +51,7 @@ AllowShortBlocksOnASingleLine: Never
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
ExperimentalAutoDetectBinPacking: true
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Expand All @@ -68,11 +68,11 @@ MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
PenaltyBreakComment: 90
PenaltyBreakFirstLessLess: 90
PenaltyBreakString: 90
PenaltyExcessCharacter: 90
PenaltyReturnTypeOnItsOwnLine: 90
PenaltyBreakComment: 120
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 120
PenaltyExcessCharacter: 120
PenaltyReturnTypeOnItsOwnLine: 120
PointerAlignment: Middle
ReflowComments: true
SortIncludes: "Never"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:

- name: Install dependencies
run:
brew install bison flex
brew install bison flex llvm

- name: build
run: xmake -y
160 changes: 111 additions & 49 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,65 +5,118 @@
# project
cmake_minimum_required(VERSION 3.15.0)
cmake_policy(SET CMP0091 NEW)
set(CMAKE_C_COMPILER "/usr/bin/x86_64-w64-mingw32-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/x86_64-w64-mingw32-g++")
project(swallow VERSION 0.0.1 LANGUAGES CXX)

# target
set(CMAKE_C_COMPILER "/usr/bin/clang-18")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-18")
add_library(base SHARED "")
set_target_properties(base PROPERTIES OUTPUT_NAME "base")
set_target_properties(base PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
target_compile_options(base PRIVATE
add_executable(swa "")
set_target_properties(swa PROPERTIES OUTPUT_NAME "swa")
set_target_properties(swa PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
add_dependencies(swa swc swi)
target_include_directories(swa PRIVATE
compiler
)
target_compile_options(swa PRIVATE
$<$<COMPILE_LANGUAGE:C>:-m64>
$<$<COMPILE_LANGUAGE:CXX>:-m64>
$<$<COMPILE_LANGUAGE:C>:-DNDEBUG>
$<$<COMPILE_LANGUAGE:CXX>:-DNDEBUG>
)
set_target_properties(swa PROPERTIES CXX_EXTENSIONS OFF)
target_compile_features(swa PRIVATE cxx_std_20)
if(MSVC)
target_compile_options(swa PRIVATE $<$<CONFIG:Release>:-O2>)
else()
target_compile_options(swa PRIVATE -O3)
endif()
if(MSVC)
else()
target_compile_options(swa PRIVATE -fvisibility=hidden)
endif()
if(MSVC)
set_property(TARGET swa PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
target_link_libraries(swa PRIVATE
swi
swc
pthread
)
target_link_directories(swa PRIVATE
build/linux/x86_64/release
)
target_link_options(swa PRIVATE
-m64
)
if(Clang)
target_link_options(swa PRIVATE
-lc++abi
)
endif()
target_sources(swa PRIVATE
cli/main.cpp
)

# target
add_library(swallow_base STATIC "")
set_target_properties(swallow_base PROPERTIES OUTPUT_NAME "swallow_base")
set_target_properties(swallow_base PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
target_compile_options(swallow_base PRIVATE
$<$<COMPILE_LANGUAGE:C>:-m64>
$<$<COMPILE_LANGUAGE:CXX>:-m64>
$<$<COMPILE_LANGUAGE:C>:-DNDEBUG>
$<$<COMPILE_LANGUAGE:CXX>:-DNDEBUG>
)
set_target_properties(base PROPERTIES CXX_EXTENSIONS OFF)
target_compile_features(base PRIVATE cxx_std_20)
set_target_properties(swallow_base PROPERTIES CXX_EXTENSIONS OFF)
target_compile_features(swallow_base PRIVATE cxx_std_20)
if(MSVC)
target_compile_options(base PRIVATE $<$<CONFIG:Release>:-Ox -fp:fast>)
target_compile_options(swallow_base PRIVATE $<$<CONFIG:Release>:-O2>)
else()
target_compile_options(base PRIVATE -O3)
target_compile_options(swallow_base PRIVATE -O3)
endif()
if(MSVC)
set_property(TARGET base PROPERTY
else()
target_compile_options(swallow_base PRIVATE -fvisibility=hidden)
endif()
if(MSVC)
set_property(TARGET swallow_base PROPERTY
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
target_link_options(base PRIVATE
target_link_options(swallow_base PRIVATE
-m64
)
target_sources(base PRIVATE
target_sources(swallow_base PRIVATE
base/base.cpp
)

# target
set(CMAKE_C_COMPILER "/usr/bin/clang-18")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-18")
add_executable(swc "")
add_library(swc STATIC "")
set_target_properties(swc PROPERTIES OUTPUT_NAME "swc")
set_target_properties(swc PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
add_dependencies(swc base)
set_target_properties(swc PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
target_include_directories(swc PRIVATE
compiler
compiler/ast
compiler/type
compiler/lexer
compiler/parser
compiler/diagnostics
compiler/utils
)
target_include_directories(swc SYSTEM PRIVATE
/home/muqiu/.xmake/packages/t/tl_optional/v1.1.0/c98c96f6367f4230ab618e8e653468c7/include
/home/muqiu/.xmake/packages/t/tl_expected/v1.1.0/57774aec28a24eb8b84e9c45d2905d73/include
/home/muqiu/.xmake/packages/s/spdlog/v1.14.1/6a0109080d85439d985a75b8a212f96a/include
)
target_compile_options(swc PRIVATE
$<$<COMPILE_LANGUAGE:C>:-m64>
$<$<COMPILE_LANGUAGE:CXX>:-m64>
$<$<COMPILE_LANGUAGE:C>:-DNDEBUG>
$<$<COMPILE_LANGUAGE:CXX>:-DNDEBUG>
)
if(Clang)
target_compile_options(swc PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:-stdlib=libc++>
)
endif()
set_target_properties(swc PROPERTIES CXX_EXTENSIONS OFF)
target_compile_features(swc PRIVATE cxx_std_20)
if(MSVC)
target_compile_options(swc PRIVATE $<$<CONFIG:Release>:-Ox -fp:fast>)
target_compile_options(swc PRIVATE $<$<CONFIG:Release>:-O2>)
else()
target_compile_options(swc PRIVATE -O3)
endif()
Expand All @@ -76,42 +129,45 @@ if(MSVC)
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
target_link_libraries(swc PRIVATE
c++
base
)
target_link_directories(swc PRIVATE
build/linux/x86_64/release
pthread
)
target_link_options(swc PRIVATE
-m64
)
if(Clang)
target_link_options(swc PRIVATE
-lc++abi
)
endif()
target_sources(swc PRIVATE
compiler/compiler.cpp
compiler/parser/parser.cpp
compiler/parser/bison_parser.cpp
compiler/type/dump.cpp
compiler/type/environment.cpp
compiler/type/type.cpp
compiler/diagnostics/reporter.cpp
compiler/ast/ast.cpp
compiler/ast/dump.cpp
compiler/ast/gmachine.cpp
compiler/ast/type.cpp
compiler/diagnostics/diagnostics.cpp
compiler/diagnostics/utils.cpp
compiler/g-machine/instruction.cpp
compiler/g-machine/binop.cpp
compiler/g-machine/environment.cpp
compiler/diagnostics/reporter.cpp
compiler/gmachine/binop.cpp
compiler/gmachine/environment.cpp
compiler/gmachine/instruction.cpp
compiler/ir/context.cpp
compiler/lexer/flex_lexer.cpp
compiler/lexer/lexer.cpp
compiler/ast/ast.cpp
compiler/ast/g-machine.cpp
compiler/ast/dump.cpp
compiler/ast/type.cpp
compiler/parser/bison_parser.cpp
compiler/parser/parser.cpp
compiler/runtime/node.cpp
compiler/runtime/runtime.cpp
compiler/runtime/stack.cpp
compiler/type/dump.cpp
compiler/type/environment.cpp
compiler/type/type.cpp
)

# target
set(CMAKE_C_COMPILER "/usr/bin/clang-18")
set(CMAKE_CXX_COMPILER "/usr/bin/clang++-18")
add_executable(swi "")
add_library(swi STATIC "")
set_target_properties(swi PROPERTIES OUTPUT_NAME "swi")
set_target_properties(swi PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
set_target_properties(swi PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/linux/x86_64/release")
add_dependencies(swi swc)
target_compile_options(swi PRIVATE
$<$<COMPILE_LANGUAGE:C>:-m64>
Expand All @@ -122,7 +178,7 @@ target_compile_options(swi PRIVATE
set_target_properties(swi PROPERTIES CXX_EXTENSIONS OFF)
target_compile_features(swi PRIVATE cxx_std_20)
if(MSVC)
target_compile_options(swi PRIVATE $<$<CONFIG:Release>:-Ox -fp:fast>)
target_compile_options(swi PRIVATE $<$<CONFIG:Release>:-O2>)
else()
target_compile_options(swi PRIVATE -O3)
endif()
Expand All @@ -135,14 +191,20 @@ if(MSVC)
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
target_link_libraries(swi PRIVATE
base
swc
pthread
)
target_link_directories(swi PRIVATE
build/linux/x86_64/release
)
target_link_options(swi PRIVATE
-m64
)
if(Clang)
target_link_options(swi PRIVATE
-lc++abi
)
endif()
target_sources(swi PRIVATE
repl/main.cpp
)
Expand Down
55 changes: 0 additions & 55 deletions README

This file was deleted.

20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,30 @@
- Build & Install
- > This project provides makefile, CMakeLists.txt, which can be built in an environment without xmake.
- > Setup: Install the [xmake](xmake.io)
- To build: xmake build
- To build: `xmake f --toolchain=gcc -m release -y && xmake build -j$(expr $(nproc) / 2)`
> or clang `xmake f --toolchain=clang -m release -y && xmake build -j$(expr $(nproc) / 2)`
- To run: xmake run
- To install: xmake install


- Cross-compile to windows or other platforms on Linux
- Setup: Install the [llvm](https://apt.llvm.org/)
- Build: `xmake f --toolchain=mingw -m release -y && xmake build -j$(expr $(nproc) / 2)`
> If the LLVM header files cannot be found, you can manually run `ln -s` to the corresponding directory of mingw, for example:
```
ln -s /usr/include/llvm /usr/lib64/gcc/x86_64-w64-mingw32/13.2.0/include
ln -s /usr/include/llvm-c /usr/lib64/gcc/x86_64-w64-mingw32/13.2.0/include
```
- Tools
- [XMake: A cross-platform build utility based on Lua](https://xmake.io/#/)
- [GNU Bison: A general-purpose parser generator](https://github.com/akimd/bison)
- [Flex: The Fast Lexical Analyzer - scanner generator for lexing in C and C++](https://github.com/westes/flex)
- Library/Frameworks
- [optional: C++11/14/17 std::optional with functional-style extensions and reference support](https://github.com/TartanLlama/optional)
- [result: Result<T, E> for Modern C++](https://github.com/p-ranav/result)

- [llvm: LLVM project](https://github.com/llvm/llvm-project)
- [tl_optional: C++11/14/17 std::optional with functional-style extensions and reference support](https://github.com/TartanLlama/optional)
- [tl_expected: C++11/14/17 std::expected with functional-style extensions ](https://github.com/TartanLlama/expected/)
- [spdlog: Fast C++ logging library](https://github.com/gabime/spdlog)
- REFERENCE
- [Theory of computation](https://en.wikipedia.org/wiki/Theory_of_computation)
Expand Down
Loading

0 comments on commit 3801bd9

Please sign in to comment.