@@ -210,9 +210,8 @@ $manifest = @{
210210 cmdlinetools = ' 7.0+' ; # android cmdlinetools
211211}
212212
213- # the default generator of unix targets: linux, osx, ios, android, wasm
213+ # the default generator requires explicit specified: osx, ios, android, wasm
214214$cmake_generators = @ {
215- ' linux' = ' Unix Makefiles'
216215 ' android' = ' Ninja'
217216 ' wasm' = ' Ninja'
218217 ' wasm64' = ' Ninja'
@@ -251,6 +250,7 @@ $options = @{
251250 u = $false # whether delete 1kdist cross-platform prebuilt folder: path/to/_x
252251 dm = $false # dump compiler preprocessors
253252 i = $false # perform install
253+ scope = ' local'
254254}
255255
256256$optName = $null
@@ -484,6 +484,9 @@ function devtool_url($filename) {
484484function version_eq ($ver1 , $ver2 ) {
485485 return $ver1 -eq $ver2
486486}
487+ function version_like ($ver1 , $ver2 ) {
488+ return $ver1 -like $ver2
489+ }
487490
488491# $ver2: accept x.y.z-rc1
489492function version_ge ($ver1 , $ver2 ) {
@@ -569,6 +572,7 @@ function find_prog($name, $path = $null, $mode = 'ONLY', $cmd = $null, $params =
569572 $checkVerCond = $null
570573 $minimalVer = ' '
571574 $preferredVer = ' '
575+ $wildcardVer = ' '
572576 $requiredVer = $manifest [$name ]
573577 if ($requiredVer ) {
574578 $preferredVer = $null
@@ -585,12 +589,19 @@ function find_prog($name, $path = $null, $mode = 'ONLY', $cmd = $null, $params =
585589 $preferredVer = $preferredVer.TrimEnd (' +' )
586590 if ($minimalVer.EndsWith (' +' )) { $minimalVer = $minimalVer.TrimEnd (' +' ) }
587591 $checkVerCond = ' $(version_ge $foundVer $minimalVer)'
588- } else {
592+ }
593+ else {
589594 if ($isRange ) {
590595 $checkVerCond = ' $(version_in_range $foundVer $minimalVer $preferredVer)'
591596 }
592597 else {
593- $checkVerCond = ' $(version_eq $foundVer $preferredVer)'
598+ if (! $preferredVer.Contains (' *' )) {
599+ $checkVerCond = ' $(version_eq $foundVer $preferredVer)'
600+ } else {
601+ $wildcardVer = $preferredVer
602+ $preferredVer = $wildcardVer.TrimEnd (' .*' )
603+ $checkVerCond = ' $(version_like $foundVer $wildcardVer)'
604+ }
594605 }
595606 }
596607 }
@@ -644,7 +655,6 @@ function find_prog($name, $path = $null, $mode = 'ONLY', $cmd = $null, $params =
644655 }
645656 else {
646657 if ($preferredVer ) {
647- # if (!$silent) { $1k.println("Not found $name, needs install: $preferredVer") }
648658 $found_rets = $null , $preferredVer
649659 }
650660 else {
@@ -833,7 +843,7 @@ function setup_ninja() {
833843}
834844
835845# setup cmake
836- function setup_cmake ($skipOS = $false , $scope = ' local ' ) {
846+ function setup_cmake ($skipOS = $false ) {
837847 $cmake_prog , $cmake_ver = find_prog - name ' cmake'
838848 if ($cmake_prog -and (! $skipOS -or $cmake_prog.Contains ($myRoot ))) {
839849 return $cmake_prog , $cmake_ver
@@ -887,13 +897,15 @@ function setup_cmake($skipOS = $false, $scope = 'local') {
887897 }
888898 }
889899 elseif ($IsLinux ) {
890- if ($scope -ne ' global' ) {
900+ if ($option . scope -ne ' global' ) {
891901 $1k.mkdirs ($cmake_root )
892902 & " $cmake_pkg_path " ' --skip-license' ' --exclude-subdir' " --prefix=$cmake_root " 1> $null 2> $null
893903 }
894904 else {
895- & " $cmake_pkg_path " ' --skip-license' ' --prefix=/usr/local' 1> $null 2> $null
905+ $cmake_bin = ' /usr/local/bin'
906+ sudo bash " $cmake_pkg_path " ' --skip-license' ' --prefix=/usr/local' 1> $null 2> $null
896907 }
908+ if (! $? ) { Remove-Item $cmake_pkg_path - Force }
897909 }
898910
899911 $cmake_prog , $_ = find_prog - name ' cmake' - path $cmake_bin - silent $true
@@ -903,6 +915,7 @@ function setup_cmake($skipOS = $false, $scope = 'local') {
903915
904916 $1k.println (" Using cmake: $cmake_prog , version: $cmake_ver " )
905917 }
918+
906919 $1k.addpath ($cmake_bin )
907920 return $cmake_prog , $cmake_ver
908921}
@@ -1220,7 +1233,9 @@ function setup_msvc() {
12201233 if (! $cl_prog ) {
12211234 if ($VS_INST ) {
12221235 Import-Module " $VS_PATH \Common7\Tools\Microsoft.VisualStudio.DevShell.dll"
1223- Enter-VsDevShell - VsInstanceId $VS_INST.instanceId - SkipAutomaticLocation - DevCmdArguments " -arch=$target_cpu -host_arch=x64 -no_logo"
1236+ $dev_cmd_args = " -arch=$target_cpu -host_arch=x64 -no_logo"
1237+ if (! $manifest [' msvc' ].EndsWith(' +' )) { $dev_cmd_args += " -vcvars_ver=$cl_ver " }
1238+ Enter-VsDevShell - VsInstanceId $VS_INST.instanceId - SkipAutomaticLocation - DevCmdArguments $dev_cmd_args
12241239
12251240 $cl_prog , $cl_ver = find_prog - name ' msvc' - cmd ' cl' - silent $true - usefv $true
12261241 $1k.println (" Using msvc: $cl_prog , version: $cl_ver " )
@@ -1560,7 +1575,7 @@ elseif ($Global:is_android) {
15601575 $ninja_prog = setup_ninja
15611576 # ensure ninja in cmake_bin
15621577 if (! (ensure_cmake_ninja $cmake_prog $ninja_prog )) {
1563- $cmake_prog , $Script :cmake_ver = setup_cmake - Force
1578+ $cmake_prog , $Script :cmake_ver = setup_cmake - skipOS $true
15641579 if (! (ensure_cmake_ninja $cmake_prog $ninja_prog )) {
15651580 $1k.println (" Ensure ninja in cmake bin directory fail" )
15661581 }
@@ -1589,14 +1604,19 @@ elseif ($Global:is_wasm) {
15891604}
15901605
15911606$is_host_target = $Global :is_win32 -or $Global :is_linux -or $Global :is_mac
1607+ $is_host_cpu = $HOST_CPU -eq $TARGET_CPU
15921608
15931609if (! $setupOnly ) {
15941610 $BUILD_DIR = $null
15951611 $SOURCE_DIR = $null
15961612
15971613 function resolve_out_dir ($prefix ) {
15981614 if ($is_host_target ) {
1599- $out_dir = " ${prefix}${TARGET_CPU} "
1615+ if (! $is_host_cpu ) {
1616+ $out_dir = " ${prefix}${TARGET_CPU} "
1617+ } else {
1618+ $out_dir = $prefix.TrimEnd (" _" )
1619+ }
16001620 }
16011621 else {
16021622 $out_dir = " ${prefix}${TARGET_OS} "
@@ -1707,7 +1727,7 @@ if (!$setupOnly) {
17071727 }
17081728 }
17091729
1710- if (! $cmake_generator -and ! $TARGET_OS.StartsWith (' win' )) {
1730+ if (! $cmake_generator -and ! $TARGET_OS.StartsWith (' win' ) -and $TARGET_OS -ne ' linux ' ) {
17111731 $cmake_generator = $cmake_generators [$TARGET_OS ]
17121732 if ($null -eq $cmake_generator ) {
17131733 $cmake_generator = if (! $IsWin ) { ' Unix Makefiles' } else { ' Ninja' }
0 commit comments