Skip to content

Commit 73f5342

Browse files
authored
Merge pull request #4458 from kinke/custom_ninja
CI: Switch to custom ninja, trying to schedule `ldc2.o` compilation early
2 parents 5ef25a2 + 1860eae commit 73f5342

File tree

7 files changed

+52
-22
lines changed

7 files changed

+52
-22
lines changed

.circleci/config.yml

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,31 @@ commonSteps: &commonSteps
1818
fi
1919
apt-get -q update
2020
apt-get -yq install \
21-
git-core cmake ninja-build $gcc_pkg \
21+
git-core $gcc_pkg \
2222
zlib1g-dev $libcurl_pkg curl gdb python3 python3-pip tzdata unzip zip \
2323
$EXTRA_APT_PACKAGES
24+
# Download & extract CMake
25+
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-x86_64.tar.gz
26+
mkdir cmake
27+
tar -xf cmake.tar.gz --strip 1 -C cmake
28+
rm cmake.tar.gz
29+
# Download & extract Ninja
30+
curl -fL --retry 3 --max-time 60 -O https://github.com/symmetryinvestments/ninja/releases/download/v1.11.1-sym1/ninja-linux.zip
31+
mkdir ninja
32+
unzip ninja-linux.zip -d ninja
33+
rm ninja-linux.zip
34+
# Add CMake and Ninja to PATH for future steps
35+
echo "export PATH=$PWD/cmake/bin:$PWD/ninja:$PATH" >> $BASH_ENV
2436
else
2537
# Download & extract CMake
26-
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.20.3/cmake-3.20.3-macos-universal.tar.gz
38+
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-macos-universal.tar.gz
2739
mkdir cmake
2840
tar -xf cmake.tar.gz --strip 3 -C cmake
2941
rm cmake.tar.gz
3042
# Download & extract Ninja
31-
curl -fL --retry 3 --max-time 60 -O https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-mac.zip
43+
curl -fL --retry 3 --max-time 60 -O https://github.com/symmetryinvestments/ninja/releases/download/v1.11.1-sym1/ninja-mac.zip
3244
mkdir ninja
33-
tar -xf ninja-mac.zip -C ninja
45+
unzip ninja-mac.zip -d ninja
3446
rm ninja-mac.zip
3547
# Download & extract LDC-flavoured LLVM with enabled assertions
3648
curl -fL --retry 3 --max-time 300 -o llvm.tar.xz https://github.com/ldc-developers/llvm-project/releases/download/ldc-v$LLVM_VERSION/llvm-$LLVM_VERSION-osx-x86_64-withAsserts.tar.xz
@@ -68,12 +80,7 @@ commonSteps: &commonSteps
6880
-DD_COMPILER=$PWD/../host-ldc/bin/ldmd2 \
6981
-DLDC_LINK_MANUALLY=OFF \
7082
$EXTRA_CMAKE_FLAGS
71-
# Work around out-of-memory errors - retry once with parallelization and one last time serially
72-
targets='all ldc2-unittest all-test-runners'
73-
for i in {1..2}; do
74-
ninja -j$PARALLELISM -k0 $targets && break || true
75-
done
76-
ninja -j1 $targets
83+
ninja -j$PARALLELISM obj/ldc2.o all ldc2-unittest all-test-runners
7784
bin/ldc2 -version
7885
- run:
7986
name: Run LDC D unittests

.cirrus.yml

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ common_steps_template: &COMMON_STEPS_TEMPLATE
2727
-DINCLUDE_INSTALL_DIR=$installDir/import \
2828
-DLDC_LINK_MANUALLY=OFF \
2929
"${extraFlags[@]}"
30-
ninja -j$PARALLELISM all ldc2-unittest all-test-runners
30+
ninja -j$PARALLELISM obj/ldc2.o all ldc2-unittest all-test-runners
3131
bin/ldc2 -version
3232
always:
3333
run_compiler_unittests_script: |
@@ -190,10 +190,22 @@ install_ubuntu_prerequisites_template: &INSTALL_UBUNTU_PREREQUISITES_TEMPLATE
190190
fi
191191
apt-get -q update
192192
apt-get -yq install \
193-
git-core cmake ninja-build $gcc_pkg \
193+
git-core ninja-build $gcc_pkg \
194194
zlib1g-dev $libcurl_pkg curl gdb python3 python3-pip tzdata unzip zip \
195195
$EXTRA_APT_PACKAGES
196196
python3 --version
197+
# Download & extract CMake
198+
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-linux-$CI_ARCH.tar.gz
199+
mkdir cmake
200+
tar -xf cmake.tar.gz --strip 1 -C cmake
201+
rm cmake.tar.gz
202+
# Download & extract custom Ninja on x86_64
203+
if [[ "$CI_ARCH" == "x86_64" ]]; then
204+
curl -fL --retry 3 --max-time 60 -O https://github.com/symmetryinvestments/ninja/releases/download/v1.11.1-sym1/ninja-linux.zip
205+
mkdir ninja
206+
unzip ninja-linux.zip -d ninja
207+
rm ninja-linux.zip
208+
fi
197209
# Download & extract host LDC
198210
curl -fL --retry 3 --max-time 300 -o ldc2.tar.xz https://github.com/ldc-developers/ldc/releases/download/v$HOST_LDC_VERSION/ldc2-$HOST_LDC_VERSION-linux-$CI_ARCH.tar.xz
199211
mkdir host-ldc
@@ -207,12 +219,12 @@ install_macos_prerequisites_template: &INSTALL_MACOS_PREREQUISITES_TEMPLATE
207219
cd $CIRRUS_WORKING_DIR/..
208220
sysctl -n hw.logicalcpu
209221
# Download & extract CMake
210-
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.20.3/cmake-3.20.3-macos-universal.tar.gz
222+
curl -fL --retry 3 --max-time 300 -o cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.27.1/cmake-3.27.1-macos-universal.tar.gz
211223
mkdir cmake
212224
tar -xf cmake.tar.gz --strip 3 -C cmake
213225
rm cmake.tar.gz
214226
# Download & extract Ninja
215-
curl -fL --retry 3 --max-time 60 -O https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-mac.zip
227+
curl -fL --retry 3 --max-time 60 -O https://github.com/symmetryinvestments/ninja/releases/download/v1.11.1-sym1/ninja-mac.zip
216228
mkdir ninja
217229
tar -xf ninja-mac.zip -C ninja
218230
rm ninja-mac.zip
@@ -253,6 +265,7 @@ task:
253265
EXTRA_APT_PACKAGES: "llvm-dev libclang-common-10-dev"
254266
EXTRA_CMAKE_FLAGS: "-DMULTILIB=ON -DRT_SUPPORT_SANITIZERS=ON -DBUILD_LTO_LIBS=ON"
255267
PARALLELISM: 8
268+
PATH: ${CIRRUS_WORKING_DIR}/../cmake/bin:${CIRRUS_WORKING_DIR}/../ninja:${PATH}
256269
<< : *INSTALL_UBUNTU_PREREQUISITES_TEMPLATE
257270
<< : *COMMON_STEPS_TEMPLATE
258271

@@ -271,6 +284,7 @@ task:
271284
EXTRA_APT_PACKAGES: "gdmd llvm-dev libclang-common-15-dev"
272285
EXTRA_CMAKE_FLAGS: "-DBUILD_SHARED_LIBS=ON -DBUILD_LTO_LIBS=ON -DD_COMPILER=gdmd -DLDC_LINK_MANUALLY=ON"
273286
PARALLELISM: 8
287+
PATH: ${CIRRUS_WORKING_DIR}/../cmake/bin:${CIRRUS_WORKING_DIR}/../ninja:${PATH}
274288
# for gdmd:
275289
LANG: C.UTF-8
276290
<< : *INSTALL_UBUNTU_PREREQUISITES_TEMPLATE
@@ -290,6 +304,7 @@ task:
290304
EXTRA_APT_PACKAGES: "llvm-dev libclang-common-10-dev"
291305
EXTRA_CMAKE_FLAGS: "-DBUILD_LTO_LIBS=ON"
292306
PARALLELISM: 8
307+
PATH: ${CIRRUS_WORKING_DIR}/../cmake/bin:${CIRRUS_WORKING_DIR}/../ninja:${PATH}
293308
<< : *INSTALL_UBUNTU_PREREQUISITES_TEMPLATE
294309
<< : *COMMON_STEPS_TEMPLATE
295310

@@ -347,6 +362,7 @@ task:
347362
-DLLVM_ROOT_DIR=$CIRRUS_WORKING_DIR/../llvm
348363
-DD_COMPILER=$CIRRUS_WORKING_DIR/../bootstrap-ldc/bin/ldmd2
349364
PARALLELISM: 4
365+
PATH: ${CIRRUS_WORKING_DIR}/../cmake/bin:${PATH}
350366
CLANG_VERSION: '15.0.3' # 15.0.6 requires a more recent libstdc++.so.6 than shipped with Ubuntu 20
351367
CC: $CIRRUS_WORKING_DIR/../clang/bin/clang
352368
CXX: $CIRRUS_WORKING_DIR/../clang/bin/clang++
@@ -390,7 +406,7 @@ task:
390406
-DD_COMPILER=$PWD/../host-ldc/bin/ldmd2 \
391407
-DBUILD_SHARED_LIBS=OFF \
392408
-DBUILD_LTO_LIBS=ON
393-
ninja -j$PARALLELISM
409+
ninja -j$PARALLELISM obj/ldc2.o all
394410
bin/ldc2 -version
395411
<< : *COMMON_STEPS_TEMPLATE
396412
<< : *PACKAGING_STEPS_TEMPLATE

.github/actions/1-setup/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ runs:
103103
ld --version
104104
105105
- name: Install ninja
106-
uses: seanmiddleditch/gha-setup-ninja@v3
106+
uses: symmetryinvestments/gha-setup-ninja@v1
107107

108108
- name: Install D host compiler
109109
uses: dlang-community/setup-dlang@v1

.github/actions/helper-build-ldc/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inputs:
1515
default: ''
1616
build_targets:
1717
required: false
18-
default: '' # all
18+
default: 'all'
1919
arch:
2020
required: false # Windows only
2121
runs:
@@ -39,7 +39,7 @@ runs:
3939
${{ inputs.specify_install_dir == 'true' && '-DINCLUDE_INSTALL_DIR="$installDir/import"' || '' }} \
4040
${{ inputs.cmake_flags }}
4141
42-
ninja ${{ inputs.build_targets }}
42+
ninja obj/ldc2.o ${{ inputs.build_targets }}
4343
4444
# Windows: invoke CMake & ninja in MSVC env
4545
- if: runner.os == 'Windows'
@@ -62,4 +62,4 @@ runs:
6262
${{ inputs.cmake_flags }}
6363
if %errorlevel% neq 0 exit /b %errorlevel%
6464
65-
ninja ${{ inputs.build_targets }} || exit /b
65+
ninja obj/ldc2.obj ${{ inputs.build_targets }} || exit /b

.github/workflows/supported_llvm_versions.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ jobs:
5858
submodules: true
5959
fetch-depth: 50
6060
- name: Install ninja
61-
uses: seanmiddleditch/gha-setup-ninja@v3
61+
uses: symmetryinvestments/gha-setup-ninja@v1
6262
- name: Install D host compiler
6363
uses: dlang-community/setup-dlang@v1
6464
with:
@@ -122,7 +122,7 @@ jobs:
122122
-DLLVM_ROOT_DIR="$PWD/llvm" \
123123
-DLDC_LINK_MANUALLY=OFF \
124124
${{ matrix.cmake_flags }}
125-
ninja all ldc2-unittest all-test-runners
125+
ninja obj/ldc2.o all ldc2-unittest all-test-runners
126126
bin/ldc2 --version
127127
128128
- name: Run LDC D unittests

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
cmake_minimum_required(VERSION 3.4.3)
22
if(POLICY CMP0025)
3-
cmake_policy(SET CMP0025 NEW)
3+
cmake_policy(SET CMP0025 NEW)
4+
endif()
5+
if(${CMAKE_VERSION} VERSION_GREATER "3.26.9")
6+
# Prevent implicit dependencies for custom commands, e.g.,
7+
# `obj/ldc2.o` depending on `lib/libldc.a` with LDC_LINK_MANUALLY=ON.
8+
# Only supported since CMake v3.27 unfortunately.
9+
set(CMAKE_ADD_CUSTOM_COMMAND_DEPENDS_EXPLICIT_ONLY ON)
410
endif()
511

612
project(ldc)

runtime/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,7 @@ if(TARGET gen_gccbuiltins)
335335
add_custom_command(
336336
OUTPUT ${module}
337337
COMMAND gen_gccbuiltins ${module} "${name}"
338+
DEPENDS gen_gccbuiltins
338339
)
339340
endfunction()
340341

0 commit comments

Comments
 (0)