# # This is a sample project that can # be used to compile a shared lib out of a prelude program. # This shared library will be usable by SchedMCore toolset. # cmake_minimum_required(VERSION 2.6.2) project(PreludeAssemblage C CXX) if (NOT CMAKE_BUILD_TYPE) message(STATUS "No build type selected, default to Debug") set(CMAKE_BUILD_TYPE "Debug") endif(NOT CMAKE_BUILD_TYPE) option(ENABLE_PROFILING "Enable profiling version of the simulation" OFF) if (ENABLE_PROFILING) find_program(GPROF_EXECUTABLE NAMES gprof) endif() option(ENABLE_STANDALONE_SIMULATION "Enable mono-processor standalone simulation" OFF) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") include(../schedmcore-helpers.cmake) # Find the dot executable find_program(DOT_EXECUTABLE NAMES dot) # Change this parameter to toggle dot output format set(DOT_OUTPUT_FORMAT svg) set(PRELUDE_PATH_HINT "${LSMC_INSTALL_PATH}/") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}") find_package(Prelude REQUIRED) Prelude_Compile(NODE assemblage PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) Prelude_Compile(NODE assemblage_v2 PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) add_dependencies(assemblage_v2-noencoding assemblage-noencoding) Prelude_Compile(NODE assemblage_v3 PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) add_dependencies(assemblage_v3-noencoding assemblage-noencoding) Prelude_Compile(NODE assemblage_v4 PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) add_dependencies(assemblage_v4-noencoding assemblage-noencoding) Prelude_Compile(NODE assemblage_v41 PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) add_dependencies(assemblage_v41-noencoding assemblage-noencoding) Prelude_Compile(NODE assemblage_v5 PLU_FILES assemblage.plu USER_C_FILES assemblage_includes.h assemblage_includes.c NOENCODING REAL_IS_DOUBLE BOOL_IS_STDBOOL TRACING no ) add_dependencies(assemblage_v5-noencoding assemblage-noencoding) set(ASSEMBLAGE_VERSIONS "v2;v3;v4;v41;v5") # Rules for creating dependency graph of the Prelude tasks # Can only do that if dot tool (from graphviz is installed) if (DOT_EXECUTABLE) set(GRAPH_OUTPUT_FILE_NAME "DependencyGraph-assemblage_v1") if(LSMC_CONVERTER_VERSION VERSION_GREATER "1.2") set(CONVERTER_OPT "-m;dot;-o") else() set(CONVERTER_OPT "--taskset-output-fmt=dot;--taskset-output-file=") endif() add_custom_target(Graph-assemblage-v1 ${LSMC_CONVERTER_EXECUTABLE} -v0 -l $ ${CONVERTER_OPT}${GRAPH_OUTPUT_FILE_NAME}.dot COMMAND ${DOT_EXECUTABLE} -Tsvg -o ${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT} ${GRAPH_OUTPUT_FILE_NAME}.dot COMMENT "Create dep graph for assemblage v1 (result in ${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT})") set_property(DIRECTORY . APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT};${GRAPH_OUTPUT_FILE_NAME}.dot") add_dependencies(Graph-assemblage-v1 assemblage-noencoding) foreach (V IN LISTS ASSEMBLAGE_VERSIONS) set(GRAPH_OUTPUT_FILE_NAME "DependencyGraph-assemblage_${V}") add_custom_target(Graph-assemblage-${V} ${LSMC_CONVERTER_EXECUTABLE} -v0 -l $ ${CONVERTER_OPT}${GRAPH_OUTPUT_FILE_NAME}.dot COMMAND ${DOT_EXECUTABLE} -T${DOT_OUTPUT_FORMAT} -o ${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT} ${GRAPH_OUTPUT_FILE_NAME}.dot COMMENT "Create dep graph for assemblage ${V} (result in ${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT})") set_property(DIRECTORY . APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${GRAPH_OUTPUT_FILE_NAME}.${DOT_OUTPUT_FORMAT};${GRAPH_OUTPUT_FILE_NAME}.dot") add_dependencies(Graph-assemblage-${V} assemblage_${V}-noencoding) endforeach() add_custom_target(Graph-All DEPENDS Graph-assemblage-v1 Graph-assemblage-v2 Graph-assemblage-v3 Graph-assemblage-v4 Graph-assemblage-v41 Graph-assemblage-v5 COMMENT "Dependency Graph (All)") endif() if (LSMC_RUNNER_EXECUTABLE) # Rules for running Native simulation using SchedMCore runner. set(NATIVE_OUTPUT_FILE_NAME "lsmc_run-nort-results-assemblage_v1.txt") add_custom_target(NativeRun-assemblage-v1 ${CMAKE_COMMAND} -DNATIVE_RUNNER=${LSMC_RUNNER_EXECUTABLE} -DNATIVE_LIB=$ -DNATIVE_OUTPUT_FILE_NAME=${CMAKE_BINARY_DIR}/${NATIVE_OUTPUT_FILE_NAME} -P ${CMAKE_SOURCE_DIR}/../NativeRun.cmake COMMENT "Native Run with assemblage v1 (result in ${NATIVE_OUTPUT_FILE_NAME})") endif() if (LSMC_SIM_EXECUTABLE) set(NATIVE_OUTPUT_FILE_NAME "lsmc_sim-results-assemblage_v1.txt") add_custom_target(NativeSim-assemblage-v1 ${CMAKE_COMMAND} -DNATIVE_SIM=${LSMC_SIM_EXECUTABLE} -DNATIVE_LIB=$ -DNATIVE_OUTPUT_FILE_NAME=${CMAKE_BINARY_DIR}/${NATIVE_OUTPUT_FILE_NAME} -P ${CMAKE_SOURCE_DIR}/../NativeSim.cmake COMMENT "Native Simulation with assemblage v1 (result in ${NATIVE_OUTPUT_FILE_NAME})") endif() foreach (V IN LISTS ASSEMBLAGE_VERSIONS) if (LSMC_RUNNER_EXECUTABLE) set(NATIVE_OUTPUT_FILE_NAME "lsmc_run-nort-results-assemblage_${V}.txt") add_custom_target(NativeRun-assemblage-${V} ${CMAKE_COMMAND} -DNATIVE_RUNNER=${LSMC_RUNNER_EXECUTABLE} -DNATIVE_LIB=$ -DNATIVE_OUTPUT_FILE_NAME=${CMAKE_BINARY_DIR}/${NATIVE_OUTPUT_FILE_NAME} -P ${CMAKE_SOURCE_DIR}/../NativeRun.cmake COMMENT "Native Run with assemblage ${V} (result in ${NATIVE_OUTPUT_FILE_NAME})") endif() if (LSMC_SIM_EXECUTABLE) set(NATIVE_OUTPUT_FILE_NAME "lsmc_sim-results-assemblage_${V}.txt") add_custom_target(NativeSim-assemblage-${V} ${CMAKE_COMMAND} -DNATIVE_SIM=${LSMC_SIM_EXECUTABLE} -DNATIVE_LIB=$ -DNATIVE_OUTPUT_FILE_NAME=${CMAKE_BINARY_DIR}/${NATIVE_OUTPUT_FILE_NAME} -P ${CMAKE_SOURCE_DIR}/../NativeSim.cmake COMMENT "Native Simulation with assemblage ${V} (result in ${NATIVE_OUTPUT_FILE_NAME})") endif() endforeach() if (LSMC_RUNNER_EXECUTABLE) add_custom_target(NativeRun-All DEPENDS NativeRun-assemblage-v1 NativeRun-assemblage-v2 NativeRun-assemblage-v3 NativeRun-assemblage-v4 NativeRun-assemblage-v41 NativeRun-assemblage-v5 COMMENT "Native Run (All)") endif() if (LSMC_SIM_EXECUTABLE) add_custom_target(NativeSim-All DEPENDS NativeSim-assemblage-v1 NativeSim-assemblage-v2 NativeSim-assemblage-v3 NativeSim-assemblage-v4 NativeSim-assemblage-v41 NativeSim-assemblage-v5 COMMENT "Native Simulation (All)") endif() # TRACING options are: no, values, iterations, lttng-values, lttng-instances # (See the prelude compiler documentation). if(ENABLE_STANDALONE_SIMULATION) # The simulate program will run a bare mono-processor # simulation which should be [functionnally] equivalent # to a SchedMCore run. add_executable(simulate assemblage_main_test.c assemblage_includes.h assemblage_includes.c) find_library(MATH_LIBRARY m) target_link_libraries(simulate ${MATH_LIBRARY}) add_executable(simulate-noprint assemblage_main_test.c assemblage_includes.h assemblage_includes.c) find_library(MATH_LIBRARY m) target_link_libraries(simulate-noprint ${MATH_LIBRARY}) set_target_properties(simulate-noprint PROPERTIES COMPILE_FLAGS "-DNO_PRINT -DINMEMORY_SAMPLE") if (ENABLE_PROFILING) add_executable(simulate-gprof assemblage_main_test.c assemblage_includes.h assemblage_includes.c) target_link_libraries(simulate-gprof ${MATH_LIBRARY}) set_target_properties(simulate-gprof PROPERTIES COMPILE_FLAGS "-pg -DNO_PRINT" LINK_FLAGS "-pg") add_custom_command(OUTPUT gmon.out simulate-gprof-analysis.txt COMMAND $ 20000000 COMMAND ${GPROF_EXECUTABLE} -b $ gmon.out > simulate-gprof-analysis.txt DEPENDS simulate-gprof) add_custom_target(DoProfile DEPENDS gmon.out simulate-gprof-analysis.txt COMMENT "Run the simulation in profiling mode then run gprof") endif() endif()