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