Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,22 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

include(GNUInstallDirs)
set(PROJECT_VERSION 0.1.0)

include(cmake/mruby.cmake)
include(cmake/lightstorm.cmake)
set(PROJECT_DESCRIPTION "Minimalistic ahead-of-time Ruby compiler")
set(PROJECT_HOMEPAGE_URL "https://github.com/dragonruby/lightstorm")

include(GNUInstallDirs)

find_package(LLVM CONFIG REQUIRED)
message("Using LLVM_CONFIG: ${LLVM_CONFIG}")
find_package(MLIR CONFIG REQUIRED)
message("Using MLIR_CONFIG: ${MLIR_CONFIG}")

include(cmake/mruby.cmake)
include(cmake/version.cmake)
include(cmake/lightstorm.cmake)

list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}")
list(APPEND CMAKE_MODULE_PATH "${MLIR_DIR}")
include(AddLLVM)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Simplified version of [Firestorm](https://www.youtube.com/watch?v=NfMX-dFMSr0) t

## Development Setup

You can either use a codespace or a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers). For a local setup, follow the steps below.
You can either use a [codespace](https://docs.github.com/en/codespaces/getting-started/quickstart) or a [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers). For a local setup, follow the steps below.

### Install Dependencies

Expand Down
9 changes: 9 additions & 0 deletions cmake/mruby.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@ set(MRUBY_BINARY "${MRUBY_DIR}/bin/mruby")
set(MRBC_BINARY "${MRUBY_DIR}/bin/mrbc")
set(MRUBY_STATIC "${MRUBY_DIR}/build/host/lib/libmruby.a")

file(READ ${MRUBY_DIR}/include/mruby/version.h mruby_version_h)

string(REGEX MATCH "MRUBY_RELEASE_MAJOR ([0-9]*)" _ ${mruby_version_h})
set(MRUBY_RELEASE_MAJOR ${CMAKE_MATCH_1})
string(REGEX MATCH "MRUBY_RELEASE_MINOR ([0-9]*)" _ ${mruby_version_h})
set(MRUBY_RELEASE_MINOR ${CMAKE_MATCH_1})
string(REGEX MATCH "MRUBY_RELEASE_TEENY ([0-9]*)" _ ${mruby_version_h})
set(MRUBY_RELEASE_TEENY ${CMAKE_MATCH_1})

ExternalProject_Add(
mruby
SOURCE_DIR ${MRUBY_DIR}
Expand Down
23 changes: 23 additions & 0 deletions cmake/version.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE)

execute_process(
COMMAND date "+%d %b %Y"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE BUILD_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE)

set(MRUBY_VERSION
${MRUBY_RELEASE_MAJOR}.${MRUBY_RELEASE_MINOR}.${MRUBY_RELEASE_TEENY})

configure_file(${CMAKE_SOURCE_DIR}/lib/version.cpp
${CMAKE_BINARY_DIR}/lib/version.cpp @ONLY)

add_library(lightstorm_version ${CMAKE_BINARY_DIR}/lib/version.cpp)
target_include_directories(lightstorm_version
PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_include_directories(lightstorm_version SYSTEM
PRIVATE ${LLVM_INCLUDE_DIRS})
9 changes: 9 additions & 0 deletions include/lightstorm/version.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

namespace llvm {
class raw_ostream;
}

namespace lightstorm {
void print_version_information(llvm::raw_ostream &out);
} // namespace lightstorm
38 changes: 38 additions & 0 deletions lib/version.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include "lightstorm/version.h"

#include <llvm/Support/raw_ostream.h>

namespace lightstorm {

static const char *version_string() {
return "@PROJECT_VERSION@";
}
static const char *commit_string() {
return "@GIT_COMMIT@";
}
static const char *build_date_string() {
return "@BUILD_DATE@";
}
static const char *description_string() {
return "@PROJECT_DESCRIPTION@";
}
static const char *homepage_string() {
return "@PROJECT_HOMEPAGE_URL@";
}
static const char *llvm_version_string() {
return "@LLVM_VERSION@";
}
static const char *mruby_version_string() {
return "@MRUBY_VERSION@";
}

void print_version_information(llvm::raw_ostream &out) {
out << "Lightstorm: " << description_string() << "\n";
out << "Home: " << homepage_string() << "\n";
out << "Version: " << version_string() << " (LLVM " << llvm_version_string() << ", mruby "
<< mruby_version_string() << ")" << "\n";
out << "Commit: " << commit_string() << "\n";
out << "Date: " << build_date_string() << "\n";
}

} // namespace lightstorm
4 changes: 2 additions & 2 deletions tests/end2end/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ function(add_end2end_test dir)
set(host_ruby ${CMAKE_CURRENT_LIST_DIR}/${dir}/host.rb)
set(lightstorm_ruby ${CMAKE_CURRENT_LIST_DIR}/${dir}/lightstorm.rb)
set(host_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/host.c)
set(lightstorm_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/lighstorm.c)
set(lightstorm_c ${CMAKE_CURRENT_BINARY_DIR}/${dir}/lightstorm.c)
set(target_name end2end_test_${dir}.exe)
add_custom_command(
OUTPUT ${lightstorm_c}
Expand All @@ -11,7 +11,7 @@ function(add_end2end_test dir)
DEPENDS ${lightstorm_ruby} lightstorm)
add_custom_command(
OUTPUT ${host_c}
COMMAND $<TARGET_FILE:mrbc_binary> -Blighstorm_host -o ${host_c}
COMMAND $<TARGET_FILE:mrbc_binary> -Blightstorm_host -o ${host_c}
${host_ruby}
DEPENDS ${host_ruby})
add_executable(${target_name} end2end_test_main.c ${host_c} ${lightstorm_c})
Expand Down
4 changes: 2 additions & 2 deletions tests/end2end/end2end_test_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <mruby/proc.h>

mrb_value lightstorm_top(mrb_state *mrb, mrb_value self);
extern const uint8_t lighstorm_host[];
extern const uint8_t lightstorm_host[];

int main() {
mrb_state *mrb = mrb_open();
Expand All @@ -13,7 +13,7 @@ int main() {
mrb_value self = mrb_top_self(mrb);
mrb->c->ci->stack[0] = self;
lightstorm_top(mrb, self);
mrb_load_irep(mrb, lighstorm_host);
mrb_load_irep(mrb, lightstorm_host);
mrb_close(mrb);
return 0;
}
5 changes: 3 additions & 2 deletions tools/lightstorm/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
add_executable(lightstorm lightstorm.cpp)
target_link_libraries(
lightstorm PRIVATE lightstorm_compiler lightstorm_conversion
lightstorm_optimizations rite_dialect LLVMOption)
lightstorm
PRIVATE lightstorm_compiler lightstorm_conversion lightstorm_optimizations
rite_dialect LLVMOption lightstorm_version)
target_compile_options(lightstorm PRIVATE -fno-rtti -fno-exceptions)
target_include_directories(
lightstorm PRIVATE ${CMAKE_SOURCE_DIR}/include ${LLVM_INCLUDE_DIRS}
Expand Down
2 changes: 2 additions & 0 deletions tools/lightstorm/lightstorm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "lightstorm/conversion/conversion.h"
#include "lightstorm/dialect/rite.h"
#include "lightstorm/optimizations/optimizations.h"
#include "lightstorm/version.h"

llvm::cl::OptionCategory LightstormCategory("lightstorm");

Expand Down Expand Up @@ -41,6 +42,7 @@ llvm::cl::opt<bool> NoOpt("no-opt", llvm::cl::Optional, llvm::cl::desc("Disable
int main(int argc, char **argv) {
llvm::llvm_shutdown_obj shutdownGuard;

llvm::cl::SetVersionPrinter(lightstorm::print_version_information);
llvm::cl::HideUnrelatedOptions(LightstormCategory);
llvm::cl::ParseCommandLineOptions(argc, argv);

Expand Down
Loading