From 66cd4fb53e32f16db0621b35e04e78b94e67b4e8 Mon Sep 17 00:00:00 2001 From: Peter Matta <mattapet@fit.cvut.cz> Date: Tue, 24 Apr 2018 10:39:46 +0200 Subject: [PATCH] Separated executables and libs --- .gitignore | 1 + CMakeLists.txt | 34 +++++++++++++++---- include/dusk/Basic/CMakeLists.txt | 1 + .../dusk/{Parse => Basic}/TokenDefinition.h | 0 include/dusk/Parse/CMakeLists.txt | 1 - include/dusk/Parse/Token.h | 2 +- lib/AST/ASTPrinter.cpp | 2 +- lib/Frontend/Compiler.cpp | 2 +- src/CMakeLists.txt | 9 ----- src/main.cpp | 20 ----------- tools/CMakeLists.txt | 2 ++ tools/dusk-format/CMakeLists.txt | 7 ++++ tools/dusk-format/main.cpp | 14 ++++++++ tools/duskc/CMakeLists.txt | 7 ++++ tools/duskc/main.cpp | 8 +++++ 15 files changed, 70 insertions(+), 40 deletions(-) rename include/dusk/{Parse => Basic}/TokenDefinition.h (100%) delete mode 100644 src/CMakeLists.txt delete mode 100644 src/main.cpp create mode 100644 tools/CMakeLists.txt create mode 100644 tools/dusk-format/CMakeLists.txt create mode 100644 tools/dusk-format/main.cpp create mode 100644 tools/duskc/CMakeLists.txt create mode 100644 tools/duskc/main.cpp diff --git a/.gitignore b/.gitignore index 669c899..4aff338 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +bin # Created by https://www.gitignore.io/api/c++,xcode,macos,cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index dc5c651..b5f0ab3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,44 @@ cmake_minimum_required(VERSION 3.4 FATAL_ERROR) -set(TARGET dusk-lang) -project(${TARGET}) +set(LIB_TARGET dusklib) +set(PROJECT_VERSION 1.0.0) +project( + ${LIB_TARGET} + VERSION ${PROJECT_VERSION} + DESCRIPTION "Dusk programming language" +) enable_language(C CXX) set(CMAKE_CXX_STANDARD 17) +set(BUILD_SHARED_LIBS ON) +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) + find_package(LLVM REQUIRED CONFIG) message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") +# link LLVM add_definitions(${LLVM_DEFINITIONS}) include_directories(${LLVM_INCLUDE_DIRS}) +llvm_map_components_to_libnames(llvm_libs support core irreader tablegen) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/include) +# add dusklib target include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/include) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lib) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src) -add_executable(${TARGET} ${SOURCE} ${HEADERS}) +# setup dusklib +add_library(${LIB_TARGET} SHARED ${SOURCE}) +set_target_properties(${LIB_TARGET} PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION 1 + ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin +) +target_include_directories(${LIB_TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_link_libraries(${LIB_TARGET} ${llvm_libs}) -llvm_map_components_to_libnames(llvm_libs support core irreader tablegen) -target_link_libraries(${TARGET} ${llvm_libs}) +# add tools executables +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools) diff --git a/include/dusk/Basic/CMakeLists.txt b/include/dusk/Basic/CMakeLists.txt index 64b3086..4ddb23f 100644 --- a/include/dusk/Basic/CMakeLists.txt +++ b/include/dusk/Basic/CMakeLists.txt @@ -1,6 +1,7 @@ set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/LLVM.h ${CMAKE_CURRENT_SOURCE_DIR}/SourceManager.h + ${CMAKE_CURRENT_SOURCE_DIR}/TokenDefinition.h ${HEADERS} PARENT_SCOPE ) diff --git a/include/dusk/Parse/TokenDefinition.h b/include/dusk/Basic/TokenDefinition.h similarity index 100% rename from include/dusk/Parse/TokenDefinition.h rename to include/dusk/Basic/TokenDefinition.h diff --git a/include/dusk/Parse/CMakeLists.txt b/include/dusk/Parse/CMakeLists.txt index 1388e2d..088ed05 100644 --- a/include/dusk/Parse/CMakeLists.txt +++ b/include/dusk/Parse/CMakeLists.txt @@ -3,7 +3,6 @@ set(HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/Parser.h ${CMAKE_CURRENT_SOURCE_DIR}/ParserResult.h ${CMAKE_CURRENT_SOURCE_DIR}/Token.h - ${CMAKE_CURRENT_SOURCE_DIR}/TokenDefinition.h ${HEADERS} PARENT_SCOPE ) diff --git a/include/dusk/Parse/Token.h b/include/dusk/Parse/Token.h index f8a8e11..36e47e7 100644 --- a/include/dusk/Parse/Token.h +++ b/include/dusk/Parse/Token.h @@ -11,7 +11,7 @@ #define DUSK_TOKEN_H #include "dusk/Basic/LLVM.h" -#include "dusk/Parse/TokenDefinition.h" +#include "dusk/Basic/TokenDefinition.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/SMLoc.h" diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index 625ab3f..f988162 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -13,7 +13,7 @@ #include "dusk/AST/Stmt.h" #include "dusk/AST/Pattern.h" #include "dusk/AST/ASTVisitor.h" -#include "dusk/Parse/TokenDefinition.h" +#include "dusk/Basic/TokenDefinition.h" #include "dusk/Frontend/Formatter.h" using namespace dusk; diff --git a/lib/Frontend/Compiler.cpp b/lib/Frontend/Compiler.cpp index 575c554..058148f 100644 --- a/lib/Frontend/Compiler.cpp +++ b/lib/Frontend/Compiler.cpp @@ -1,7 +1,7 @@ #include "dusk/Frontend/Compiler.h" #include "dusk/Frontend/Formatter.h" #include "dusk/Parse/Lexer.h" -#include "dusk/Parse/TokenDefinition.h" +#include "dusk/Basic/TokenDefinition.h" #include "dusk/Parse/Parser.h" #include "dusk/IRGen/IRGenerator.h" #include "llvm/Support/raw_os_ostream.h" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 6e08b8c..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -set(SOURCE - ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp - ${SOURCE} - PARENT_SCOPE -) -set(HEADERS - ${HEADERS} - PARENT_SCOPE -) diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 157059f..0000000 --- a/src/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "dusk/Frontend/Compiler.h" -#include "dusk/AST/ASTPrinter.h" -#include "dusk/AST/ASTNode.h" -#include "dusk/AST/Decl.h" -#include "llvm/ADT/StringRef.h" -#include <iostream> -#include <vector> - -using namespace dusk; - -int main(int argc, const char *argv[]) { - std::vector<llvm::StringRef> Filenames; - for (size_t i = 1; i < argc; i++) { - Filenames.push_back(argv[i]); - } - Compiler C(Filenames); - C.Compile(); - - return 0; -} diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt new file mode 100644 index 0000000..7b3316f --- /dev/null +++ b/tools/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(dusk-format) +add_subdirectory(duskc) diff --git a/tools/dusk-format/CMakeLists.txt b/tools/dusk-format/CMakeLists.txt new file mode 100644 index 0000000..dde42b8 --- /dev/null +++ b/tools/dusk-format/CMakeLists.txt @@ -0,0 +1,7 @@ +set(FORMAT_TARGET duskc) +set(FORMAT_SOURCE + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp +) + +add_executable(${FORMAT_TARGET} ${FORMAT_SOURCE}) +target_link_libraries(${FORMAT_TARGET} ${llvm_libs} ${LIB_TARGET}) diff --git a/tools/dusk-format/main.cpp b/tools/dusk-format/main.cpp new file mode 100644 index 0000000..2e31454 --- /dev/null +++ b/tools/dusk-format/main.cpp @@ -0,0 +1,14 @@ +#include "dusk/Frontend/Compiler.h" +#include <iostream> + +using namespace dusk; + +int main(int argc, const char *argv[]) { + std::vector<llvm::StringRef> Filenames; + for (size_t i = 1; i < argc; i++) { + Filenames.push_back(argv[i]); + } + Compiler C(Filenames); + C.Compile(); + return 0; +} diff --git a/tools/duskc/CMakeLists.txt b/tools/duskc/CMakeLists.txt new file mode 100644 index 0000000..c252651 --- /dev/null +++ b/tools/duskc/CMakeLists.txt @@ -0,0 +1,7 @@ +set(C_TARGET dusk-format) +set(C_SOURCE + ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp +) + +add_executable(${C_TARGET} ${C_SOURCE}) +target_link_libraries(${C_TARGET} ${llvm_libs} ${LIB_TARGET}) diff --git a/tools/duskc/main.cpp b/tools/duskc/main.cpp new file mode 100644 index 0000000..8a6eb11 --- /dev/null +++ b/tools/duskc/main.cpp @@ -0,0 +1,8 @@ +#include <iostream> + +#include "dusk/Frontend/Compiler.h" + +int main() { + std::cout << "Hello from duskc\n"; + return 0; +} -- GitLab