summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2017-02-03 16:13:50 +0100
committerMichal Klocek <michal.klocek@qt.io>2017-02-06 19:32:46 +0000
commitabaede7601ea7426242dc29deb964ab3dd543c0a (patch)
treef90e83c63f80c8ce58c5c75d0a52d3518e53477c
parent79ad6bad373bb5151ba7c3410609a9fee009be58 (diff)
Refactor release and debug handling
Fix release and debug builds. Refactor ninja and gn builds as a sub projects, these are only build as release. Call core_generator and gn_run separately for debug and release builds. Change-Id: I638023214cdc98a5101d190486452cc4a1229486 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--src/buildtools/buildtools.pro10
-rw-r--r--src/buildtools/gn.pro34
-rw-r--r--src/buildtools/ninja.pro31
-rw-r--r--src/core/core_generator.pro1
-rw-r--r--src/core/gn_run.pro26
-rw-r--r--src/core/gyp_run.pro4
-rw-r--r--src/src.pro5
-rw-r--r--tools/qmake/mkspecs/features/functions.prf35
-rw-r--r--tools/qmake/mkspecs/features/gn_generator.prf2
9 files changed, 96 insertions, 52 deletions
diff --git a/src/buildtools/buildtools.pro b/src/buildtools/buildtools.pro
new file mode 100644
index 000000000..4ca21768e
--- /dev/null
+++ b/src/buildtools/buildtools.pro
@@ -0,0 +1,10 @@
+TEMPLATE = subdirs
+
+ninja.file = ninja.pro
+SUBDIRS += ninja
+
+use?(gn) {
+ gn.file = gn.pro
+ gn.depends = ninja
+ SUBDIRS += gn
+}
diff --git a/src/buildtools/gn.pro b/src/buildtools/gn.pro
new file mode 100644
index 000000000..e9383bc3f
--- /dev/null
+++ b/src/buildtools/gn.pro
@@ -0,0 +1,34 @@
+TEMPLATE = aux
+CONFIG += release
+
+defineReplace(buildGn) {
+ gn_args = $$1
+ out = $$gnPath()
+ !qtConfig(system-ninja): ninja_path = "--path $$ninjaPath()"
+ # check if it is not already build
+ !exists($$out) {
+ mkpath($$dirname(out))
+ src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
+ gn_bootstrap = $$system_path($$absolute_path(chromium/tools/gn/bootstrap/bootstrap.py, $$src_3rd_party_dir))
+ gn_args = $$system_quote($$gn_args)
+ gn_configure = $$system_quote($$gn_bootstrap) --shadow --gn-gen-args=$$gn_args $$ninja_path
+ !system("cd $$system_quote($$system_path($$dirname(out))) && python $$gn_configure") {
+ error("GN build error!")
+ }
+ }
+}
+
+isQtMinimum(5, 8) {
+ include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri)
+ QT_FOR_CONFIG += webengine-private
+}
+
+!qtConfig(system-gn) {
+ buildgn.target = build_gn
+ buildgn.commands = $$buildGn($$gnArgs())
+ QMAKE_EXTRA_TARGETS += buildgn
+
+ default_target.target = first
+ default_target.depends = buildgn
+ QMAKE_EXTRA_TARGETS += default_target
+}
diff --git a/src/buildtools/ninja.pro b/src/buildtools/ninja.pro
new file mode 100644
index 000000000..c391d6e84
--- /dev/null
+++ b/src/buildtools/ninja.pro
@@ -0,0 +1,31 @@
+TEMPLATE = aux
+CONFIG += release
+
+defineReplace(buildNinja) {
+ out = $$ninjaPath()
+ # check if it is not already build
+ !exists($$out) {
+ mkpath($$dirname(out))
+ src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
+ ninja_configure = $$system_quote($$system_path($$absolute_path(ninja/configure.py, $$src_3rd_party_dir)))
+ !system("cd $$system_quote($$system_path($$dirname(out))) && python $$ninja_configure --bootstrap") {
+ error("NINJA build error!")
+ }
+ }
+}
+
+isQtMinimum(5, 8) {
+ include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri)
+ QT_FOR_CONFIG += webengine-private
+}
+
+!qtConfig(system-ninja) {
+ buildninja.target = build_ninja
+ buildninja.commands = $$buildNinja()
+ QMAKE_EXTRA_TARGETS += buildninja
+
+ default_target.target = first
+ default_target.depends = buildninja
+ QMAKE_EXTRA_TARGETS += default_target
+}
+
diff --git a/src/core/core_generator.pro b/src/core/core_generator.pro
index fdd1b8e59..6900468d9 100644
--- a/src/core/core_generator.pro
+++ b/src/core/core_generator.pro
@@ -1,6 +1,7 @@
use?(gn) {
include(core_gn_config.pri)
+ qtConfig(debug_and_release): CONFIG += debug_and_release
} else {
include(core_gyp_config.pri)
}
diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro
index 534f0c7b3..ec91b469d 100644
--- a/src/core/gn_run.pro
+++ b/src/core/gn_run.pro
@@ -5,11 +5,9 @@ isQtMinimum(5, 8) {
TEMPLATE = aux
-build_pass|!debug_and_release {
+qtConfig(debug_and_release): CONFIG += debug_and_release build_all
- macos: include(config/mac_osx.pri)
- linux: include(config/desktop_linux.pri)
- isEmpty(gn_args): error(No gn_args found please make sure you have valid configuration.)
+build_pass|!debug_and_release {
ninja_binary = ninja
gn_binary = gn
@@ -17,13 +15,7 @@ build_pass|!debug_and_release {
runninja.target = run_ninja
rungn.target = run_gn
- !qtConfig(system-ninja) {
- ninja_binary = $$shell_quote($$shell_path($$ninjaPath()))
- buildninja.target = build_ninja
- buildninja.commands = $$buildNinja()
- QMAKE_EXTRA_TARGETS += buildninja
- runninja.depends = buildninja
- }
+ gn_args = $$gnArgs()
CONFIG(release, debug|release):
gn_args += is_debug=false
@@ -32,13 +24,10 @@ build_pass|!debug_and_release {
!qtConfig(system-gn) {
gn_binary = $$shell_quote($$shell_path($$gnPath()))
- buildgn.target = build_gn
- buildgn.commands = $$buildGn($$gn_args)
- !qtConfig(system-ninja) {
- buildgn.depends = buildninja
- rungn.depends = buildninja
- }
- QMAKE_EXTRA_TARGETS += buildgn
+ }
+
+ !qtConfig(system-ninja) {
+ ninja_binary = $$shell_quote($$shell_path($$ninjaPath()))
}
gn_args = $$shell_quote($$gn_args)
@@ -54,7 +43,6 @@ build_pass|!debug_and_release {
build_pass:build_all: default_target.target = all
else: default_target.target = first
default_target.depends = runninja
-
QMAKE_EXTRA_TARGETS += default_target
} else {
# Special GNU make target for the meta Makefile that ensures that our debug and release Makefiles won't both run ninja in parallel.
diff --git a/src/core/gyp_run.pro b/src/core/gyp_run.pro
index fa8f73de4..2c6aa5069 100644
--- a/src/core/gyp_run.pro
+++ b/src/core/gyp_run.pro
@@ -159,10 +159,6 @@ build_pass|!debug_and_release {
!qtConfig(system-ninja) {
ninja_binary = $$shell_quote($$shell_path($$ninjaPath()))
- buildninja.target = build_ninja
- buildninja.commands = $$buildNinja()
- QMAKE_EXTRA_TARGETS += buildninja
- runninja.depends = buildninja
}
runninja.commands = $$ninja_binary \$\(NINJAFLAGS\) -C $$shell_quote($$OUT_PWD/$$getConfigDir())
diff --git a/src/src.pro b/src/src.pro
index 7f8b39cd6..d9b57615d 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -7,7 +7,10 @@ webengine_plugin.subdir = webengine/plugin
webengine_plugin.target = sub-webengine-plugin
webengine_plugin.depends = webengine
-SUBDIRS += core \
+core.depends = buildtools
+
+SUBDIRS += buildtools \
+ core \
process \
webengine \
webengine_plugin \
diff --git a/tools/qmake/mkspecs/features/functions.prf b/tools/qmake/mkspecs/features/functions.prf
index f3c2eb905..35607986d 100644
--- a/tools/qmake/mkspecs/features/functions.prf
+++ b/tools/qmake/mkspecs/features/functions.prf
@@ -380,19 +380,6 @@ defineReplace(ninjaPath) {
return($$out)
}
-defineReplace(buildNinja) {
- out = $$ninjaPath()
- # check if it is not already build
- !exists($$out) {
- mkpath($$dirname(out))
- src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
- ninja_configure = $$system_quote($$system_path($$absolute_path(ninja/configure.py, $$src_3rd_party_dir)))
- !system("cd $$system_quote($$system_path($$dirname(out))) && python $$ninja_configure --bootstrap") {
- error("NINJA build error!")
- }
- }
-}
-
defineReplace(gnPath) {
src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
out = $$shadowed($$absolute_path(chromium/tools/gn/out/Release/gn, $$src_3rd_party_dir))
@@ -401,21 +388,15 @@ defineReplace(gnPath) {
return($$out)
}
-defineReplace(buildGn) {
- gn_args = $$1
- out = $$gnPath()
- !qtConfig(system-ninja): ninja_path = "--path $$ninjaPath()"
- # check if it is not already build
- !exists($$out) {
- mkpath($$dirname(out))
- src_3rd_party_dir = $$absolute_path("$${getChromiumSrcDir()}/../", "$$QTWEBENGINE_ROOT")
- gn_bootstrap = $$system_path($$absolute_path(chromium/tools/gn/bootstrap/bootstrap.py, $$src_3rd_party_dir))
- gn_args = $$system_quote($$gn_args)
- gn_configure = $$system_quote($$gn_bootstrap) --shadow --gn-gen-args=$$gn_args $$ninja_path
- !system("cd $$system_quote($$system_path($$dirname(out))) && python $$gn_configure") {
- error("GN build error!")
- }
+defineReplace(gnArgs) {
+ linux {
+ contains(WEBENGINE_CONFIG, embedded_build): include($$QTWEBENGINE_ROOT/src/core/config/embedded_linux.pri)
+ else: include($$QTWEBENGINE_ROOT/src/core/config/desktop_linux.pri)
}
+ macos: include($$QTWEBENGINE_ROOT/src/core/config/mac_osx.pri)
+ win32: include($$QTWEBENGINE_ROOT/src/core/config/windows.pri)
+ isEmpty(gn_args): error(No gn_args found please make sure you have valid configuration.)
+ return($$gn_args)
}
defineTest(skipBuild) {
diff --git a/tools/qmake/mkspecs/features/gn_generator.prf b/tools/qmake/mkspecs/features/gn_generator.prf
index 0e4451fa1..47a218640 100644
--- a/tools/qmake/mkspecs/features/gn_generator.prf
+++ b/tools/qmake/mkspecs/features/gn_generator.prf
@@ -224,7 +224,7 @@ GN_CONTENTS += "}"
for (inc, GN_INCLUDES): GN_CONTENTS += $$cat($$inc,lines)
}
-!build_pass: write_file($$GN_FILE, GN_CONTENTS)
+build_pass|!debug_and_release: write_file($$GN_FILE, GN_CONTENTS)
# The generated Makefile shouldn't build anything by itself, just re-run qmake if necessary
TEMPLATE = aux