OSDN Git Service

[Build][Win32] Separate GUI(and fmgen and emuutils) to separate DLLs.
[csp-qt/common_source_project-fm7.git] / source / build-cmake / cmake / config_commonsource.cmake
1 # Set configuration for building XM7/SDL.
2 # (C) 2014 K.Ohta <whatisthis.sowhat@gmail.com>
3 # This is part of XM7/SDL, but license is apache 2.2,
4 # this part was written only me.
5
6 include(CheckFunctionExists)
7
8 if(USE_DEVICES_SHARED_LIB)
9   add_definitions(-DUSE_DEVICES_SHARED_LIB)
10   set(I386_CPPS
11         libcpu_newdev/i386.cpp
12         libcpu_newdev/libcpu_i386/i386_real.cpp
13         libcpu_newdev/libcpu_i386/i386op16_real.cpp
14         libcpu_newdev/libcpu_i386/i386dasm.cpp
15         )
16   set(MC6809_CPPS 
17         libcpu_newdev/libcpu_mc6809/mc6809.cpp
18   )
19   set(MCS48_CPPS
20         libcpu_newdev/mcs48.cpp
21         )
22   set(IX86_CPPS
23         libcpu_newdev/i86.cpp
24         )
25 else()
26   set(I386_CPPS i386.cpp)
27   set(MC6809_CPPS mc6809.cpp)
28   set(MCS48_CPPS mcs48.cpp)
29   set(IX86_CPPS i86.cpp)
30   set(VMFILES ${VMFILES} ${VMFILES_LIB})
31 endif()
32
33 if(FLAG_USE_I86)
34   set(VMFILES ${VMFILES} ${IX86_CPPS})
35 endif()
36 if(FLAG_USE_I286)
37   set(VMFILES ${VMFILES} i286.cpp)
38 endif()
39 if(FLAG_USE_I386_VARIANTS)
40   set(VMFILES ${VMFILES} ${I386_CPPS})
41 endif()
42 if(FLAG_USE_Z80)
43   set(VMFILES ${VMFILES} z80.cpp)
44 endif()
45 if(FLAG_USE_MC6809)
46   set(VMFILES ${VMFILES} ${MC6809_CPPS})
47 endif()
48 if(FLAG_USE_MCS48)
49   set(VMFILES ${VMFILES} ${MCS48_CPPS})
50 endif()
51 if(USE_DEVICES_SHARED_LIB)
52   set(VMFILES ${VMFILES}   libcpu_newdev/device.cpp)
53 endif()
54
55 if(DEFINED QT5_ROOT_PATH)
56   SET(CMAKE_FIND_ROOT_PATH  ${QT5_ROOT_PATH} ${CMAKE_FIND_ROOT_PATH})
57 endif()
58
59 # Use cmake if enabled.
60   find_program(USE_CCACHE ccache)
61   if(USE_CCACHE)
62    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
63    SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
64   endif()
65   FIND_PACKAGE(Qt5Widgets REQUIRED)
66   FIND_PACKAGE(Qt5Core REQUIRED)
67   FIND_PACKAGE(Qt5Gui REQUIRED)
68   FIND_PACKAGE(Qt5OpenGL REQUIRED)
69   include_directories(${Qt5Widgets_INCLUDE_DIRS})
70   include_directories(${Qt5Core_INCLUDE_DIRS})
71   include_directories(${Qt5Gui_INCLUDE_DIRS})
72   include_directories(${Qt5OpenGL_INCLUDE_DIRS})
73   add_definitions(-D_USE_OPENGL -DUSE_OPENGL)
74 if(USE_SOCKET)
75   FIND_PACKAGE(Qt5Network REQUIRED)
76   include_directories(${Qt5Network_INCLUDE_DIRS})
77 endif()
78 SET(USE_QT_5 ON)
79 set(USE_QT5_4_APIS OFF CACHE BOOL "Build with Qt5.4 (or later) APIs if you can.")
80 set(USE_GCC_OLD_ABI ON CACHE BOOL "Build with older GCC ABIs if you can.")
81 set(USE_SDL2 ON CACHE BOOL "Build with libSDL2. DIsable is building with libSDL1.")
82 set(USE_MOVIE_SAVER OFF CACHE BOOL "Save screen/audio as MP4 MOVIE. Needs libav .")
83 set(USE_MOVIE_LOADER OFF CACHE BOOL "Load movie from screen for some VMs. Needs libav .")
84 set(USE_LTO ON CACHE BOOL "Use link-time-optimization to build.")
85 if(USE_LTO)
86   # set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION true)
87 else()
88   # set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION false)
89 endif()
90
91 add_definitions(-D_USE_QT5)
92
93 if(USE_QT5_4_APIS)
94   add_definitions(-D_USE_QT_5_4)
95 else()
96   #add_definitions(-DQT_NO_VERSION_TAGGING)
97 endif()
98
99 if(USE_GCC_OLD_ABI)
100   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
101 else()
102   add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
103 endif()
104
105 SET(CMAKE_AUTOMOC OFF)
106 SET(CMAKE_AUTORCC ON)
107 SET(CMAKE_INCLUDE_CURRENT_DIR ON)
108
109
110 add_definitions(-D_USE_QT)
111 add_definitions(-DUSE_QT)
112 add_definitions(-DQT_MAJOR_VERSION=${Qt5Widgets_VERSION_MAJOR})
113 add_definitions(-DQT_MINOR_VERSION=${Qt5Widgets_VERSION_MINOR})
114
115 if(USE_OPENMP)
116   find_package(OpenMP)
117   include_directories(${OPENMP_INCLUDE_PATH})
118 endif()
119
120 find_package(Threads)
121 include_directories(${THREADS_INCLUDE_PATH})
122
123 include(FindPkgConfig)
124
125 include(FindLibAV)
126     if(LIBAV_FOUND)
127       add_definitions(-DUSE_LIBAV)
128       if(USE_MOVIE_SAVER)
129         add_definitions(-DUSE_MOVIE_SAVER)
130       endif()
131       if(USE_MOVIE_LOADER)
132         add_definitions(-DUSE_MOVIE_LOADER)
133       endif()
134       add_definitions(-D__STDC_CONSTANT_MACROS)
135       add_definitions(-D__STDC_FORMAT_MACROS)
136     else()
137       set(USE_MOVIE_SAVER OFF)
138       set(USE_MOVIE_LOADER OFF)
139       set(LIBAV_LIBRARIES "")
140     endif()
141     
142 if(USE_SDL2)
143    if(CMAKE_CROSSCOMPILING)
144       include_directories(${SDL2_INCLUDE_DIRS})
145    else()
146       pkg_search_module(SDL2 REQUIRED  sdl2)
147       include_directories(${SDL2_INCLUDE_DIRS})
148    endif()
149    set(SDL_LIBS ${SDL2_LIBRARIES})
150    add_definitions(-DUSE_SDL2)
151 else()
152    if(CMAKE_CROSSCOMPILING)
153       include_directories(${SDL_INCLUDE_DIRS})
154       set(SDL_LIBS ${SDL_LIBRARIES})
155    else()
156       include(FindSDL)
157       #pkg_search_module(SDL REQUIRED sdl)
158       #include_directories(${SDL_INCLUDE_DIRS})
159       include_directories(${SDL_INCLUDE_DIR})
160       set(SDL_LIBS ${SDL_LIBRARY})
161    endif()
162 endif()
163
164 # GCC Only?
165 if(CMAKE_COMPILER_IS_GNUCC) 
166   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flax-vector-conversions")
167 endif()
168
169 if(CMAKE_COMPILER_IS_GNUCXX) 
170  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -flax-vector-conversions")
171 endif()
172
173
174 check_function_exists("nanosleep" HAVE_NANOSLEEP)
175 if(NOT HAVE_NANOSLEEP)
176   check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP)
177 endif(NOT HAVE_NANOSLEEP)
178
179 if(LIB_RT_HAS_NANOSLEEP)
180   add_target_library(${EXEC_TARGET} rt)
181 endif(LIB_RT_HAS_NANOSLEEP)
182
183 if(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
184   add_definitions(-DHAVE_NANOSLEEP)
185 endif(HAVE_NANOSLEEP OR LIB_RT_HAS_NANOSLEEP)
186
187
188 set(SRC_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../src)
189
190 if(USE_QT_5)
191   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
192   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
193 endif()
194
195 if(DEFINED VM_NAME)
196 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm/${VM_NAME})
197 #  if(USE_FMGEN)
198     include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm/fmgen)
199 #    if(WIN32)
200 #      set(FMGEN_LIB vm_fmgen)
201 #         set(FMGEN_LIB "-lCSPfmgen")
202 #       endif()
203 #  endif()
204 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/machines/${VM_NAME})
205 endif()
206
207 if(LIBAV_FOUND)
208    include_directories(${LIBAV_INCLUDE_DIRS})
209 endif()
210 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src)
211 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/vm)
212 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/common)
213 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/gui)
214 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt)
215 if(WIN32)
216 #  add_subdirectory(../../src/qt/gui qt/gui)
217 endif()  
218 #add_subdirectory(../../src/qt qt/osd)
219 add_subdirectory(../../src common)
220 add_subdirectory(../../src/vm vm/)
221
222 if(DEFINED VM_NAME)
223 # if(WITH_DEBUGGER)
224    set(DEBUG_LIBS qt_debugger)
225    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../src/qt/debugger)
226    add_subdirectory(../../src/qt/debugger qt/debugger)
227 # else()
228 #   set(DEBUG_LIBS)
229 # endif()
230
231         if(WIN32)
232            set(LOCAL_LIBS     
233                    common_emu
234            qt_${VM_NAME}
235                    vm_${VM_NAME}
236                    vm_vm
237                    ${VM_APPEND_LIBS}
238                    ${DEBUG_LIBS}
239                    common_common
240                    )
241         else()
242            set(LOCAL_LIBS     
243                    common_emu
244            qt_${VM_NAME}
245                    vm_${VM_NAME}
246                    vm_vm
247                    ${VM_APPEND_LIBS}
248                    ${DEBUG_LIBS}
249                    common_common
250                    )
251         endif()
252 endif()
253
254 include(simd-x86)
255
256 if(WIN32)
257    set(BUNDLE_LIBS 
258        ${OPENGL_LIBRARY}
259        ${OPENCL_LIBRARY}
260        ${GETTEXT_LIBRARY}
261        ${OPENMP_LIBRARY}
262        ${LIBAV_LIBRARIES}
263        ${SDL_LIBS}
264        ${LIBAV_LIBRARIES}
265        ${ADDITIONAL_LIBRARIES}
266        )
267        #SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET>  <LINK_FLAGS> <OBJECTS>")
268        #SET(CMAKE_C_ARCHIVE_FINISH   true)
269        #SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qcs <TARGET> <LINK_FLAGS> <OBJECTS>")
270        #SET(CMAKE_CXX_ARCHIVE_FINISH   true)
271 else()
272    set(BUNDLE_LIBS 
273 #       ${OPENGL_LIBRARY}
274        ${OPENCL_LIBRARY}
275 #       ${GETTEXT_LIBRARY}
276        ${OPENMP_LIBRARY}
277        ${SDL_LIBS}
278 #       ${LIBAV_LIBRARIES}
279        ${ADDITIONAL_LIBRARIES}
280        )
281        set(BUNDLE_LIBS ${BUNDLE_LIBS} -lCSPosd -lCSPfmgen -lCSPcommon_vm -lCSPgui -lCSPemu_utils -lCSPavio)
282 endif()
283
284 if(USE_QT_5)
285   set(BUNDLE_LIBS ${BUNDLE_LIBS} ${QT_LIBRARIES})
286 endif()
287
288 set(BUNDLE_LIBS ${BUNDLE_LIBS} ${THREADS_LIBRARY})
289
290 if(DEFINED VM_NAME)
291         add_subdirectory(../../src/vm/${VM_NAME} vm/${VM_NAME})
292 #  if(USE_FMGEN)
293 #       add_subdirectory(../../src/vm/fmgen vm/fmgen)
294 #  endif()      
295         add_subdirectory(../../src/qt/machines/${VM_NAME} qt/${VM_NAME})
296         add_subdirectory(../../src/qt/common qt/common)
297 endif()