985d1051cecc64d03ac1e80eef67cbfff0657349
[occt.git] / adm / qmake / OccCppConfig.pri
1 # This is project defines C++ compilation rules for building an OCCT Toolkit.
2
3 exists(custom.auto.pri) { include(custom.auto.pri) }
4 exists(custom.pri)      { include(custom.pri) }
5
6 # Disable some dummy Qt defaults
7 QT -= core gui
8 CONFIG -= qt app_bundle
9 CONFIG -= qml_debug
10 CONFIG -= debug_and_release
11
12 OccGitRoot = $$_PRO_FILE_PWD_/../../../..
13
14 # Define compilation flags
15 CONFIG += warn_on
16 QMAKE_CFLAGS_WARN_ON   = -Wall -Wextra
17 QMAKE_CXXFLAGS_WARN_ON = -Wall -Wextra
18 win32 {
19   QMAKE_CFLAGS_WARN_ON   = -W4
20   QMAKE_CXXFLAGS_WARN_ON = -W4
21   QMAKE_CXXFLAGS_EXCEPTIONS_ON = /EHa
22   QMAKE_CXXFLAGS_STL_ON = /EHa
23
24   QMAKE_CXXFLAGS += -fp:precise
25   #QMAKE_CXXFLAGS -= -Zc:throwingNew
26   #QMAKE_CXXFLAGS -= -Zc:rvalueCast
27
28   QMAKE_LFLAGS += -INCREMENTAL:NO
29
30   CONFIG(debug, debug|release) {
31     QMAKE_CXXFLAGS += -Od
32     QMAKE_CXXFLAGS += -Ob1
33   }
34
35   DEFINES -= WIN32
36   DEFINES -= WIN64
37   DEFINES += _CRT_SECURE_NO_WARNINGS
38   DEFINES += _CRT_NONSTDC_NO_DEPRECATE
39   DEFINES += _SCL_SECURE_NO_WARNINGS
40 } else {
41   CONFIG += c++11
42   QMAKE_CFLAGS   += -fexceptions
43   QMAKE_CXXFLAGS += -fexceptions
44   QMAKE_CXXFLAGS += -fvisibility=default
45   DEFINES += OCC_CONVERT_SIGNALS
46   gcc {
47     QMAKE_LFLAGS += -Wl,-z,defs
48   }
49   mac {
50     iphoneos {
51       QMAKE_IOS_DEPLOYMENT_TARGET = 8.0
52     } else {
53       QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.14
54     }
55   }
56 }
57 !CONFIG(debug, debug|release) {
58   # disable exceptions in Release builds
59   DEFINES += No_Exception
60   HAVE_RelWithDebInfo {
61     win32 {
62       CONFIG += force_debug_info
63     }
64   }
65 }
66
67 # Define output folder depending on compiler name
68 MY_BITNESS = 32
69
70 equals(QMAKE_TARGET.arch, x86_64) | equals(QMAKE_HOST.arch, x86_64) { MY_BITNESS = 64 }
71 equals(ANDROID_TARGET_ARCH, arm64-v8a) { MY_BITNESS = 64 }
72 has64Target = $$find(QMAKE_TARGET.arch, "x64")
73 count(has64Target, 1) { MY_BITNESS = 64 }
74
75 MY_PLATFORM = platform
76 CONFIG(iphonesimulator, iphoneos|iphonesimulator) { MY_PLATFORM = iphonesimulator
77 } else:CONFIG(iphoneos, iphoneos|iphonesimulator) { MY_PLATFORM = iphoneos
78 } else:android { MY_PLATFORM = android-$$ANDROID_TARGET_ARCH
79 } else:win32   { MY_PLATFORM = win$$MY_BITNESS
80 } else:mac     { MY_PLATFORM = mac
81 } else:linux   { MY_PLATFORM = lin
82 } else:unix    { MY_PLATFORM = unix
83 } else { warning (Unknown platform. "$$MY_PLATFORM" is used) }
84
85 MY_COMPILER = compiler
86 MY_VC_VER = 0
87 android-g++ {
88   MY_COMPILER = gcc
89 } else:clang {
90   MY_COMPILER = clang
91 } else:gcc {
92   MY_COMPILER = gcc
93 } else:win32-msvc2010 {
94   MY_COMPILER = vc10
95   MY_VC_VER = 10
96 } else:win32-msvc2012 {
97   MY_COMPILER = vc11
98   MY_VC_VER = 11
99 } else:win32-msvc2013 {
100   MY_COMPILER = vc12
101   MY_VC_VER = 12
102 } else:win32-msvc2015 {
103   MY_COMPILER = vc14
104   MY_VC_VER = 14
105 } else:win32-msvc2017 {
106   MY_COMPILER = vc14
107   MY_VC_VER = 14
108 } else:win32-msvc {
109   MY_COMPILER = vc14
110   MY_VC_VER = 14
111   aMsvcVer = $$(VisualStudioVersion)
112   equals(aMsvcVer, 14.0){
113     # VS2015, vc140
114   } else:equals(aMsvcVer, 15.0){
115     # VS2015, vc141
116   } else:equals(aMsvcVer, 16.0){
117     # VS2019, vc142
118   } else {
119     warning (Unknown msvc version. "$$MY_COMPILER" is used)
120   }
121 } else {
122   warning (Unknown compiler. "$$MY_COMPILER" is used)
123 }
124 MY_PLATFORM_AND_COMPILER = $$MY_PLATFORM/$$MY_COMPILER
125 #warning (The platform is "$$MY_PLATFORM"; bitness is "$$MY_BITNESS"; compiler is "$$MY_COMPILER")
126
127 CONFIG(debug, debug|release) { MY_BUILDTYPE = d }
128
129 DESTDIR = $$OccGitRoot/$${MY_PLATFORM_AND_COMPILER}/lib$${MY_BUILDTYPE}
130 win32 {
131   DESTDIR  = $$OccGitRoot/win$${MY_BITNESS}/vc$${MY_VC_VER}/bin$${MY_BUILDTYPE}
132   aLibDest = $$DESTDIR/../lib$${MY_BUILDTYPE}
133   #DLLDESTDIR = $$DESTDIR/../bin$${MY_BUILDTYPE}
134
135   # dummy target creating lib/libd folder
136   occtkgen_libfolder.input  = $$_PRO_FILE_PWD_/../../OcctDummy.in
137   occtkgen_libfolder.output = $$aLibDest/dummy.tmp
138   occtkgen_libfolder.config = verbatim
139   QMAKE_SUBSTITUTES += occtkgen_libfolder
140
141   LIBS += -L$$aLibDest
142   equals(TEMPLATE, lib) {
143     QMAKE_CLEAN += $$DESTDIR/$${TARGET}.dll
144     QMAKE_CLEAN += $$aLibDest/$${TARGET}.lib
145     QMAKE_CLEAN += $$aLibDest/$${TARGET}.exp
146   } else {
147     QMAKE_CLEAN += $$DESTDIR/$${TARGET}.exe
148   }
149   QMAKE_CLEAN += $$DESTDIR/$${TARGET}.pdb
150   QMAKE_LFLAGS += -PDB:"$$DESTDIR/$${TARGET}.pdb"
151   QMAKE_LFLAGS += -IMPLIB:"$$aLibDest/$${TARGET}.lib"
152 } else {
153   LIBS += -L$$DESTDIR
154   equals(TEMPLATE, app) {
155     DESTDIR = $$OccGitRoot/$${MY_PLATFORM_AND_COMPILER}/bin$${MY_BUILDTYPE}
156   }
157 }
158
159 OBJECTS_DIR = $$DESTDIR/../obj$${MY_BUILDTYPE}/$${TARGET}