Changeset f922c1f in OpenModelica


Ignore:
Timestamp:
2020-10-21T14:04:16+02:00 (4 years ago)
Author:
Mahder Gebremedhin <mahder.gebremedhin@…>
Children:
662060f4
Parents:
a4d5b72
git-author:
Mahder Gebremedhin <mahder.gebremedhin@…> (09/04/20 13:25:17)
git-committer:
Mahder Gebremedhin <mahder.gebremedhin@…> (10/21/20 14:04:16)
Message:

[cmake] Move compilation out of boot folder

  • We used to configure and compile the MetaModelica files from the perspective of the Compiler/boot folder. this was done just to simplify things at the begining since it made it easier to compare things with the old approach which works from that folder.

Now MetaModelica related compilations are done from the perspective
of the Compiler/ folder. This is more logical.

Location:
OMCompiler/Compiler
Files:
2 added
3 deleted
1 edited
8 moved

Legend:

Unmodified
Added
Removed
  • OMCompiler/Compiler/CMakeLists.txt

    r049bdea9 rf922c1f  
    11
    22omc_add_subdirectory(runtime)
    3 omc_add_subdirectory(boot)
     3
     4
     5set(OMC_EXE ${PROJECT_SOURCE_DIR}/../build/bin/omc)
     6
     7# list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/.cmake")
     8# enable_language(MODELICA)
     9
     10macro(add_interface_checker_script mo_source_file)
     11
     12    get_filename_component(file_name_no_ext ${mo_source_file} NAME_WLE)
     13    get_filename_component(source_dir ${mo_source_file} DIRECTORY)
     14
     15    set(MM_PACKAGE_NAME ${file_name_no_ext})
     16    set(MM_INPUT_SOURCE_DIR ${source_dir})
     17    set(MM_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
     18    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/.cmake/mm_check_interface.in.mos ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.check_interface.mos)
     19endmacro(add_interface_checker_script)
     20
     21macro(add_compile_script mo_source_file)
     22    get_filename_component(file_name_no_ext ${mo_source_file} NAME_WLE)
     23    get_filename_component(source_dir ${mo_source_file} DIRECTORY)
     24
     25    set(MM_PACKAGE_NAME ${file_name_no_ext})
     26    set(MM_INPUT_SOURCE_DIR ${source_dir})
     27    set(MM_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
     28    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/.cmake/mm_compile.in.mos ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.compile.mos)
     29endmacro(add_compile_script)
     30
     31
     32add_executable(dep_scanner ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/dep_scanner.cpp)
     33target_compile_features(dep_scanner PRIVATE cxx_std_11)
     34
     35
     36
     37
     38
     39
     40macro(add_interface_check_step mo_source_file)
     41    add_interface_checker_script(${mo_source_file})
     42
     43    get_filename_component(file_name_no_ext ${mo_source_file} NAME_WLE)
     44    get_filename_component(source_dir ${mo_source_file} DIRECTORY)
     45
     46    add_custom_command(
     47        DEPENDS ${mo_source_file}
     48                ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.check_interface.mos
     49
     50        COMMAND ${OMC_EXE} -g=MetaModelica -n=1 --locale=en ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.check_interface.mos
     51
     52        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo.tmp
     53        BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo
     54        COMMENT "Checking interface for ${mo_source_file}"
     55    )
     56
     57    set(OMC_MM_SOURCE_FILES ${OMC_MM_SOURCE_FILES} ${mo_source_file})
     58
     59    set(OMC_MM_INTERFACE_FILES ${OMC_MM_INTERFACE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo)
     60    set(OMC_MM_STAMP_FILES ${OMC_MM_STAMP_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo.tmp)
     61
     62
     63    add_custom_command(
     64        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo
     65        COMMAND ${CMAKE_COMMAND} -E cat ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.rev_depends
     66        COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.rev_deps.stamp
     67        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.rev_deps.stamp
     68        COMMENT "Touched dependents of ${mo_source_file}"
     69    )
     70    set(OMC_REV_DEP_STAMP_FILES ${OMC_REV_DEP_STAMP_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.rev_deps.stamp)
     71
     72endmacro(add_interface_check_step)
     73
     74
     75
     76
     77macro(add_compile_step mo_source_file)
     78
     79    add_compile_script(${mo_source_file})
     80
     81    get_filename_component(file_name_no_ext ${mo_source_file} NAME_WLE)
     82    get_filename_component(source_dir ${mo_source_file} DIRECTORY)
     83
     84    add_custom_command(
     85        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.interface.mo.tmp
     86                ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.compile.mos
     87
     88        COMMAND ${OMC_EXE} -g=MetaModelica -n=1 --locale=en ${CMAKE_CURRENT_BINARY_DIR}/${file_name_no_ext}.compile.mos
     89
     90        OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}.c
     91                ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}_records.c
     92                ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}.h
     93                ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}_includes.h
     94
     95        BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}.deps
     96
     97        COMMENT "Translating ${mo_source_file}"
     98    )
     99
     100    set(OMC_C_SOURCE_FILES ${OMC_C_SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}.c
     101                                                   ${CMAKE_CURRENT_BINARY_DIR}/c_files/${file_name_no_ext}_records.c)
     102endmacro(add_compile_step)
     103
     104
     105
     106
     107
     108
     109include(${CMAKE_CURRENT_SOURCE_DIR}/.cmake/template_compilation.cmake)
     110include(${CMAKE_CURRENT_SOURCE_DIR}/.cmake/meta_modelica_source_list.cmake)
     111
     112foreach(OMC_MM_SOURCE ${OMC_MM_ALWAYS_SOURCES})
     113    add_interface_check_step(${OMC_MM_SOURCE})
     114    add_compile_step(${OMC_MM_SOURCE})
     115endforeach()
     116
     117foreach(OMC_MM_SOURCE ${OMC_MM_BACKEND_SOURCES})
     118    add_interface_check_step(${OMC_MM_SOURCE})
     119    add_compile_step(${OMC_MM_SOURCE})
     120endforeach()
     121
     122
     123add_custom_target(INTERFACE_CHECK
     124                  DEPENDS ${OMC_MM_STAMP_FILES}
     125                  COMMENT "Checked interfaces of modified MetaModelica sources.")
     126
     127add_custom_command(
     128                DEPENDS ${OMC_MM_INTERFACE_FILES}
     129                COMMAND $<TARGET_FILE:dep_scanner> ${CMAKE_CURRENT_SOURCE_DIR}/.cmake/package_list.txt ${CMAKE_CURRENT_BINARY_DIR}
     130                COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/dep_scan.stamp
     131                OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dep_scan.stamp
     132                COMMENT "Scanning reverse dependencies for MetaModelica sources.")
     133add_custom_target(DEPENDENCY_SCAN
     134                  DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/dep_scan.stamp
     135                  COMMENT "Scanned reverse dependencies for MetaModelica sources.")
     136
     137
     138add_custom_target(DEPENDENCY_UPDATE
     139                  DEPENDS ${OMC_REV_DEP_STAMP_FILES}
     140                  COMMENT "Updated dependencies for MetaModelica sources.")
     141
     142
     143add_dependencies(DEPENDENCY_SCAN INTERFACE_CHECK)
     144add_dependencies(DEPENDENCY_UPDATE DEPENDENCY_SCAN)
     145
     146add_library(OpenModelicaCompiler SHARED ${OMC_C_SOURCE_FILES})
     147target_compile_definitions(OpenModelicaCompiler PRIVATE ADD_METARECORD_DEFINITIONS=)
     148
     149add_dependencies(OpenModelicaCompiler DEPENDENCY_UPDATE)
     150
     151include_regular_expression("^$")
     152# There is a lonely omc_file.h in Util/. It belongs in runtime/. Remove this when it is moved.
     153target_include_directories(OpenModelicaCompiler PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/Util)
     154
     155# include_regular_expression("^.*$" "^$")
     156
     157
     158target_link_libraries(OpenModelicaCompiler PUBLIC omc::parser)
     159target_link_libraries(OpenModelicaCompiler PUBLIC omc::compiler::runtime)
     160target_link_libraries(OpenModelicaCompiler PUBLIC omc::compiler::backendruntime)
     161target_link_libraries(OpenModelicaCompiler PUBLIC omc::compiler::graphstream)
     162target_link_libraries(OpenModelicaCompiler PUBLIC OpenModelicaRuntimeC)
     163target_link_libraries(OpenModelicaCompiler PUBLIC omc::3rd::modelica_external_c)
     164target_link_libraries(OpenModelicaCompiler PUBLIC omc::3rd::modelica_io)
Note: See TracChangeset for help on using the changeset viewer.