set(MAIN_FUNCTION main.cpp) set(MC_C_FILES mc_shared_sem.c MCCommon.c transitions/wrappers/MCSharedLibraryWrappers.c ) set(MC_CPP_FILES MCObjectStore.cpp MCSharedTransition.cpp MCTransition.cpp MCState.cpp MCTransitionFactory.cpp MCStateStackItem.cpp MCThreadData.cpp MCClockVector.cpp mcmini_private.cpp signals.cpp misc/cond/MCConditionVariableDefaultPolicy.cpp misc/cond/MCConditionVariableArbitraryPolicy.cpp misc/cond/MCConditionVariableOrderedPolicy.cpp misc/cond/MCConditionVariableGLibcPolicy.cpp misc/cond/MCConditionVariableSingleGroupPolicy.cpp misc/cond/MCWakeGroup.cpp objects/MCThread.cpp objects/MCVisibleObject.cpp objects/MCMutex.cpp objects/MCRWLock.cpp objects/MCRWWLock.cpp objects/MCSemaphore.cpp objects/MCGlobalVariable.cpp objects/MCBarrier.cpp objects/MCConditionVariable.cpp transitions/barrier/MCBarrierEnqueue.cpp transitions/barrier/MCBarrierInit.cpp transitions/barrier/MCBarrierWait.cpp transitions/cond/MCCondBroadcast.cpp transitions/cond/MCCondEnqueue.cpp transitions/cond/MCCondInit.cpp transitions/cond/MCCondSignal.cpp transitions/cond/MCCondWait.cpp transitions/MCTransitionsShared.cpp transitions/misc/MCExitTransition.cpp transitions/misc/MCAbortTransition.cpp transitions/misc/MCGlobalVariableRead.cpp transitions/misc/MCGlobalVariableWrite.cpp transitions/mutex/MCMutexInit.cpp transitions/mutex/MCMutexLock.cpp transitions/mutex/MCMutexUnlock.cpp transitions/semaphore/MCSemEnqueue.cpp transitions/semaphore/MCSemInit.cpp transitions/semaphore/MCSemPost.cpp transitions/semaphore/MCSemWait.cpp transitions/threads/MCThreadCreate.cpp transitions/threads/MCThreadFinish.cpp transitions/threads/MCThreadJoin.cpp transitions/threads/MCThreadStart.cpp transitions/rwlock/MCRWLockInit.cpp transitions/rwlock/MCRWLockReaderLock.cpp transitions/rwlock/MCRWLockWriterLock.cpp transitions/rwlock/MCRWLockUnlock.cpp transitions/rwlock/MCRWLockWriterEnqueue.cpp transitions/rwlock/MCRWLockReaderEnqueue.cpp transitions/rwwlock/MCRWWLockInit.cpp transitions/rwwlock/MCRWWLockReaderEnqueue.cpp transitions/rwwlock/MCRWWLockReaderLock.cpp transitions/rwwlock/MCRWWLockWriter1Enqueue.cpp transitions/rwwlock/MCRWWLockWriter1Lock.cpp transitions/rwwlock/MCRWWLockWriter2Enqueue.cpp transitions/rwwlock/MCRWWLockWriter2Lock.cpp transitions/rwwlock/MCRWWLockUnlock.cpp transitions/wrappers/MCBarrierWrappers.cpp transitions/wrappers/MCConditionVariableWrappers.cpp transitions/wrappers/MCGlobalVariableWrappers.cpp transitions/wrappers/MCMutexTransitionWrappers.cpp transitions/wrappers/MCSemaphoreTransitionWrappers.cpp transitions/wrappers/MCSharedLibraryWrappers.c transitions/wrappers/MCThreadTransitionWrappers.cpp transitions/wrappers/MCRWLockWrappers.cpp transitions/wrappers/MCRWWLockWrappers.cpp ) set(MC_COMPILER_EXPLICIT_COMPILER_FLAGS -Wall) # -lrt -> shared memory # -pthread -> libpthread.so # -lm -> math library # -ldl -> dlsym etc. set(MC_LINK_TARGET_FLAGS -lrt -pthread -lm -ldl) add_executable(mcmini_demo ${MC_CPP_FILES} ${MC_C_FILES} ${MAIN_FUNCTION}) add_executable(McMini::Demo ALIAS mcmini_demo) set_target_properties(mcmini_demo PROPERTIES OUTPUT_NAME "mcmini-demo") target_include_directories(mcmini_demo PUBLIC "${MCMINI_INCLUDE_DIR}") target_link_libraries(mcmini_demo PUBLIC ${MC_LINK_TARGET_FLAGS}) add_library(mcmini_checker SHARED ${MC_CPP_FILES} ${MC_C_FILES} ${MAIN_FUNCTION}) add_library(McMini::Dylib ALIAS mcmini_checker) set_target_properties(mcmini_checker PROPERTIES OUTPUT_NAME "mcmini") target_include_directories(mcmini_checker PUBLIC "${MCMINI_INCLUDE_DIR}") target_compile_definitions(mcmini_checker PUBLIC MC_SHARED_LIBRARY=1) target_compile_options(mcmini_checker PRIVATE ${MC_COMPILER_EXPLICIT_COMPILER_FLAGS}) target_link_libraries(mcmini_checker PUBLIC ${MC_LINK_TARGET_FLAGS}) # Executable that loads the shared library set(MAIN_FUNCTION launch.c) add_executable(mcmini ${MAIN_FUNCTION}) target_include_directories(mcmini PUBLIC "${MCMINI_INCLUDE_DIR}") target_compile_options(mcmini PUBLIC) # Exported test libraries add_library(mcrwlock_lib STATIC export/rwwlock.c) add_library(McMini::RWWLockLib ALIAS mcrwlock_lib) target_include_directories(mcrwlock_lib PUBLIC "${MCMINI_INCLUDE_DIR}") # For the demo, we add the target_link_libraries(mcmini_demo PUBLIC McMini::RWWLockLib)