OSDN Git Service

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