Skip to content

Commit

Permalink
Generated from commit 4a00219b3d96b1e5c7595f1a5ff12d3b4656eec2
Browse files Browse the repository at this point in the history
  • Loading branch information
Pusnow committed Mar 18, 2022
1 parent 3098c76 commit f7d1641
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 44 deletions.
81 changes: 42 additions & 39 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
cmake_minimum_required(VERSION 3.11)

project(e VERSION 3.3.0)
project(e VERSION 3.3.1)

if(WIN32)
message(FATAL_ERROR "WIN32 target is obsolete. Please use Windows Subsystems for Linux")
message(
FATAL_ERROR
"WIN32 target is obsolete. Please use Windows Subsystems for Linux")
endif(WIN32)

set(CMAKE_CXX_STANDARD 17)
Expand Down Expand Up @@ -80,15 +82,14 @@ check_cxx_source_compiles(
"
HAVE_PRAGMA_PACK)


check_cxx_source_compiles(
"
#include <cassert>
#include <cstring>
#include <cxxabi.h>
#include <typeinfo>
struct aAa {};
int main(void) {
struct aAa a1;
int status = -4;
Expand All @@ -108,10 +109,9 @@ else()
endif()

if(HAVE_DEMANGLE)
add_compile_definitions(HAVE_DEMANGLE)
add_compile_definitions(HAVE_DEMANGLE)
endif()


# Build E
file(GLOB_RECURSE e_SOURCES "src/*.cpp")

Expand All @@ -123,8 +123,7 @@ find_package(Threads REQUIRED)
target_link_libraries(e PUBLIC Threads::Threads)

if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set_target_properties(e PROPERTIES OSX_ARCHITECTURES
"arm64;x86_64")
set_target_properties(e PROPERTIES OSX_ARCHITECTURES "arm64;x86_64")

endif()
target_compile_options(e PRIVATE -g -O0 -Wall)
Expand All @@ -135,12 +134,13 @@ include(FetchContent)

FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/release-1.10.0.zip)
URL https://github.com/google/googletest/archive/b007c54f2944e193ac44fba1bc997cb65826a0b9.zip
)

FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
FetchContent_Populate(googletest)
add_subdirectory(${googletest_SOURCE_DIR}/googletest ${googletest_BINARY_DIR})
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
endif()

# Find Solution
Expand Down Expand Up @@ -175,7 +175,6 @@ endfunction()
file(GLOB_RECURSE e_solution_CMAKELISTS
"${PROJECT_SOURCE_DIR}/solution/*/CMakeLists.txt")


foreach(cmakelists ${e_solution_CMAKELISTS})
get_filename_component(e_solution_DIR ${cmakelists} DIRECTORY)
add_subdirectory(${e_solution_DIR})
Expand All @@ -185,49 +184,53 @@ endforeach()

include(FetchContent)
function(get_solution)
set(SOLUTION_REPO "https://anlab-kaist.github.io/KENSv3/solution/${CMAKE_PROJECT_VERSION}")
set(SOLUTION_REPO
"https://anlab-kaist.github.io/KENSv3/solution/${CMAKE_PROJECT_VERSION}")
foreach(arg IN LISTS ARGN)

# Find Solution
if(NOT TARGET ${arg}_solution)
find_library(${arg}_solution_path ${arg}_solution PATH ${SOLUTION_PATH} EXACT)


if (NOT ${arg}_solution_path)
# Download Solution
message(STATUS "Donwloading ${arg}_solution")
get_solution_name(${arg}_solution)

include(FetchContent)

FetchContent_Declare(
${arg}_solution URL "${SOLUTION_REPO}/${${arg}_solution_SOLUTION_NAME}")
FetchContent_GetProperties(${arg}_solution)
if(NOT (${arg}_solution_POPULATED))
FetchContent_Populate(${arg}_solution)
endif()

find_library(${arg}_solution_path ${arg}_solution PATH ${${arg}_solution_SOURCE_DIR} EXACT)
endif()
add_library(${arg}_solution SHARED IMPORTED GLOBAL)
set_property(TARGET ${arg}_solution PROPERTY IMPORTED_LOCATION ${${arg}_solution_path})

target_link_libraries(${arg}_solution INTERFACE e)
find_library(${arg}_solution_path ${arg}_solution PATH ${SOLUTION_PATH}
EXACT)

if(NOT ${arg}_solution_path)
# Download Solution
message(STATUS "Donwloading ${arg}_solution")
get_solution_name(${arg}_solution)

include(FetchContent)

FetchContent_Declare(
${arg}_solution
URL "${SOLUTION_REPO}/${${arg}_solution_SOLUTION_NAME}")
FetchContent_GetProperties(${arg}_solution)
if(NOT (${arg}_solution_POPULATED))
FetchContent_Populate(${arg}_solution)
endif()

find_library(${arg}_solution_path ${arg}_solution PATH
${${arg}_solution_SOURCE_DIR} EXACT)
endif()
add_library(${arg}_solution SHARED IMPORTED GLOBAL)
set_property(TARGET ${arg}_solution PROPERTY IMPORTED_LOCATION
${${arg}_solution_path})

target_link_libraries(${arg}_solution INTERFACE e)
endif()
endforeach()
endfunction()

# Build Apps

include(cmake/app-ref.cmake OPTIONAL)
if (e_apps_CMAKELISTS)
if(e_apps_CMAKELISTS)

else()
file(GLOB e_apps_CMAKELISTS "${PROJECT_SOURCE_DIR}/app/*/CMakeLists.txt")
file(GLOB e_apps_CMAKELISTS "${PROJECT_SOURCE_DIR}/app/*/CMakeLists.txt")
endif()

list(FILTER e_apps_CMAKELISTS EXCLUDE REGEX ".*/scheduling/.*")


foreach(cmakelists ${e_apps_CMAKELISTS})
get_filename_component(e_apps_DIR ${cmakelists} DIRECTORY)
add_subdirectory(${e_apps_DIR})
Expand All @@ -246,4 +249,4 @@ if(DOXYGEN_FOUND)

endif(DOXYGEN_FOUND)

include(cmake/kens-dist.cmake OPTIONAL)
include(cmake/kens-dist.cmake OPTIONAL)
10 changes: 5 additions & 5 deletions src/E/E_System.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,14 +170,14 @@ Runnable::Runnable()
: state(State::CREATED), threadLock(stateMtx, std::defer_lock),
schedLock(stateMtx), thread(&Runnable::run, this) {}
Runnable::~Runnable() {
assert(std::this_thread::get_id() != thread.get_id());
assert(schedLock.owns_lock());
assert(std::this_thread::get_id() != thread.get_id());
thread.join();
}

void Runnable::run() {
assert(std::this_thread::get_id() == thread.get_id());
threadLock.lock();
assert(std::this_thread::get_id() == thread.get_id());
cond.wait(threadLock, [&] { return state == State::STARTING; });
pre_main();
state = State::READY;
Expand All @@ -190,26 +190,26 @@ void Runnable::run() {
}

void Runnable::wait() {
assert(std::this_thread::get_id() == thread.get_id());
assert(threadLock.owns_lock());
assert(std::this_thread::get_id() == thread.get_id());
assert(state == State::RUNNING);
state = State::WAITING;
cond.notify_all();
cond.wait(threadLock, [&] { return state == State::RUNNING; });
}

void Runnable::start() {
assert(std::this_thread::get_id() != thread.get_id());
assert(schedLock.owns_lock());
assert(std::this_thread::get_id() != thread.get_id());
assert(state == State::CREATED);
state = State::STARTING;
cond.notify_all();
cond.wait(schedLock, [&] { return state == State::READY; });
assert(schedLock.owns_lock());
}
Runnable::State Runnable::wake() {
assert(std::this_thread::get_id() != thread.get_id());
assert(schedLock.owns_lock());
assert(std::this_thread::get_id() != thread.get_id());
assert(state == State::READY);
state = State::RUNNING;
cond.notify_all();
Expand Down

0 comments on commit f7d1641

Please sign in to comment.