[Simulator] Asynchronous SimulatorInterface & a few new features. (#4738)
[opentx.git] / radio / src / targets / simu / CMakeLists.txt
blob332c3b78d9401d109614b5cbd8e2b50e6776b0ca
1 foreach(FILE ${SRC})
2   set(SIMU_SRC ${SIMU_SRC} ../../${FILE})
3 endforeach()
5 set(SIMU_SRC
6   ${SIMU_SRC}
7   simpgmspace.cpp
8   simueeprom.cpp
9   simufatfs.cpp
10   simudisk.cpp
11   )
13 remove_definitions(-DCLI)
15 if(SDL_FOUND)
16   include_directories(${SDL_INCLUDE_DIR})
17   add_definitions(-DJOYSTICKS)
18 endif()
20 if(SIMU_LUA_COMPILER)
21   add_definitions(-DLUA_COMPILER)
22 endif()
24 if(Qt5Widgets_FOUND)
25   set(SIMULATOR_FLAVOUR opentx-${FLAVOUR})
26   set(SIMULATOR_TARGET ${SIMULATOR_FLAVOUR}-simulator)
27   add_definitions(-DSIMULATOR_FLAVOUR="${SIMULATOR_FLAVOUR}")
28   include_directories(${COMPANION_SRC_DIRECTORY} ${COMPANION_SRC_DIRECTORY}/simulation)
29   qt5_wrap_cpp(SIMULATOR_SRC ${COMPANION_SRC_DIRECTORY}/simulation/simulatorinterface.h opentxsimulator.h)
30   list(APPEND SIMULATOR_SRC ${SIMU_SRC} opentxsimulator.cpp)
31   add_library(${SIMULATOR_TARGET} SHARED ${SIMULATOR_SRC})
32   add_dependencies(${SIMULATOR_TARGET} ${FIRMWARE_DEPENDENCIES})
33   target_compile_definitions(${SIMULATOR_TARGET} PUBLIC ${APP_COMMON_DEFINES})  # set in top-level CMakeLists
34   target_link_libraries(${SIMULATOR_TARGET} ${SDL_LIBRARY})
35   qt5_use_modules(${SIMULATOR_TARGET} Core)
36   add_custom_target(libsimulator DEPENDS ${SIMULATOR_TARGET})
38   # Prepare the "all-simu-libs" target to build simulator libraries for *every* supported PCB type (PCB_TYPES list)
39   #  (a fast build machine or corresponding amount of patience is recommended for this target).
40   if(${CMAKE_GENERATOR} MATCHES ".*Unix Makefiles$")
41     # Ensure parallel builds with GCC make (try with MAKEFLAGS but this seems to be getting clobbered somewhere).
42     # otherwise 'make' may complain: "warning: jobserver unavailable: using -j1..." and build single-threaded.  (Ninja always rocks this.)
43     set(mkflags "$ENV{MAKEFLAGS}")
44     if (mkflags STREQUAL "")
45       set(mkflags "-j")
46     endif()
47   endif()
48   set(all_libs_cmd ${CMAKE_COMMAND} -E echo "Building all simulator libraries")
49   foreach(pcb ${PCB_TYPES})
50     set(pcbrev "")
51     if(pcb STREQUAL SKY9X)
52       set(pcbrev "-DPCBREV=REVC")
53     elseif(pcb STREQUAL X12S)
54       set(pcbrev "-DPCBREV=13")
55     endif()
56     set(all_libs_cmd ${all_libs_cmd} && ${CMAKE_COMMAND} -DPCB=${pcb} ${pcbrev} -Wno-dev ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} && ${CMAKE_COMMAND} --build . --target libsimulator -- ${mkflags})
57   endforeach()
58   add_custom_target(all-simu-libs COMMAND ${all_libs_cmd} USES_TERMINAL WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
59 endif()
61 if(WIN32)
62   include_directories(SYSTEM ${WIN_INCLUDE_DIRS})
63   target_link_libraries(${SIMULATOR_TARGET} PRIVATE ${WIN_LINK_LIBRARIES})
64 endif(WIN32)
66 if(MSVC)
67   set(CMAKE_CXX_FLAGS "/EHsc /LD /MP")
68 else()
69   if(MINGW)
70     # struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw
71     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
72   endif()
73   set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
74   set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
75 endif()
77 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}")
78 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
80 use_cxx11()  # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
82 if(FOX_FOUND)
83   if(SIMU_DISKIO)
84     set(SIMU_SRC ${SIMU_SRC} ${FATFS_DIR}/FatFs/ff.c ${FATFS_DIR}/option/ccsbcs.c)
85   endif()
86   add_executable(simu WIN32 ${SIMU_SRC} ${RADIO_SRC_DIRECTORY}/simu.cpp)
87   add_dependencies(simu ${FIRMWARE_DEPENDENCIES})
88   target_include_directories(simu PUBLIC ${FOX_INCLUDE_DIR} )
89   target_link_libraries(simu ${FOX_LIBRARY} pthread ${SDL_LIBRARY})
90   target_compile_definitions(simu PUBLIC -DSIMU)
91   if(SIMU_DISKIO)
92     target_compile_definitions(simu PUBLIC -DSIMU_DISKIO)
93   endif()
94 endif()
96 if(APPLE)
97   # OS X compiler no longer automatically includes /Library/Frameworks in search path
98   set(CMAKE_SHARED_LINKER_FLAGS -F/Library/Frameworks)
100   set(SIMULATOR_BUNDLES)
101   foreach(library ${OPENTX_LIBRARIES})
102     set(SIMULATOR_BUNDLE "${library}-bundle")
103     add_custom_target(${SIMULATOR_BUNDLE}
104       COMMAND install_name_tool -change /opt/local/Library/Frameworks/QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore lib${library}.dylib
105       COMMAND install_name_tool -change /opt/local/Library/Frameworks/QtNetwork.framework/Versions/4/QtNetwork @executable_path/../Frameworks/QtNetwork.framework/Versions/4/QtNetwork lib${library}.dylib
106       COMMAND install_name_tool -change /opt/local/Library/Frameworks/QtXml.framework/Versions/4/QtXml @executable_path/../Frameworks/QtXml.framework/Versions/4/QtXml lib${library}.dylib
107       COMMAND install_name_tool -change /opt/local/Library/Frameworks/QtGui.framework/Versions/4/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui lib${library}.dylib
108       COMMAND install_name_tool -change @rpath/SDL.framework/Versions/A/SDL @executable_path/../Frameworks/SDL.framework/Versions/A/SDL lib${library}.dylib
109       WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
110       COMMAND pwd
111       COMMAND cp lib${library}.dylib companion.app/Contents/Resources/
112       DEPENDS ${library}
113       )
114     list(APPEND SIMULATOR_BUNDLES ${SIMULATOR_BUNDLE})
115   endforeach()
116   add_custom_target(opentx-simulators-bundle DEPENDS ${SIMULATOR_BUNDLES})
117 endif(APPLE)
119 PrintTargetReport("simu/libsimulator")