OSDN Git Service

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